Merge branch 'dev' into metadata-exiv2
This commit is contained in:
commit
21a97980b6
@ -164,7 +164,7 @@ endif()
|
|||||||
if(NOT DEFINED DATADIR)
|
if(NOT DEFINED DATADIR)
|
||||||
if(BUILD_BUNDLE)
|
if(BUILD_BUNDLE)
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(DATADIR "../Resources")
|
set(DATADIR "../../Resources")
|
||||||
else()
|
else()
|
||||||
set(DATADIR .)
|
set(DATADIR .)
|
||||||
endif()
|
endif()
|
||||||
@ -176,7 +176,7 @@ endif()
|
|||||||
if(NOT DEFINED LIBDIR)
|
if(NOT DEFINED LIBDIR)
|
||||||
if(BUILD_BUNDLE)
|
if(BUILD_BUNDLE)
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(LIBDIR "../Frameworks")
|
set(LIBDIR "../../Frameworks")
|
||||||
else()
|
else()
|
||||||
set(LIBDIR .)
|
set(LIBDIR .)
|
||||||
endif()
|
endif()
|
||||||
@ -256,6 +256,10 @@ if(APPLE)
|
|||||||
if("${CODESIGNID}")
|
if("${CODESIGNID}")
|
||||||
set(CODESIGNID "${CODESIGNID}" CACHE STRING "Codesigning Identity")
|
set(CODESIGNID "${CODESIGNID}" CACHE STRING "Codesigning Identity")
|
||||||
endif()
|
endif()
|
||||||
|
if("${NOTARY}")
|
||||||
|
set(NOTARY "${NOTARY}" CACHE STRING "Notarization Identity")
|
||||||
|
endif()
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Enforce absolute paths for non-bundle builds:
|
# Enforce absolute paths for non-bundle builds:
|
||||||
|
@ -84,8 +84,6 @@ FILEBROWSER_COPYPROFILE;Copia
|
|||||||
FILEBROWSER_CURRENT_NAME;Nom actual:
|
FILEBROWSER_CURRENT_NAME;Nom actual:
|
||||||
FILEBROWSER_DARKFRAME;Marc fosc
|
FILEBROWSER_DARKFRAME;Marc fosc
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Confirmació d'esborrar fitxer
|
FILEBROWSER_DELETEDIALOG_HEADER;Confirmació d'esborrar fitxer
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Segur que voleu esborrar els <b>%1</b> fitxers?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Segur que voleu suprimir els fitxers <b>%1</b> seleccionats <b>incloent</b> la versió processada a la cua?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Buida paperera
|
FILEBROWSER_EMPTYTRASH;Buida paperera
|
||||||
FILEBROWSER_EXTPROGMENU;Obre amb
|
FILEBROWSER_EXTPROGMENU;Obre amb
|
||||||
FILEBROWSER_FLATFIELD;Camp pla
|
FILEBROWSER_FLATFIELD;Camp pla
|
||||||
@ -108,8 +106,6 @@ FILEBROWSER_POPUPPROCESS;Posa a la cua
|
|||||||
FILEBROWSER_POPUPPROCESSFAST;Posa a la cua (export. ràpida)
|
FILEBROWSER_POPUPPROCESSFAST;Posa a la cua (export. ràpida)
|
||||||
FILEBROWSER_POPUPPROFILEOPERATIONS;Processant operacions de perfil
|
FILEBROWSER_POPUPPROFILEOPERATIONS;Processant operacions de perfil
|
||||||
FILEBROWSER_POPUPRANK;Rang
|
FILEBROWSER_POPUPRANK;Rang
|
||||||
FILEBROWSER_POPUPREMOVE;Esborra el fitxer
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Esborra amb sortida de la cua
|
|
||||||
FILEBROWSER_POPUPRENAME;Reanomena
|
FILEBROWSER_POPUPRENAME;Reanomena
|
||||||
FILEBROWSER_POPUPSELECTALL;Selec. tot
|
FILEBROWSER_POPUPSELECTALL;Selec. tot
|
||||||
FILEBROWSER_POPUPTRASH;Llença a la paperera
|
FILEBROWSER_POPUPTRASH;Llença a la paperera
|
||||||
@ -942,8 +938,10 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: <b>-</b>
|
|||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\n<b>Shift-Ctrl-0</b> No Color\n<b>Shift-Ctrl-1</b> Red\n<b>Shift-Ctrl-2</b> Yellow\n<b>Shift-Ctrl-3</b> Green\n<b>Shift-Ctrl-4</b> Blue\n<b>Shift-Ctrl-5</b> Purple
|
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\n<b>Shift-Ctrl-0</b> No Color\n<b>Shift-Ctrl-1</b> Red\n<b>Shift-Ctrl-2</b> Yellow\n<b>Shift-Ctrl-3</b> Green\n<b>Shift-Ctrl-4</b> Blue\n<b>Shift-Ctrl-5</b> Purple
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
|
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
|
||||||
!FILEBROWSER_POPUPCOLORLABEL1;Label: Red
|
!FILEBROWSER_POPUPCOLORLABEL1;Label: Red
|
||||||
!FILEBROWSER_POPUPCOLORLABEL2;Label: Yellow
|
!FILEBROWSER_POPUPCOLORLABEL2;Label: Yellow
|
||||||
@ -956,13 +954,15 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: <b>-</b>
|
|||||||
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
||||||
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
||||||
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: <b>Shift-1</b>
|
!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: <b>Shift-1</b>
|
||||||
!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: <b>Shift-2</b>
|
!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: <b>Shift-2</b>
|
||||||
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: <b>Shift-3</b>
|
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: <b>Shift-3</b>
|
||||||
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: <b>Shift-4</b>
|
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: <b>Shift-4</b>
|
||||||
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: <b>Shift-5</b>
|
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: <b>Shift-5</b>
|
||||||
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
||||||
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: <b>Shift-0</b>
|
!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: <b>Shift-0</b>
|
||||||
!FILECHOOSER_FILTER_ANY;All files
|
!FILECHOOSER_FILTER_ANY;All files
|
||||||
@ -1703,7 +1703,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: <b>-</b>
|
|||||||
!TP_COLORAPP_SURROUND_DARK;Dark
|
!TP_COLORAPP_SURROUND_DARK;Dark
|
||||||
!TP_COLORAPP_SURROUND_DIM;Dim
|
!TP_COLORAPP_SURROUND_DIM;Dim
|
||||||
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
||||||
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slighty dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slightly dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
||||||
!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
||||||
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
||||||
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
||||||
|
@ -96,8 +96,6 @@ FILEBROWSER_COPYPROFILE;复制配置
|
|||||||
FILEBROWSER_CURRENT_NAME;当前名称:
|
FILEBROWSER_CURRENT_NAME;当前名称:
|
||||||
FILEBROWSER_DARKFRAME;暗场
|
FILEBROWSER_DARKFRAME;暗场
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;确认删除
|
FILEBROWSER_DELETEDIALOG_HEADER;确认删除
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;确定删除所选的%1个文件?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;你确认要删除选择的 <b>%1</b> 文件 <b>包括</b> 一个处理队列中的版本?
|
|
||||||
FILEBROWSER_EMPTYTRASH;清空垃圾箱
|
FILEBROWSER_EMPTYTRASH;清空垃圾箱
|
||||||
FILEBROWSER_EXTPROGMENU;调用程序...
|
FILEBROWSER_EXTPROGMENU;调用程序...
|
||||||
FILEBROWSER_FLATFIELD;平场
|
FILEBROWSER_FLATFIELD;平场
|
||||||
@ -132,8 +130,6 @@ FILEBROWSER_POPUPRANK2;评 2 星
|
|||||||
FILEBROWSER_POPUPRANK3;评 3 星
|
FILEBROWSER_POPUPRANK3;评 3 星
|
||||||
FILEBROWSER_POPUPRANK4;评 4 星
|
FILEBROWSER_POPUPRANK4;评 4 星
|
||||||
FILEBROWSER_POPUPRANK5;评 5 星
|
FILEBROWSER_POPUPRANK5;评 5 星
|
||||||
FILEBROWSER_POPUPREMOVE;从文件系统中移除
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;删除序列输出
|
|
||||||
FILEBROWSER_POPUPRENAME;重命名
|
FILEBROWSER_POPUPRENAME;重命名
|
||||||
FILEBROWSER_POPUPSELECTALL;全部选中
|
FILEBROWSER_POPUPSELECTALL;全部选中
|
||||||
FILEBROWSER_POPUPTRASH;移动到垃圾箱
|
FILEBROWSER_POPUPTRASH;移动到垃圾箱
|
||||||
@ -957,8 +953,12 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
|
|||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\n<b>Shift-Ctrl-0</b> No Color\n<b>Shift-Ctrl-1</b> Red\n<b>Shift-Ctrl-2</b> Yellow\n<b>Shift-Ctrl-3</b> Green\n<b>Shift-Ctrl-4</b> Blue\n<b>Shift-Ctrl-5</b> Purple
|
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\n<b>Shift-Ctrl-0</b> No Color\n<b>Shift-Ctrl-1</b> Red\n<b>Shift-Ctrl-2</b> Yellow\n<b>Shift-Ctrl-3</b> Green\n<b>Shift-Ctrl-4</b> Blue\n<b>Shift-Ctrl-5</b> Purple
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_QUERYHINT;Type filenames to search for. Supports partial filenames. Separate the search terms using commas, e.g.\n<i>1001,1004,1199</i>\n\nExclude search terms by prefixing them with <i>!=</i>\ne.g.\n<i>!=1001,1004,1199</i>\n\nShortcuts:\n<b>Ctrl-f</b> - focus the Find box,\n<b>Enter</b> - search,\n<b>Esc</b> - clear the Find box,\n<b>Shift-Esc</b> - defocus the Find box.
|
!FILEBROWSER_QUERYHINT;Type filenames to search for. Supports partial filenames. Separate the search terms using commas, e.g.\n<i>1001,1004,1199</i>\n\nExclude search terms by prefixing them with <i>!=</i>\ne.g.\n<i>!=1001,1004,1199</i>\n\nShortcuts:\n<b>Ctrl-f</b> - focus the Find box,\n<b>Enter</b> - search,\n<b>Esc</b> - clear the Find box,\n<b>Shift-Esc</b> - defocus the Find box.
|
||||||
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: <b>Alt-1</b>
|
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: <b>Alt-1</b>
|
||||||
!FILEBROWSER_SHOWCOLORLABEL2HINT;Show images labeled Yellow.\nShortcut: <b>Alt-2</b>
|
!FILEBROWSER_SHOWCOLORLABEL2HINT;Show images labeled Yellow.\nShortcut: <b>Alt-2</b>
|
||||||
@ -967,7 +967,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
|
|||||||
!FILEBROWSER_SHOWCOLORLABEL5HINT;Show images labeled Purple.\nShortcut: <b>Alt-5</b>
|
!FILEBROWSER_SHOWCOLORLABEL5HINT;Show images labeled Purple.\nShortcut: <b>Alt-5</b>
|
||||||
!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
||||||
!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
||||||
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Show unsaved images.\nShortcut: <b>Alt-6</b>
|
!FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Show unsaved images.\nShortcut: <b>Alt-6</b>
|
||||||
!FILEBROWSER_SHOWUNCOLORHINT;Show images without a color label.\nShortcut: <b>Alt-0</b>
|
!FILEBROWSER_SHOWUNCOLORHINT;Show images without a color label.\nShortcut: <b>Alt-0</b>
|
||||||
@ -1654,7 +1654,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
|
|||||||
!TP_COLORAPP_RSTPRO_TOOLTIP;Red & skin-tones protection affects both sliders and curves.
|
!TP_COLORAPP_RSTPRO_TOOLTIP;Red & skin-tones protection affects both sliders and curves.
|
||||||
!TP_COLORAPP_SURROUND;Surround
|
!TP_COLORAPP_SURROUND;Surround
|
||||||
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
||||||
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slighty dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slightly dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
||||||
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
||||||
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
||||||
!TP_COLORAPP_TCMODE_LABEL1;Curve mode 1
|
!TP_COLORAPP_TCMODE_LABEL1;Curve mode 1
|
||||||
|
@ -164,8 +164,6 @@ FILEBROWSER_COPYPROFILE;Kopírovat
|
|||||||
FILEBROWSER_CURRENT_NAME;Současné jméno:
|
FILEBROWSER_CURRENT_NAME;Současné jméno:
|
||||||
FILEBROWSER_DARKFRAME;Tmavý snímek
|
FILEBROWSER_DARKFRAME;Tmavý snímek
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Potvrzení smazání souboru
|
FILEBROWSER_DELETEDIALOG_HEADER;Potvrzení smazání souboru
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Jste si jisti, že chcete vymazat <b>%1</b> vybraných souborů?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Jste si jisti, že chcete vymazat <b>%1</b> vybraných souborů <b>včetně</b> výstupů dávkového zpracování?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Vysypat koš
|
FILEBROWSER_EMPTYTRASH;Vysypat koš
|
||||||
FILEBROWSER_EXTPROGMENU;Otevřít pomocí
|
FILEBROWSER_EXTPROGMENU;Otevřít pomocí
|
||||||
FILEBROWSER_FLATFIELD;Flat Field
|
FILEBROWSER_FLATFIELD;Flat Field
|
||||||
@ -200,8 +198,6 @@ FILEBROWSER_POPUPRANK2;Hodnocení 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Hodnocení 3 ***
|
FILEBROWSER_POPUPRANK3;Hodnocení 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Hodnocení 4 ****
|
FILEBROWSER_POPUPRANK4;Hodnocení 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Hodnocení 5 *****
|
FILEBROWSER_POPUPRANK5;Hodnocení 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Smazat
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Smazat včetně výstupů z fronty
|
|
||||||
FILEBROWSER_POPUPRENAME;Přejmenovat
|
FILEBROWSER_POPUPRENAME;Přejmenovat
|
||||||
FILEBROWSER_POPUPSELECTALL;Vybrat vše
|
FILEBROWSER_POPUPSELECTALL;Vybrat vše
|
||||||
FILEBROWSER_POPUPTRASH;Přesunout do koše
|
FILEBROWSER_POPUPTRASH;Přesunout do koše
|
||||||
@ -228,7 +224,6 @@ FILEBROWSER_SHOWDIRHINT;Smazat všechny filtry.\nZkratka: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Ukázat upravené obrázky.\nZkratka: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Ukázat upravené obrázky.\nZkratka: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Ukázat neupravené obrázky.\nZkratka: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Ukázat neupravené obrázky.\nZkratka: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Zobrazit Exif informace.\n\nZkratky:\n<b>i</b> - režim více karet editoru,\n<b>Alt-i</b> - režim jedné karty editoru.
|
FILEBROWSER_SHOWEXIFINFO;Zobrazit Exif informace.\n\nZkratky:\n<b>i</b> - režim více karet editoru,\n<b>Alt-i</b> - režim jedné karty editoru.
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Zobrazit pouze nesmazané obrázky.
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Zobrazí pouze originální obrázky.\n\nPokud existuje několik obrázků se stejným názvem, ale rozdílnými příponami, bude jako originál vybrán ten, jehož přípona je nejvýše v seznamu přípon veVolby > Prohlížeč souborů > Analyzované přípony.
|
FILEBROWSER_SHOWORIGINALHINT;Zobrazí pouze originální obrázky.\n\nPokud existuje několik obrázků se stejným názvem, ale rozdílnými příponami, bude jako originál vybrán ten, jehož přípona je nejvýše v seznamu přípon veVolby > Prohlížeč souborů > Analyzované přípony.
|
||||||
FILEBROWSER_SHOWRANK1HINT;Ukázat obrázky hodnocené jednou hvězdičkou.\nZkratka: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Ukázat obrázky hodnocené jednou hvězdičkou.\nZkratka: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Ukázat obrázky hodnocené dvěma hvězdičkami.\nZkratka: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Ukázat obrázky hodnocené dvěma hvězdičkami.\nZkratka: <b>2</b>
|
||||||
@ -2321,6 +2316,11 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: <b>-</b>
|
|||||||
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode
|
!PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode
|
||||||
|
@ -81,6 +81,7 @@
|
|||||||
#80 25.03.2019 Erweiterung (TooWaBoo) RT 5.6
|
#80 25.03.2019 Erweiterung (TooWaBoo) RT 5.6
|
||||||
#81 15.04.2019 Erweiterung (TooWaBoo) RT 5.6
|
#81 15.04.2019 Erweiterung (TooWaBoo) RT 5.6
|
||||||
#82 25.05.2019 Erweiterung (TooWaBoo) RT 5.6
|
#82 25.05.2019 Erweiterung (TooWaBoo) RT 5.6
|
||||||
|
#83 06.07.2019 Erweiterung (TooWaBoo) RT 5.6
|
||||||
|
|
||||||
ABOUT_TAB_BUILD;Version
|
ABOUT_TAB_BUILD;Version
|
||||||
ABOUT_TAB_CREDITS;Danksagungen
|
ABOUT_TAB_CREDITS;Danksagungen
|
||||||
@ -201,10 +202,12 @@ FILEBROWSER_COLORLABEL_TOOLTIP;<b>Farbmarkierung</b>\n\nTaste: <b>Strg</b> + <b>
|
|||||||
FILEBROWSER_COPYPROFILE;Profil kopieren
|
FILEBROWSER_COPYPROFILE;Profil kopieren
|
||||||
FILEBROWSER_CURRENT_NAME;Aktueller Name:
|
FILEBROWSER_CURRENT_NAME;Aktueller Name:
|
||||||
FILEBROWSER_DARKFRAME;Dunkelbild
|
FILEBROWSER_DARKFRAME;Dunkelbild
|
||||||
|
FILEBROWSER_DELETEDIALOG_ALL;Möchten Sie wirklich <b>%1</b> Dateien unwiderruflich löschen?
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Dateien löschen
|
FILEBROWSER_DELETEDIALOG_HEADER;Dateien löschen
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Möchten Sie wirklich %1 Datei(en) unwiderruflich löschen?
|
FILEBROWSER_DELETEDIALOG_SELECTED;Möchten Sie wirklich %1 Datei(en) unwiderruflich löschen?
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Möchten Sie wirklich %1 Datei(en) unwiderruflich löschen, mit allen aus der Stapelverarbeitung resultierenden zugehörigen Ausgabedateien?
|
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Möchten Sie wirklich %1 Datei(en) unwiderruflich löschen, mit allen aus der Stapelverarbeitung resultierenden zugehörigen Ausgabedateien?
|
||||||
FILEBROWSER_EMPTYTRASH;Papierkorb leeren
|
FILEBROWSER_EMPTYTRASH;Papierkorb leeren
|
||||||
|
FILEBROWSER_EMPTYTRASHHINT;Alle Dateien im Papierkorb\nunwiderruflich löschen.
|
||||||
FILEBROWSER_EXTPROGMENU;Öffnen mit
|
FILEBROWSER_EXTPROGMENU;Öffnen mit
|
||||||
FILEBROWSER_FLATFIELD;Weißbild
|
FILEBROWSER_FLATFIELD;Weißbild
|
||||||
FILEBROWSER_MOVETODARKFDIR;In Dunkelbild-Verzeichnis verschieben
|
FILEBROWSER_MOVETODARKFDIR;In Dunkelbild-Verzeichnis verschieben
|
||||||
@ -229,7 +232,7 @@ FILEBROWSER_POPUPMOVETO;Verschieben nach...
|
|||||||
FILEBROWSER_POPUPOPEN;Öffnen
|
FILEBROWSER_POPUPOPEN;Öffnen
|
||||||
FILEBROWSER_POPUPOPENINEDITOR;Im Editor öffnen
|
FILEBROWSER_POPUPOPENINEDITOR;Im Editor öffnen
|
||||||
FILEBROWSER_POPUPPROCESS;Zur Warteschlange hinzufügen
|
FILEBROWSER_POPUPPROCESS;Zur Warteschlange hinzufügen
|
||||||
FILEBROWSER_POPUPPROCESSFAST;Zur Warteschlange hinzufügen (Schnelles Exportieren)
|
FILEBROWSER_POPUPPROCESSFAST;Zur Warteschlange hinzufügen\n(Schnell-Export)
|
||||||
FILEBROWSER_POPUPPROFILEOPERATIONS;Profiloperationen
|
FILEBROWSER_POPUPPROFILEOPERATIONS;Profiloperationen
|
||||||
FILEBROWSER_POPUPRANK;Bewertung
|
FILEBROWSER_POPUPRANK;Bewertung
|
||||||
FILEBROWSER_POPUPRANK0;Nicht bewertet
|
FILEBROWSER_POPUPRANK0;Nicht bewertet
|
||||||
@ -238,8 +241,6 @@ FILEBROWSER_POPUPRANK2;Bewertung 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Bewertung 3 ***
|
FILEBROWSER_POPUPRANK3;Bewertung 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Bewertung 4 ****
|
FILEBROWSER_POPUPRANK4;Bewertung 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Bewertung 5 *****
|
FILEBROWSER_POPUPRANK5;Bewertung 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Löschen
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Löschen (auch Resultate der Stapelverarbeitung)
|
|
||||||
FILEBROWSER_POPUPRENAME;Umbenennen
|
FILEBROWSER_POPUPRENAME;Umbenennen
|
||||||
FILEBROWSER_POPUPSELECTALL;Alle auswählen
|
FILEBROWSER_POPUPSELECTALL;Alle auswählen
|
||||||
FILEBROWSER_POPUPTRASH;In den Papierkorb verschieben
|
FILEBROWSER_POPUPTRASH;In den Papierkorb verschieben
|
||||||
@ -266,7 +267,6 @@ FILEBROWSER_SHOWDIRHINT;Alle Filter zurücksetzen.\nTaste: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Nur bearbeitete Bilder anzeigen.\nTaste: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Nur bearbeitete Bilder anzeigen.\nTaste: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Nur unbearbeitete Bilder anzeigen.\nTaste: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Nur unbearbeitete Bilder anzeigen.\nTaste: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Bildinformationen ein-/ausblenden.\n\nIm Multi-Reitermodus:\nTaste: <b>i</b>\nIm Ein-Reitermodus:\nTaste: <b>Alt</b> + <b>i</b>
|
FILEBROWSER_SHOWEXIFINFO;Bildinformationen ein-/ausblenden.\n\nIm Multi-Reitermodus:\nTaste: <b>i</b>\nIm Ein-Reitermodus:\nTaste: <b>Alt</b> + <b>i</b>
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Nur nicht gelöschte Bilder anzeigen.
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Zeige nur das Originalbild.\n\nWenn mehrere Bilder mit dem gleichen Dateinamen und unterschiedlichen Dateitypen existieren, ist das Originalbild das Bild, welches in der Liste "Dateitypen anzeigen" unter Einstellungen > Dateiverwaltung als erstes gefunden wird.
|
FILEBROWSER_SHOWORIGINALHINT;Zeige nur das Originalbild.\n\nWenn mehrere Bilder mit dem gleichen Dateinamen und unterschiedlichen Dateitypen existieren, ist das Originalbild das Bild, welches in der Liste "Dateitypen anzeigen" unter Einstellungen > Dateiverwaltung als erstes gefunden wird.
|
||||||
FILEBROWSER_SHOWRANK1HINT;Nur mit 1 Stern bewertete Bilder anzeigen.\nTaste: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Nur mit 1 Stern bewertete Bilder anzeigen.\nTaste: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Nur mit 2 Sternen bewertete Bilder anzeigen.\nTaste: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Nur mit 2 Sternen bewertete Bilder anzeigen.\nTaste: <b>2</b>
|
||||||
@ -985,7 +985,7 @@ MAIN_TAB_DETAIL;Details
|
|||||||
MAIN_TAB_DETAIL_TOOLTIP;Taste: <b>Alt</b> + <b>d</b>
|
MAIN_TAB_DETAIL_TOOLTIP;Taste: <b>Alt</b> + <b>d</b>
|
||||||
MAIN_TAB_DEVELOP; Batchbearbeitung
|
MAIN_TAB_DEVELOP; Batchbearbeitung
|
||||||
MAIN_TAB_EXIF;Exif
|
MAIN_TAB_EXIF;Exif
|
||||||
MAIN_TAB_EXPORT; Exportieren
|
MAIN_TAB_EXPORT; Schnell-Export
|
||||||
MAIN_TAB_EXPOSURE;Belichtung
|
MAIN_TAB_EXPOSURE;Belichtung
|
||||||
MAIN_TAB_EXPOSURE_TOOLTIP;Taste: <b>Alt</b> + <b>e</b>
|
MAIN_TAB_EXPOSURE_TOOLTIP;Taste: <b>Alt</b> + <b>e</b>
|
||||||
MAIN_TAB_FAVORITES;Favoriten
|
MAIN_TAB_FAVORITES;Favoriten
|
||||||
@ -2362,5 +2362,6 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: <b>-</b>
|
|||||||
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
FILEBROWSER_DELETEDIALOG_ALL;Möchten Sie wirklich <b>%1</b> Dateien unwiderruflich löschen?
|
FILEBROWSER_POPUPREMOVE;Unwiderruflich löschen
|
||||||
FILEBROWSER_EMPTYTRASHHINT;Alle Dateien im Papierkorb\nunwiderruflich löschen.
|
FILEBROWSER_POPUPREMOVEINCLPROC;Unwiderruflich löschen\n(einschl. aller Dateien der Stabelverarbeitung)
|
||||||
|
FILEBROWSER_SHOWNOTTRASHHINT;Nur Bilder außerhalb des Papierkorbs anzeigen.
|
||||||
|
@ -68,7 +68,7 @@ TP_COLORAPP_CHROMA_M_TOOLTIP;Colourfulness in CIECAM02 differs from L*a*b* and R
|
|||||||
TP_COLORAPP_CURVEEDITOR3;Colour curve
|
TP_COLORAPP_CURVEEDITOR3;Colour curve
|
||||||
TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Adjust either chroma, saturation or colourfulness.\n\nShows the histogram of chromaticity (L*a*b*) before CIECAM02.\nIf the "Show CIECAM02 output histograms in curves" checkbox is enabled, shows the histogram of C, s or M after CIECAM02.\n\nC, s and M are not shown in the main histogram panel.\nFor final output refer to the main histogram panel.
|
TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Adjust either chroma, saturation or colourfulness.\n\nShows the histogram of chromaticity (L*a*b*) before CIECAM02.\nIf the "Show CIECAM02 output histograms in curves" checkbox is enabled, shows the histogram of C, s or M after CIECAM02.\n\nC, s and M are not shown in the main histogram panel.\nFor final output refer to the main histogram panel.
|
||||||
TP_COLORAPP_LABEL;CIE Colour Appearance Model 2002
|
TP_COLORAPP_LABEL;CIE Colour Appearance Model 2002
|
||||||
TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colours to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slighty dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colours to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slightly dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
||||||
TP_COLORAPP_TCMODE_COLORF;Colourfulness
|
TP_COLORAPP_TCMODE_COLORF;Colourfulness
|
||||||
TP_COLORTONING_COLOR;Colour
|
TP_COLORTONING_COLOR;Colour
|
||||||
TP_COLORTONING_LABEL;Colour Toning
|
TP_COLORTONING_LABEL;Colour Toning
|
||||||
@ -239,12 +239,12 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
|
|||||||
!FILEBROWSER_COPYPROFILE;Copy
|
!FILEBROWSER_COPYPROFILE;Copy
|
||||||
!FILEBROWSER_CURRENT_NAME;Current name:
|
!FILEBROWSER_CURRENT_NAME;Current name:
|
||||||
!FILEBROWSER_DARKFRAME;Dark-frame
|
!FILEBROWSER_DARKFRAME;Dark-frame
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_DELETEDIALOG_HEADER;File delete confirmation:
|
!FILEBROWSER_DELETEDIALOG_HEADER;File delete confirmation:
|
||||||
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to delete the selected <b>%1</b> files?
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to delete the selected <b>%1</b> files <b>including</b> a queue-processed version?
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
!FILEBROWSER_EMPTYTRASH;Empty trash
|
!FILEBROWSER_EMPTYTRASH;Empty trash
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
!FILEBROWSER_EXTPROGMENU;Open with
|
!FILEBROWSER_EXTPROGMENU;Open with
|
||||||
!FILEBROWSER_FLATFIELD;Flat-Field
|
!FILEBROWSER_FLATFIELD;Flat-Field
|
||||||
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
|
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
|
||||||
@ -277,8 +277,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
|
|||||||
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
||||||
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
||||||
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
||||||
!FILEBROWSER_POPUPREMOVE;Delete
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete with output from queue
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_POPUPRENAME;Rename
|
!FILEBROWSER_POPUPRENAME;Rename
|
||||||
!FILEBROWSER_POPUPSELECTALL;Select all
|
!FILEBROWSER_POPUPSELECTALL;Select all
|
||||||
!FILEBROWSER_POPUPTRASH;Move to trash
|
!FILEBROWSER_POPUPTRASH;Move to trash
|
||||||
@ -305,7 +305,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
|
|||||||
!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
||||||
!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
||||||
!FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\n<b>i</b> - Multiple Editor Tabs Mode,\n<b>Alt-i</b> - Single Editor Tab Mode.
|
!FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\n<b>i</b> - Multiple Editor Tabs Mode,\n<b>Alt-i</b> - Single Editor Tab Mode.
|
||||||
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: <b>1</b>
|
!FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: <b>1</b>
|
||||||
!FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: <b>2</b>
|
!FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: <b>2</b>
|
||||||
|
@ -122,12 +122,12 @@
|
|||||||
!FILEBROWSER_COPYPROFILE;Copy
|
!FILEBROWSER_COPYPROFILE;Copy
|
||||||
!FILEBROWSER_CURRENT_NAME;Current name:
|
!FILEBROWSER_CURRENT_NAME;Current name:
|
||||||
!FILEBROWSER_DARKFRAME;Dark-frame
|
!FILEBROWSER_DARKFRAME;Dark-frame
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_DELETEDIALOG_HEADER;File delete confirmation:
|
!FILEBROWSER_DELETEDIALOG_HEADER;File delete confirmation:
|
||||||
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to delete the selected <b>%1</b> files?
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to delete the selected <b>%1</b> files <b>including</b> a queue-processed version?
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
!FILEBROWSER_EMPTYTRASH;Empty trash
|
!FILEBROWSER_EMPTYTRASH;Empty trash
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
!FILEBROWSER_EXTPROGMENU;Open with
|
!FILEBROWSER_EXTPROGMENU;Open with
|
||||||
!FILEBROWSER_FLATFIELD;Flat-Field
|
!FILEBROWSER_FLATFIELD;Flat-Field
|
||||||
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
|
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
|
||||||
@ -161,8 +161,8 @@
|
|||||||
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
||||||
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
||||||
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
||||||
!FILEBROWSER_POPUPREMOVE;Delete
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete with output from queue
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_POPUPRENAME;Rename
|
!FILEBROWSER_POPUPRENAME;Rename
|
||||||
!FILEBROWSER_POPUPSELECTALL;Select all
|
!FILEBROWSER_POPUPSELECTALL;Select all
|
||||||
!FILEBROWSER_POPUPTRASH;Move to trash
|
!FILEBROWSER_POPUPTRASH;Move to trash
|
||||||
@ -189,7 +189,7 @@
|
|||||||
!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
||||||
!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
||||||
!FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\n<b>i</b> - Multiple Editor Tabs Mode,\n<b>Alt-i</b> - Single Editor Tab Mode.
|
!FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\n<b>i</b> - Multiple Editor Tabs Mode,\n<b>Alt-i</b> - Single Editor Tab Mode.
|
||||||
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: <b>1</b>
|
!FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: <b>1</b>
|
||||||
!FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: <b>2</b>
|
!FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: <b>2</b>
|
||||||
@ -1430,7 +1430,7 @@
|
|||||||
!TP_COLORAPP_SURROUND_DARK;Dark
|
!TP_COLORAPP_SURROUND_DARK;Dark
|
||||||
!TP_COLORAPP_SURROUND_DIM;Dim
|
!TP_COLORAPP_SURROUND_DIM;Dim
|
||||||
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
||||||
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slighty dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slightly dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
||||||
!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
||||||
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
||||||
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
||||||
|
@ -180,8 +180,6 @@ FILEBROWSER_COPYPROFILE;Copiar perfil
|
|||||||
FILEBROWSER_CURRENT_NAME;Nombre actual:
|
FILEBROWSER_CURRENT_NAME;Nombre actual:
|
||||||
FILEBROWSER_DARKFRAME;Toma Negra
|
FILEBROWSER_DARKFRAME;Toma Negra
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Confirmación de borrar archivos
|
FILEBROWSER_DELETEDIALOG_HEADER;Confirmación de borrar archivos
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;¿Seguro que quiere borrar los <b>%1</b> archivos seleccionados?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;¿Seguro que quiere borrar los <b>%1</b> archivos seleccionados <b>incluyendo</b> la versión procesada en la cola?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Vaciar papelera
|
FILEBROWSER_EMPTYTRASH;Vaciar papelera
|
||||||
FILEBROWSER_EXTPROGMENU;Abrir con
|
FILEBROWSER_EXTPROGMENU;Abrir con
|
||||||
FILEBROWSER_FLATFIELD;Campo plano
|
FILEBROWSER_FLATFIELD;Campo plano
|
||||||
@ -216,8 +214,6 @@ FILEBROWSER_POPUPRANK2;Rango 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Rango 3 ***
|
FILEBROWSER_POPUPRANK3;Rango 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Rango 4 ****
|
FILEBROWSER_POPUPRANK4;Rango 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Rango 5 *****
|
FILEBROWSER_POPUPRANK5;Rango 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Borrar
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Borrar con salida de la cola
|
|
||||||
FILEBROWSER_POPUPRENAME;Renombrar
|
FILEBROWSER_POPUPRENAME;Renombrar
|
||||||
FILEBROWSER_POPUPSELECTALL;Seleccionar todo
|
FILEBROWSER_POPUPSELECTALL;Seleccionar todo
|
||||||
FILEBROWSER_POPUPTRASH;Mover a la papelera
|
FILEBROWSER_POPUPTRASH;Mover a la papelera
|
||||||
@ -244,7 +240,6 @@ FILEBROWSER_SHOWDIRHINT;Quitar todos los filtros.\nTecla de Atajo: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Mostrar imágenes editadas.\nTecla de Atajo: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Mostrar imágenes editadas.\nTecla de Atajo: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imágenes no editadas.\nTecla de Atajo: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imágenes no editadas.\nTecla de Atajo: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Mostrar datos Exif.\nTecla de Atajo: <b>i</b>\n\nTecla de Atajo en modo editor simple: <b>Alt-I</b>
|
FILEBROWSER_SHOWEXIFINFO;Mostrar datos Exif.\nTecla de Atajo: <b>i</b>\n\nTecla de Atajo en modo editor simple: <b>Alt-I</b>
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Mostrar solo las imágenes no borradas.
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Muestre solo imágenes originales. \nCuando existen varias imágenes con el mismo nombre de archivo pero con diferentes extensiones, la que se considera original es aquella cuya extensión está más cerca de la parte superior de la lista de extensiones analizadas en Preferencias> Explorador de archivos> Extensiones analizadas.
|
FILEBROWSER_SHOWORIGINALHINT;Muestre solo imágenes originales. \nCuando existen varias imágenes con el mismo nombre de archivo pero con diferentes extensiones, la que se considera original es aquella cuya extensión está más cerca de la parte superior de la lista de extensiones analizadas en Preferencias> Explorador de archivos> Extensiones analizadas.
|
||||||
FILEBROWSER_SHOWRANK1HINT;Mostrar imágenes con 1 estrella.\nTecla de Atajo: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Mostrar imágenes con 1 estrella.\nTecla de Atajo: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Mostrar imágenes con 2 estrellas.\nTecla de Atajo: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Mostrar imágenes con 2 estrellas.\nTecla de Atajo: <b>2</b>
|
||||||
@ -2319,8 +2314,13 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: <b>-</b>
|
|||||||
|
|
||||||
!CURVEEDITOR_CATMULLROM;Flexible
|
!CURVEEDITOR_CATMULLROM;Flexible
|
||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
|
!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
|
||||||
!MAIN_FRAME_PLACES_DEL;Remove
|
!MAIN_FRAME_PLACES_DEL;Remove
|
||||||
!MAIN_TAB_FAVORITES;Favorites
|
!MAIN_TAB_FAVORITES;Favorites
|
||||||
|
@ -119,8 +119,6 @@ FILEBROWSER_COPYPROFILE;Copier le profil
|
|||||||
FILEBROWSER_CURRENT_NAME;Nom courant:
|
FILEBROWSER_CURRENT_NAME;Nom courant:
|
||||||
FILEBROWSER_DARKFRAME;Trame Noire
|
FILEBROWSER_DARKFRAME;Trame Noire
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Confirmation de la suppression de fichier
|
FILEBROWSER_DELETEDIALOG_HEADER;Confirmation de la suppression de fichier
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Êtes-vous sûr de vouloir supprimer les %1 fichiers selectionnés?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Êtes-vous sûr de vouloir supprimer les %1 fichiers sélectionnés, INCLUANT une version déjà traitée?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Vider la corbeille
|
FILEBROWSER_EMPTYTRASH;Vider la corbeille
|
||||||
FILEBROWSER_EXTPROGMENU;Ouvrir avec
|
FILEBROWSER_EXTPROGMENU;Ouvrir avec
|
||||||
FILEBROWSER_FLATFIELD;Champ Uniforme
|
FILEBROWSER_FLATFIELD;Champ Uniforme
|
||||||
@ -155,8 +153,6 @@ FILEBROWSER_POPUPRANK2;Rang 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Rang 3 ***
|
FILEBROWSER_POPUPRANK3;Rang 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Rang 4 ****
|
FILEBROWSER_POPUPRANK4;Rang 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Rang 5 *****
|
FILEBROWSER_POPUPRANK5;Rang 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Retirer du système de fichier
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Supprimer (y compris les sorties de la file de traitement)
|
|
||||||
FILEBROWSER_POPUPRENAME;Renommer
|
FILEBROWSER_POPUPRENAME;Renommer
|
||||||
FILEBROWSER_POPUPSELECTALL;Sélectionner tout
|
FILEBROWSER_POPUPSELECTALL;Sélectionner tout
|
||||||
FILEBROWSER_POPUPTRASH;Déplacer dans la corbeille
|
FILEBROWSER_POPUPTRASH;Déplacer dans la corbeille
|
||||||
@ -183,7 +179,6 @@ FILEBROWSER_SHOWDIRHINT;Voir toutes les images du dossier\nRaccourci: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Afficher les images éditées\nRaccourci: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Afficher les images éditées\nRaccourci: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Afficher les images non éditées\nRaccourci: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Afficher les images non éditées\nRaccourci: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Montrer les infos EXIF.\nRaccourci: <b>i</b>\n\nRaccourcis dans le mode Éditeur Unique: <b>Alt-i</b>
|
FILEBROWSER_SHOWEXIFINFO;Montrer les infos EXIF.\nRaccourci: <b>i</b>\n\nRaccourcis dans le mode Éditeur Unique: <b>Alt-i</b>
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Voir uniquement les images non supprimées
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Voir seulement les images originales.\n\nQuand plusieurs images éxistent avec le même nom de fichier mais des extensions différentes, celle considéré originale est celle dont l'extention est au plus dans la liste des extensions dans Préférences > Navigateur de fichiers > Extensions considérées.
|
FILEBROWSER_SHOWORIGINALHINT;Voir seulement les images originales.\n\nQuand plusieurs images éxistent avec le même nom de fichier mais des extensions différentes, celle considéré originale est celle dont l'extention est au plus dans la liste des extensions dans Préférences > Navigateur de fichiers > Extensions considérées.
|
||||||
FILEBROWSER_SHOWRANK1HINT;Voir les images 1 étoile\nRaccourci: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Voir les images 1 étoile\nRaccourci: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Voir les images 2 étoiles\nRaccourci: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Voir les images 2 étoiles\nRaccourci: <b>2</b>
|
||||||
@ -2264,8 +2259,13 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
|
|||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!MAIN_FRAME_PLACES_DEL;Remove
|
!MAIN_FRAME_PLACES_DEL;Remove
|
||||||
!PROGRESSBAR_DECODING;Decoding...
|
!PROGRESSBAR_DECODING;Decoding...
|
||||||
!PROGRESSBAR_GREENEQUIL;Green equilibration...
|
!PROGRESSBAR_GREENEQUIL;Green equilibration...
|
||||||
|
@ -92,8 +92,6 @@ FILEBROWSER_COPYPROFILE;Copia
|
|||||||
FILEBROWSER_CURRENT_NAME;Nome corrente:
|
FILEBROWSER_CURRENT_NAME;Nome corrente:
|
||||||
FILEBROWSER_DARKFRAME;Dark Frame
|
FILEBROWSER_DARKFRAME;Dark Frame
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Conferma eliminazione del file
|
FILEBROWSER_DELETEDIALOG_HEADER;Conferma eliminazione del file
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Vuoi eliminare i <b>%1</b> file selezionati?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Vuoi eliminare i <b>%1</b> file <b>inclusa</b> la versione sviluppata nella coda?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Svuota cestino
|
FILEBROWSER_EMPTYTRASH;Svuota cestino
|
||||||
FILEBROWSER_EXTPROGMENU;Apri con
|
FILEBROWSER_EXTPROGMENU;Apri con
|
||||||
FILEBROWSER_FLATFIELD;Flat Field
|
FILEBROWSER_FLATFIELD;Flat Field
|
||||||
@ -128,8 +126,6 @@ FILEBROWSER_POPUPRANK2;Punteggio 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Punteggio 3 ***
|
FILEBROWSER_POPUPRANK3;Punteggio 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Punteggio 4 ****
|
FILEBROWSER_POPUPRANK4;Punteggio 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Punteggio 5 *****
|
FILEBROWSER_POPUPRANK5;Punteggio 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Elimina
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Elimina insieme a quanto sviluppato nella coda
|
|
||||||
FILEBROWSER_POPUPRENAME;Rinomina
|
FILEBROWSER_POPUPRENAME;Rinomina
|
||||||
FILEBROWSER_POPUPSELECTALL;Seleziona tutto
|
FILEBROWSER_POPUPSELECTALL;Seleziona tutto
|
||||||
FILEBROWSER_POPUPTRASH;Sposta nel cestino
|
FILEBROWSER_POPUPTRASH;Sposta nel cestino
|
||||||
@ -1270,10 +1266,14 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: <b>-</b>
|
|||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
||||||
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILECHOOSER_FILTER_ANY;All files
|
!FILECHOOSER_FILTER_ANY;All files
|
||||||
!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc)
|
!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc)
|
||||||
|
@ -153,8 +153,6 @@ FILEBROWSER_COPYPROFILE;プロファイルをコピー
|
|||||||
FILEBROWSER_CURRENT_NAME;現在の名前:
|
FILEBROWSER_CURRENT_NAME;現在の名前:
|
||||||
FILEBROWSER_DARKFRAME;ダークフレーム
|
FILEBROWSER_DARKFRAME;ダークフレーム
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;ファイル削除確認
|
FILEBROWSER_DELETEDIALOG_HEADER;ファイル削除確認
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;選択済みのファイル <b>%1</b> を削除してもいいですか?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;バッチ処理に<b>組み込まれている</b>選択済みのファイル <b>%1</b> を削除してもいいですか?
|
|
||||||
FILEBROWSER_EMPTYTRASH;ゴミ箱を空にする
|
FILEBROWSER_EMPTYTRASH;ゴミ箱を空にする
|
||||||
FILEBROWSER_EXTPROGMENU;..で開く
|
FILEBROWSER_EXTPROGMENU;..で開く
|
||||||
FILEBROWSER_FLATFIELD;フラットフィールド
|
FILEBROWSER_FLATFIELD;フラットフィールド
|
||||||
@ -189,8 +187,6 @@ FILEBROWSER_POPUPRANK2;ランク 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;ランク 3 ***
|
FILEBROWSER_POPUPRANK3;ランク 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;ランク 4 ****
|
FILEBROWSER_POPUPRANK4;ランク 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;ランク 5 *****
|
FILEBROWSER_POPUPRANK5;ランク 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;ファイルシステムから削除
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;ファイルシステムとバッチの結果から削除
|
|
||||||
FILEBROWSER_POPUPRENAME;名前変更
|
FILEBROWSER_POPUPRENAME;名前変更
|
||||||
FILEBROWSER_POPUPSELECTALL;全選択
|
FILEBROWSER_POPUPSELECTALL;全選択
|
||||||
FILEBROWSER_POPUPTRASH;ゴミ箱へ移動
|
FILEBROWSER_POPUPTRASH;ゴミ箱へ移動
|
||||||
@ -217,7 +213,6 @@ FILEBROWSER_SHOWDIRHINT;全ての絞り込みをクリア\nショートカット
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;編集済み画像を表示\nショートカット: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;編集済み画像を表示\nショートカット: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;未編集画像を表示\nショートカット: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;未編集画像を表示\nショートカット: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;EXIF情報を表示\nショートカット: <b>i</b>\n\nシングル・エディタ・タブのショートカット: <b>Alt-i</b>
|
FILEBROWSER_SHOWEXIFINFO;EXIF情報を表示\nショートカット: <b>i</b>\n\nシングル・エディタ・タブのショートカット: <b>Alt-i</b>
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;削除されていない画像だけ表示
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;元画像だけを表示\n\nファイル名は同じだが拡張子が異なる画像がある場合は、環境設定の中のファイルブラウザタブにある拡張子リストの上位に位置する拡張子を持った画像を元画像とする。
|
FILEBROWSER_SHOWORIGINALHINT;元画像だけを表示\n\nファイル名は同じだが拡張子が異なる画像がある場合は、環境設定の中のファイルブラウザタブにある拡張子リストの上位に位置する拡張子を持った画像を元画像とする。
|
||||||
FILEBROWSER_SHOWRANK1HINT;1つ星ランクを表示\nショートカット: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;1つ星ランクを表示\nショートカット: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;2つ星ランクを表示\nショートカット: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;2つ星ランクを表示\nショートカット: <b>2</b>
|
||||||
@ -2310,7 +2305,12 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: <b>-</b>
|
|||||||
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode
|
!PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode
|
||||||
!QUEUE_LOCATION_TITLE;Output Location
|
!QUEUE_LOCATION_TITLE;Output Location
|
||||||
|
@ -82,8 +82,6 @@ FILEBROWSER_COPYPROFILE;Feldolgozási paraméterek másolása
|
|||||||
FILEBROWSER_CURRENT_NAME;Aktuális név:
|
FILEBROWSER_CURRENT_NAME;Aktuális név:
|
||||||
FILEBROWSER_DARKFRAME;Referencia feketekép (dark frame)
|
FILEBROWSER_DARKFRAME;Referencia feketekép (dark frame)
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Állománytörlés megerősítése
|
FILEBROWSER_DELETEDIALOG_HEADER;Állománytörlés megerősítése
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Biztosan törölni kívánja a kijelölt %1 képet?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Biztos vagy benne, hogy törölni szeredné a kiválasztott %1 állományt, beleértve a feldolgozási sorba helyezett változatát IS?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Kuka ürítése
|
FILEBROWSER_EMPTYTRASH;Kuka ürítése
|
||||||
FILEBROWSER_FLATFIELD;Flat Field
|
FILEBROWSER_FLATFIELD;Flat Field
|
||||||
FILEBROWSER_MOVETODARKFDIR;Mozgatás a 'dark frame' könyvtárba
|
FILEBROWSER_MOVETODARKFDIR;Mozgatás a 'dark frame' könyvtárba
|
||||||
@ -103,8 +101,6 @@ FILEBROWSER_POPUPOPENINEDITOR;Open in Szerkesztő
|
|||||||
FILEBROWSER_POPUPPROCESS;Feldolgozási sorba helyezés
|
FILEBROWSER_POPUPPROCESS;Feldolgozási sorba helyezés
|
||||||
FILEBROWSER_POPUPPROCESSFAST;Feldolgozási sorba helyez (expressz export)
|
FILEBROWSER_POPUPPROCESSFAST;Feldolgozási sorba helyez (expressz export)
|
||||||
FILEBROWSER_POPUPPROFILEOPERATIONS;Profilműveletek
|
FILEBROWSER_POPUPPROFILEOPERATIONS;Profilműveletek
|
||||||
FILEBROWSER_POPUPREMOVE;Törlés (végleges)
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Törlés (feldolgozási sorból is)
|
|
||||||
FILEBROWSER_POPUPRENAME;Átnevezés
|
FILEBROWSER_POPUPRENAME;Átnevezés
|
||||||
FILEBROWSER_POPUPSELECTALL;Mindent kijelöl
|
FILEBROWSER_POPUPSELECTALL;Mindent kijelöl
|
||||||
FILEBROWSER_POPUPTRASH;Kukába dobás
|
FILEBROWSER_POPUPTRASH;Kukába dobás
|
||||||
@ -870,8 +866,10 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés <b>-</b>
|
|||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\n<b>Shift-Ctrl-0</b> No Color\n<b>Shift-Ctrl-1</b> Red\n<b>Shift-Ctrl-2</b> Yellow\n<b>Shift-Ctrl-3</b> Green\n<b>Shift-Ctrl-4</b> Blue\n<b>Shift-Ctrl-5</b> Purple
|
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\n<b>Shift-Ctrl-0</b> No Color\n<b>Shift-Ctrl-1</b> Red\n<b>Shift-Ctrl-2</b> Yellow\n<b>Shift-Ctrl-3</b> Green\n<b>Shift-Ctrl-4</b> Blue\n<b>Shift-Ctrl-5</b> Purple
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
!FILEBROWSER_EXTPROGMENU;Open with
|
!FILEBROWSER_EXTPROGMENU;Open with
|
||||||
!FILEBROWSER_OPENDEFAULTVIEWER;Windows default viewer (queue-processed)
|
!FILEBROWSER_OPENDEFAULTVIEWER;Windows default viewer (queue-processed)
|
||||||
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
|
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
|
||||||
@ -887,13 +885,15 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés <b>-</b>
|
|||||||
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
||||||
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
||||||
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: <b>Shift-1</b>
|
!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: <b>Shift-1</b>
|
||||||
!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: <b>Shift-2</b>
|
!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: <b>Shift-2</b>
|
||||||
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: <b>Shift-3</b>
|
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: <b>Shift-3</b>
|
||||||
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: <b>Shift-4</b>
|
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: <b>Shift-4</b>
|
||||||
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: <b>Shift-5</b>
|
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: <b>Shift-5</b>
|
||||||
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
||||||
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: <b>Shift-0</b>
|
!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: <b>Shift-0</b>
|
||||||
!FILECHOOSER_FILTER_ANY;All files
|
!FILECHOOSER_FILTER_ANY;All files
|
||||||
@ -1657,7 +1657,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés <b>-</b>
|
|||||||
!TP_COLORAPP_SURROUND_DARK;Dark
|
!TP_COLORAPP_SURROUND_DARK;Dark
|
||||||
!TP_COLORAPP_SURROUND_DIM;Dim
|
!TP_COLORAPP_SURROUND_DIM;Dim
|
||||||
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
||||||
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slighty dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slightly dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
||||||
!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
||||||
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
||||||
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
||||||
|
@ -123,8 +123,6 @@ FILEBROWSER_COPYPROFILE;Kopieer profiel
|
|||||||
FILEBROWSER_CURRENT_NAME;Huidige naam:
|
FILEBROWSER_CURRENT_NAME;Huidige naam:
|
||||||
FILEBROWSER_DARKFRAME;Donkerframe
|
FILEBROWSER_DARKFRAME;Donkerframe
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Bevestiging bestand verwijderen
|
FILEBROWSER_DELETEDIALOG_HEADER;Bevestiging bestand verwijderen
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Weet u zeker dat u de geselecteerde %1 bestanden wilt verwijderen?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Weet u zeker dat u de %1 geselecteerde bestanden wilt verwijderen *inclusief* de versies van de verwerkingsrij?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Leeg prullenbak
|
FILEBROWSER_EMPTYTRASH;Leeg prullenbak
|
||||||
FILEBROWSER_EXTPROGMENU;Open met
|
FILEBROWSER_EXTPROGMENU;Open met
|
||||||
FILEBROWSER_FLATFIELD;Vlakveld
|
FILEBROWSER_FLATFIELD;Vlakveld
|
||||||
@ -159,8 +157,6 @@ FILEBROWSER_POPUPRANK2;Waardering 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Waardering 3 ***
|
FILEBROWSER_POPUPRANK3;Waardering 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Waardering 4 ****
|
FILEBROWSER_POPUPRANK4;Waardering 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Waardering 5 *****
|
FILEBROWSER_POPUPRANK5;Waardering 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Verwijder van bestandssysteem
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Verwijder (met bestand in verwerkingsrij)
|
|
||||||
FILEBROWSER_POPUPRENAME;Hernoem
|
FILEBROWSER_POPUPRENAME;Hernoem
|
||||||
FILEBROWSER_POPUPSELECTALL;Alles selecteren
|
FILEBROWSER_POPUPSELECTALL;Alles selecteren
|
||||||
FILEBROWSER_POPUPTRASH;Verplaats naar prullenbak
|
FILEBROWSER_POPUPTRASH;Verplaats naar prullenbak
|
||||||
@ -187,7 +183,6 @@ FILEBROWSER_SHOWDIRHINT;Verwijder alle filters.\nSneltoets: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Toon bewerkte foto's\nSneltoets: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Toon bewerkte foto's\nSneltoets: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Toon niet-bewerkte foto's\nSneltoets: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Toon niet-bewerkte foto's\nSneltoets: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Toon EXIF-info
|
FILEBROWSER_SHOWEXIFINFO;Toon EXIF-info
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Toon alleen niet-verwijderde foto's.
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Toon alleen originele afbeelding.\n\nAls er meerdere afbeeldingen zijn met dezelfde naam maar verschillende extensies, dan wordt de afbeelding waarvan de extensie het hoogst staat in de lijst met extensies in Voorkeuren > Bestandsnavigator > Extensies
|
FILEBROWSER_SHOWORIGINALHINT;Toon alleen originele afbeelding.\n\nAls er meerdere afbeeldingen zijn met dezelfde naam maar verschillende extensies, dan wordt de afbeelding waarvan de extensie het hoogst staat in de lijst met extensies in Voorkeuren > Bestandsnavigator > Extensies
|
||||||
FILEBROWSER_SHOWRANK1HINT;Toon foto's met 1 ster.\nSneltoets: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Toon foto's met 1 ster.\nSneltoets: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Toon foto's met 2 sterren.\nSneltoets: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Toon foto's met 2 sterren.\nSneltoets: <b>2</b>
|
||||||
@ -1979,8 +1974,13 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: <b>-</b>
|
|||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!GENERAL_CURRENT;Current
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -96,8 +96,6 @@ FILEBROWSER_COPYPROFILE;Kopiuj profil
|
|||||||
FILEBROWSER_CURRENT_NAME;Obecna nazwa:
|
FILEBROWSER_CURRENT_NAME;Obecna nazwa:
|
||||||
FILEBROWSER_DARKFRAME;Czarna klatka
|
FILEBROWSER_DARKFRAME;Czarna klatka
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Potwierdzenie usunięcia pliku
|
FILEBROWSER_DELETEDIALOG_HEADER;Potwierdzenie usunięcia pliku
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Na pewno usunąć zaznaczone %1 plików?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Na pewno usunąć wybrany plik %1 WŁĄCZNIE z wersją utworzoną przez kolejkę przetwarzania?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Wyczyść kosz
|
FILEBROWSER_EMPTYTRASH;Wyczyść kosz
|
||||||
FILEBROWSER_EXTPROGMENU;Otwórz za pomocą
|
FILEBROWSER_EXTPROGMENU;Otwórz za pomocą
|
||||||
FILEBROWSER_FLATFIELD;Puste pole
|
FILEBROWSER_FLATFIELD;Puste pole
|
||||||
@ -132,8 +130,6 @@ FILEBROWSER_POPUPRANK2;Ocena 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Ocena 3 ***
|
FILEBROWSER_POPUPRANK3;Ocena 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Ocena 4 ****
|
FILEBROWSER_POPUPRANK4;Ocena 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Ocena 5 *****
|
FILEBROWSER_POPUPRANK5;Ocena 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Usuń z dysku
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Usuń z dysku wraz z wynikiem przetwarzania
|
|
||||||
FILEBROWSER_POPUPRENAME;Zmień nazwę
|
FILEBROWSER_POPUPRENAME;Zmień nazwę
|
||||||
FILEBROWSER_POPUPSELECTALL;Zaznacz wszystkie
|
FILEBROWSER_POPUPSELECTALL;Zaznacz wszystkie
|
||||||
FILEBROWSER_POPUPTRASH;Przenieś do kosza
|
FILEBROWSER_POPUPTRASH;Przenieś do kosza
|
||||||
@ -1392,10 +1388,14 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: <b>-</b>
|
|||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
||||||
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILECHOOSER_FILTER_ANY;All files
|
!FILECHOOSER_FILTER_ANY;All files
|
||||||
!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc)
|
!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc)
|
||||||
|
@ -120,8 +120,6 @@ FILEBROWSER_COPYPROFILE;Copiar
|
|||||||
FILEBROWSER_CURRENT_NAME;Nome atual:
|
FILEBROWSER_CURRENT_NAME;Nome atual:
|
||||||
FILEBROWSER_DARKFRAME;Fotograma escuro
|
FILEBROWSER_DARKFRAME;Fotograma escuro
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Confirmação de eliminação de ficheiro
|
FILEBROWSER_DELETEDIALOG_HEADER;Confirmação de eliminação de ficheiro
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Tem a certeza que quer eliminar os <b>%1</b> ficheiros selecionados?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Tem a certeza que quer eliminar os <b>%1</b> ficheiros selecionados <b>incluindo</b> uma versão processada na fila?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Esvaziar o caixote do lixo
|
FILEBROWSER_EMPTYTRASH;Esvaziar o caixote do lixo
|
||||||
FILEBROWSER_EXTPROGMENU;Abrir com
|
FILEBROWSER_EXTPROGMENU;Abrir com
|
||||||
FILEBROWSER_FLATFIELD;Campo plano
|
FILEBROWSER_FLATFIELD;Campo plano
|
||||||
@ -156,8 +154,6 @@ FILEBROWSER_POPUPRANK2;Classificação 2 estrelas
|
|||||||
FILEBROWSER_POPUPRANK3;Classificação 3 estrelas
|
FILEBROWSER_POPUPRANK3;Classificação 3 estrelas
|
||||||
FILEBROWSER_POPUPRANK4;Classificação 4 estrelas
|
FILEBROWSER_POPUPRANK4;Classificação 4 estrelas
|
||||||
FILEBROWSER_POPUPRANK5;Classificação 5 estrelas
|
FILEBROWSER_POPUPRANK5;Classificação 5 estrelas
|
||||||
FILEBROWSER_POPUPREMOVE;Eliminar
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Eliminar com saída da fila
|
|
||||||
FILEBROWSER_POPUPRENAME;Renomear
|
FILEBROWSER_POPUPRENAME;Renomear
|
||||||
FILEBROWSER_POPUPSELECTALL;Selecionar tudo
|
FILEBROWSER_POPUPSELECTALL;Selecionar tudo
|
||||||
FILEBROWSER_POPUPTRASH;Mover para o caixote do lixo
|
FILEBROWSER_POPUPTRASH;Mover para o caixote do lixo
|
||||||
@ -184,7 +180,6 @@ FILEBROWSER_SHOWDIRHINT;Limpar todos os filtros.\nAtalho: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Mostrar imagens editadas.\nAtalho: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Mostrar imagens editadas.\nAtalho: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imagens não editadas.\nAtalho: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imagens não editadas.\nAtalho: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Mostrar informações Exif.\n\nAtalhos:\n<b>i</b> - Modo de editor em várias abas,\n<b>Alt-i</b> - Modo de editor numa só aba.
|
FILEBROWSER_SHOWEXIFINFO;Mostrar informações Exif.\n\nAtalhos:\n<b>i</b> - Modo de editor em várias abas,\n<b>Alt-i</b> - Modo de editor numa só aba.
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Mostrar apenas imagens não eliminadas.
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Mostrar apenas imagens originais.\n\nQuando existem várias imagens com o mesmo nome de ficheiro mas com extensões diferentes, a única considerada original é aquela cuja extensão está mais próxima da parte superior da lista de extensões analisadas em Preferências > Navegador de ficheiros > Extensões analisadas.
|
FILEBROWSER_SHOWORIGINALHINT;Mostrar apenas imagens originais.\n\nQuando existem várias imagens com o mesmo nome de ficheiro mas com extensões diferentes, a única considerada original é aquela cuja extensão está mais próxima da parte superior da lista de extensões analisadas em Preferências > Navegador de ficheiros > Extensões analisadas.
|
||||||
FILEBROWSER_SHOWRANK1HINT;Mostrar imagens classificadas com 1 estrela.\nAtalho: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Mostrar imagens classificadas com 1 estrela.\nAtalho: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Mostrar imagens classificadas com 2 estrelas.\nAtalho: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Mostrar imagens classificadas com 2 estrelas.\nAtalho: <b>2</b>
|
||||||
@ -2262,8 +2257,13 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: <b>-</b>
|
|||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!MAIN_FRAME_PLACES_DEL;Remove
|
!MAIN_FRAME_PLACES_DEL;Remove
|
||||||
!PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode
|
!PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode
|
||||||
!PROGRESSBAR_DECODING;Decoding...
|
!PROGRESSBAR_DECODING;Decoding...
|
||||||
|
@ -120,8 +120,6 @@ FILEBROWSER_COPYPROFILE;Copiar perfil
|
|||||||
FILEBROWSER_CURRENT_NAME;Nome atual:
|
FILEBROWSER_CURRENT_NAME;Nome atual:
|
||||||
FILEBROWSER_DARKFRAME;Quadro escuro
|
FILEBROWSER_DARKFRAME;Quadro escuro
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Confirmação de exclusão de arquivo
|
FILEBROWSER_DELETEDIALOG_HEADER;Confirmação de exclusão de arquivo
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Tens certeza de que desejas excluir os <b>%1</b> arquivos selecionados?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Tens certeza de que desejas excluir os <b>%1</b> arquivos selecionados <b>incluindo</b> uma versão processada em fila?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Esvaziar lixeira
|
FILEBROWSER_EMPTYTRASH;Esvaziar lixeira
|
||||||
FILEBROWSER_EXTPROGMENU;Abrir com
|
FILEBROWSER_EXTPROGMENU;Abrir com
|
||||||
FILEBROWSER_FLATFIELD;Flat-Field
|
FILEBROWSER_FLATFIELD;Flat-Field
|
||||||
@ -156,8 +154,6 @@ FILEBROWSER_POPUPRANK2;Classificação 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Classificação 3 ***
|
FILEBROWSER_POPUPRANK3;Classificação 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Classificação 4 ****
|
FILEBROWSER_POPUPRANK4;Classificação 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Classificação 5 *****
|
FILEBROWSER_POPUPRANK5;Classificação 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Excluir
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Excluir com saída da fila
|
|
||||||
FILEBROWSER_POPUPRENAME;Renomear
|
FILEBROWSER_POPUPRENAME;Renomear
|
||||||
FILEBROWSER_POPUPSELECTALL;Selecionar tudo
|
FILEBROWSER_POPUPSELECTALL;Selecionar tudo
|
||||||
FILEBROWSER_POPUPTRASH;Mover para a lixeira
|
FILEBROWSER_POPUPTRASH;Mover para a lixeira
|
||||||
@ -184,7 +180,6 @@ FILEBROWSER_SHOWDIRHINT;Limpar todos os filtros.\nAtalho: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Mostrar imagens editadas.\nAtalho: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Mostrar imagens editadas.\nAtalho: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imagens não editadas.\nAtalho: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imagens não editadas.\nAtalho: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Mostrar informações Exif.\n\nAtalhos:\n<b>i</b> - Modo de Guias de Editores Múltiplos,\n<b>Alt-i</b> - Modo de Guia de Editor Único.
|
FILEBROWSER_SHOWEXIFINFO;Mostrar informações Exif.\n\nAtalhos:\n<b>i</b> - Modo de Guias de Editores Múltiplos,\n<b>Alt-i</b> - Modo de Guia de Editor Único.
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Mostre somente imagens não excluídas.
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Mostre somente imagens originais.\n\nQuando existem várias imagens com o mesmo nome de arquivo, mas extensões diferentes, a única considerada original é aquela cuja extensão está mais próxima da parte superior da lista de extensões analisadas em Preferências > Navegador de Arquivos > Extensões Analisadas.
|
FILEBROWSER_SHOWORIGINALHINT;Mostre somente imagens originais.\n\nQuando existem várias imagens com o mesmo nome de arquivo, mas extensões diferentes, a única considerada original é aquela cuja extensão está mais próxima da parte superior da lista de extensões analisadas em Preferências > Navegador de Arquivos > Extensões Analisadas.
|
||||||
FILEBROWSER_SHOWRANK1HINT;Mostrar imagens classificadas com 1 estrela.\nAtalho: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Mostrar imagens classificadas com 1 estrela.\nAtalho: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Mostrar imagens classificadas com 2 estrelas.\nAtalho: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Mostrar imagens classificadas com 2 estrelas.\nAtalho: <b>2</b>
|
||||||
@ -2254,8 +2249,13 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: <b>-</b>
|
|||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - region offset
|
!HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - region offset
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - region power
|
!HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - region power
|
||||||
!MAIN_FRAME_PLACES_DEL;Remove
|
!MAIN_FRAME_PLACES_DEL;Remove
|
||||||
|
@ -113,8 +113,6 @@ FILEBROWSER_COPYPROFILE;Скопировать профиль
|
|||||||
FILEBROWSER_CURRENT_NAME;Текущее имя:
|
FILEBROWSER_CURRENT_NAME;Текущее имя:
|
||||||
FILEBROWSER_DARKFRAME;Темновой кадр
|
FILEBROWSER_DARKFRAME;Темновой кадр
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Подтверждение удаления файла
|
FILEBROWSER_DELETEDIALOG_HEADER;Подтверждение удаления файла
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Вы уверены, что хотите удалить <b>%1</b> выбранный(ых) файл(ов)?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Вы уверены, что хотите удалить <b>%1</b> выделенных файлов, <b>включая</b> обработанные версии?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Очистить корзину
|
FILEBROWSER_EMPTYTRASH;Очистить корзину
|
||||||
FILEBROWSER_EXTPROGMENU;Открыть с помощью
|
FILEBROWSER_EXTPROGMENU;Открыть с помощью
|
||||||
FILEBROWSER_FLATFIELD;Плоское поле
|
FILEBROWSER_FLATFIELD;Плоское поле
|
||||||
@ -149,8 +147,6 @@ FILEBROWSER_POPUPRANK2;Рейтинг 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Рейтинг 3 ***
|
FILEBROWSER_POPUPRANK3;Рейтинг 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Рейтинг 4 ****
|
FILEBROWSER_POPUPRANK4;Рейтинг 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Рейтинг 5 *****
|
FILEBROWSER_POPUPRANK5;Рейтинг 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Удалить с диска
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Удалить с диска и пакетной обработки
|
|
||||||
FILEBROWSER_POPUPRENAME;Переименовать
|
FILEBROWSER_POPUPRENAME;Переименовать
|
||||||
FILEBROWSER_POPUPSELECTALL;Выбрать все
|
FILEBROWSER_POPUPSELECTALL;Выбрать все
|
||||||
FILEBROWSER_POPUPTRASH;Удалить в корзину
|
FILEBROWSER_POPUPTRASH;Удалить в корзину
|
||||||
@ -177,7 +173,6 @@ FILEBROWSER_SHOWDIRHINT;Сбросить все фильтры.\nГорячая
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Показать измененные изображения.\nГорячая клавиша: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Показать измененные изображения.\nГорячая клавиша: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Показать не измененные изображения.\nГорячая клавиша: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Показать не измененные изображения.\nГорячая клавиша: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Показать информацию EXIF.\nГорячая клавиша: <b>i</b>\n\nГорячая клавиша в режиме Одиночного редактора: <b>Alt-I</b>
|
FILEBROWSER_SHOWEXIFINFO;Показать информацию EXIF.\nГорячая клавиша: <b>i</b>\n\nГорячая клавиша в режиме Одиночного редактора: <b>Alt-I</b>
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Показать только неудалённые изображения.
|
|
||||||
FILEBROWSER_SHOWRANK1HINT;Показать изображения с рейтингом 1.\nГорячая клавиша: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Показать изображения с рейтингом 1.\nГорячая клавиша: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Показать изображения с рейтингом 2.\nГорячая клавиша: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Показать изображения с рейтингом 2.\nГорячая клавиша: <b>2</b>
|
||||||
FILEBROWSER_SHOWRANK3HINT;Показать изображения с рейтингом 3.\nГорячая клавиша: <b>3</b>
|
FILEBROWSER_SHOWRANK3HINT;Показать изображения с рейтингом 3.\nГорячая клавиша: <b>3</b>
|
||||||
@ -1470,8 +1465,13 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: <b>-</b>
|
|||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILECHOOSER_FILTER_PP;Processing profiles
|
!FILECHOOSER_FILTER_PP;Processing profiles
|
||||||
!FILECHOOSER_FILTER_SAME;Same format as current photo
|
!FILECHOOSER_FILTER_SAME;Same format as current photo
|
||||||
@ -1872,7 +1872,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: <b>-</b>
|
|||||||
!TP_COLORAPP_SURROUND_DARK;Dark
|
!TP_COLORAPP_SURROUND_DARK;Dark
|
||||||
!TP_COLORAPP_SURROUND_DIM;Dim
|
!TP_COLORAPP_SURROUND_DIM;Dim
|
||||||
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
||||||
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slighty dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slightly dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
||||||
!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
||||||
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
!TP_COLORAPP_TCMODE_CHROMA;Chroma
|
||||||
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
!TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
||||||
|
@ -85,8 +85,6 @@ FILEBROWSER_COPYPROFILE;Умножи профил
|
|||||||
FILEBROWSER_CURRENT_NAME;Тренутно име:
|
FILEBROWSER_CURRENT_NAME;Тренутно име:
|
||||||
FILEBROWSER_DARKFRAME;Тамни кадар
|
FILEBROWSER_DARKFRAME;Тамни кадар
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Брисање датотеке
|
FILEBROWSER_DELETEDIALOG_HEADER;Брисање датотеке
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Да ли сигурно желите да обришете %1 датотека?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Да ли желите да обришете %1 изабраних датотека, укључујући и оне које су заказане?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Избаци смеће
|
FILEBROWSER_EMPTYTRASH;Избаци смеће
|
||||||
FILEBROWSER_EXTPROGMENU;Отвори помоћу
|
FILEBROWSER_EXTPROGMENU;Отвори помоћу
|
||||||
FILEBROWSER_FLATFIELD;Равно поље
|
FILEBROWSER_FLATFIELD;Равно поље
|
||||||
@ -108,8 +106,6 @@ FILEBROWSER_POPUPPROCESS;Закажи за обраду
|
|||||||
FILEBROWSER_POPUPPROCESSFAST;Додај у заказано (брзи извоз)
|
FILEBROWSER_POPUPPROCESSFAST;Додај у заказано (брзи извоз)
|
||||||
FILEBROWSER_POPUPPROFILEOPERATIONS;Профил
|
FILEBROWSER_POPUPPROFILEOPERATIONS;Профил
|
||||||
FILEBROWSER_POPUPRANK;Оцена
|
FILEBROWSER_POPUPRANK;Оцена
|
||||||
FILEBROWSER_POPUPREMOVE;Уклони из система датотека
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Уклони из система датотека и заказаног
|
|
||||||
FILEBROWSER_POPUPRENAME;Преименуј
|
FILEBROWSER_POPUPRENAME;Преименуј
|
||||||
FILEBROWSER_POPUPSELECTALL;Изабери све
|
FILEBROWSER_POPUPSELECTALL;Изабери све
|
||||||
FILEBROWSER_POPUPTRASH;Премести у смеће
|
FILEBROWSER_POPUPTRASH;Премести у смеће
|
||||||
@ -1229,8 +1225,10 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике <b>-</b>
|
|||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
|
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
|
||||||
!FILEBROWSER_POPUPCOLORLABEL1;Label: Red
|
!FILEBROWSER_POPUPCOLORLABEL1;Label: Red
|
||||||
!FILEBROWSER_POPUPCOLORLABEL2;Label: Yellow
|
!FILEBROWSER_POPUPCOLORLABEL2;Label: Yellow
|
||||||
@ -1244,8 +1242,10 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике <b>-</b>
|
|||||||
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
!FILEBROWSER_POPUPRANK3;Rank 3 ***
|
||||||
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
!FILEBROWSER_POPUPRANK4;Rank 4 ****
|
||||||
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
!FILEBROWSER_POPUPRANK5;Rank 5 *****
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
||||||
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILECHOOSER_FILTER_ANY;All files
|
!FILECHOOSER_FILTER_ANY;All files
|
||||||
!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc)
|
!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc)
|
||||||
|
@ -94,8 +94,6 @@ FILEBROWSER_COPYPROFILE;Kopiera profil
|
|||||||
FILEBROWSER_CURRENT_NAME;Nuvarande namn:
|
FILEBROWSER_CURRENT_NAME;Nuvarande namn:
|
||||||
FILEBROWSER_DARKFRAME;Svartbild
|
FILEBROWSER_DARKFRAME;Svartbild
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;Bekräftelse vid borttag
|
FILEBROWSER_DELETEDIALOG_HEADER;Bekräftelse vid borttag
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Är du säker på att du vill ta bort de valda %1 filerna?
|
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Är du säker på att du vill ta bort de valda filerna %1 OCH den behandlade versionen?
|
|
||||||
FILEBROWSER_EMPTYTRASH;Töm papperskorgen
|
FILEBROWSER_EMPTYTRASH;Töm papperskorgen
|
||||||
FILEBROWSER_EXTPROGMENU;Öppna med
|
FILEBROWSER_EXTPROGMENU;Öppna med
|
||||||
FILEBROWSER_FLATFIELD;Plattfält
|
FILEBROWSER_FLATFIELD;Plattfält
|
||||||
@ -130,8 +128,6 @@ FILEBROWSER_POPUPRANK2;Betyg 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Betyg 3 ***
|
FILEBROWSER_POPUPRANK3;Betyg 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Betyg 4 ****
|
FILEBROWSER_POPUPRANK4;Betyg 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Betyg 5 *****
|
FILEBROWSER_POPUPRANK5;Betyg 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Ta bort från filsystemet
|
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Ta bort från filsystemet inkl. den behandlade
|
|
||||||
FILEBROWSER_POPUPRENAME;Byt namn
|
FILEBROWSER_POPUPRENAME;Byt namn
|
||||||
FILEBROWSER_POPUPSELECTALL;Markera allt
|
FILEBROWSER_POPUPSELECTALL;Markera allt
|
||||||
FILEBROWSER_POPUPTRASH;Flytta till papperskorgen
|
FILEBROWSER_POPUPTRASH;Flytta till papperskorgen
|
||||||
@ -157,7 +153,6 @@ FILEBROWSER_SHOWDIRHINT;Återställ alla sökfilter.\nKortkommando: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Visa redigerade bilder.\nKortkommando: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Visa redigerade bilder.\nKortkommando: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Visa ickeredigerade bilder.\nKortkommando: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Visa ickeredigerade bilder.\nKortkommando: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Visa EXIF-information.\nKortkommando: <b>i</b>\n\nKortkommando i enkelbildsläget: <b>Alt-i</b>
|
FILEBROWSER_SHOWEXIFINFO;Visa EXIF-information.\nKortkommando: <b>i</b>\n\nKortkommando i enkelbildsläget: <b>Alt-i</b>
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Visa endast ej borttagna bilder.
|
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Visa endast ursprungliga bilder.\n\nNär flera bilder finns med samma filnamn men med olika filändelser så anses den bild vara urpsrungsbilden som har sin ändelse närmst toppen i listan över filändelser i Inställningar > Filbläddrare > Hanterade filändelser
|
FILEBROWSER_SHOWORIGINALHINT;Visa endast ursprungliga bilder.\n\nNär flera bilder finns med samma filnamn men med olika filändelser så anses den bild vara urpsrungsbilden som har sin ändelse närmst toppen i listan över filändelser i Inställningar > Filbläddrare > Hanterade filändelser
|
||||||
FILEBROWSER_SHOWRANK1HINT;Visa bilder med betyg 1.\nKortkommando: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Visa bilder med betyg 1.\nKortkommando: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Visa bilder med betyg 2.\nKortkommando: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Visa bilder med betyg 2.\nKortkommando: <b>2</b>
|
||||||
@ -1768,9 +1763,14 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: <b>-</b>
|
|||||||
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply "find" keywords.
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
|
!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
|
!FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
|
!FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
|
!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
||||||
|
!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
!GENERAL_CURRENT;Current
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -121,12 +121,12 @@ FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\n
|
|||||||
FILEBROWSER_COPYPROFILE;Copy
|
FILEBROWSER_COPYPROFILE;Copy
|
||||||
FILEBROWSER_CURRENT_NAME;Current name:
|
FILEBROWSER_CURRENT_NAME;Current name:
|
||||||
FILEBROWSER_DARKFRAME;Dark-frame
|
FILEBROWSER_DARKFRAME;Dark-frame
|
||||||
FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to delete all <b>%1</b> files in trash?
|
FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to <b>permanently</b> delete all <b>%1</b> files in trash?
|
||||||
FILEBROWSER_DELETEDIALOG_HEADER;File delete confirmation:
|
FILEBROWSER_DELETEDIALOG_HEADER;File delete confirmation:
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to delete the selected <b>%1</b> files?
|
FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files?
|
||||||
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to delete the selected <b>%1</b> files <b>including</b> a queue-processed version?
|
FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to <b>permanently</b> delete the selected <b>%1</b> files, <b>including</b> a queue-processed version?
|
||||||
FILEBROWSER_EMPTYTRASH;Empty trash
|
FILEBROWSER_EMPTYTRASH;Empty trash
|
||||||
FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash.
|
FILEBROWSER_EMPTYTRASHHINT;<b>Permanently</b> delete all files in trash.
|
||||||
FILEBROWSER_EXTPROGMENU;Open with
|
FILEBROWSER_EXTPROGMENU;Open with
|
||||||
FILEBROWSER_FLATFIELD;Flat-Field
|
FILEBROWSER_FLATFIELD;Flat-Field
|
||||||
FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
|
FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
|
||||||
@ -160,8 +160,8 @@ FILEBROWSER_POPUPRANK2;Rank 2 **
|
|||||||
FILEBROWSER_POPUPRANK3;Rank 3 ***
|
FILEBROWSER_POPUPRANK3;Rank 3 ***
|
||||||
FILEBROWSER_POPUPRANK4;Rank 4 ****
|
FILEBROWSER_POPUPRANK4;Rank 4 ****
|
||||||
FILEBROWSER_POPUPRANK5;Rank 5 *****
|
FILEBROWSER_POPUPRANK5;Rank 5 *****
|
||||||
FILEBROWSER_POPUPREMOVE;Delete
|
FILEBROWSER_POPUPREMOVE;Delete permanently
|
||||||
FILEBROWSER_POPUPREMOVEINCLPROC;Delete with output from queue
|
FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version
|
||||||
FILEBROWSER_POPUPRENAME;Rename
|
FILEBROWSER_POPUPRENAME;Rename
|
||||||
FILEBROWSER_POPUPSELECTALL;Select all
|
FILEBROWSER_POPUPSELECTALL;Select all
|
||||||
FILEBROWSER_POPUPTRASH;Move to trash
|
FILEBROWSER_POPUPTRASH;Move to trash
|
||||||
@ -188,7 +188,7 @@ FILEBROWSER_SHOWDIRHINT;Clear all filters.\nShortcut: <b>d</b>
|
|||||||
FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\n<b>i</b> - Multiple Editor Tabs Mode,\n<b>Alt-i</b> - Single Editor Tab Mode.
|
FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\n<b>i</b> - Multiple Editor Tabs Mode,\n<b>Alt-i</b> - Single Editor Tab Mode.
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash.
|
||||||
FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: <b>2</b>
|
||||||
@ -1429,7 +1429,7 @@ TP_COLORAPP_SURROUND_AVER;Average
|
|||||||
TP_COLORAPP_SURROUND_DARK;Dark
|
TP_COLORAPP_SURROUND_DARK;Dark
|
||||||
TP_COLORAPP_SURROUND_DIM;Dim
|
TP_COLORAPP_SURROUND_DIM;Dim
|
||||||
TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet)
|
||||||
TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slighty dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment (TV). The image will become slightly dark.\n\n<b>Dark</b>: Dark environment (projector). The image will become more dark.\n\n<b>Extremly Dark</b>: Extremly dark environment (cutsheet). The image will become very dark.
|
||||||
TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness
|
||||||
TP_COLORAPP_TCMODE_CHROMA;Chroma
|
TP_COLORAPP_TCMODE_CHROMA;Chroma
|
||||||
TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
TP_COLORAPP_TCMODE_COLORF;Colorfulness
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
[General]
|
[General]
|
||||||
# Setting MultiUser to false will use the application's installation directory as cache directory,
|
# Setting MultiUser to false will use the application's installation directory as cache directory,
|
||||||
# which can be useful if you want to keep the application and all the cache datas in a single place,
|
# which can be useful if you want to keep the application and all the cache data in a single place,
|
||||||
# an external HD for example
|
# an external HD for example
|
||||||
MultiUser=true
|
MultiUser=true
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
[General]
|
[General]
|
||||||
# Setting MultiUser to false will use the application's installation directory as cache directory,
|
# Setting MultiUser to false will use the application's installation directory as cache directory,
|
||||||
# which can be useful if you want to keep the application and all the cache datas in a single place,
|
# which can be useful if you want to keep the application and all the cache data in a single place,
|
||||||
# an external HD for example
|
# an external HD for example
|
||||||
MultiUser=true
|
MultiUser=true
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
[General]
|
[General]
|
||||||
# Setting MultiUser to false will use the application's installation directory as cache directory,
|
# Setting MultiUser to false will use the application's installation directory as cache directory,
|
||||||
# which can be useful if you want to keep the application and all the cache datas in a single place,
|
# which can be useful if you want to keep the application and all the cache data in a single place,
|
||||||
# an external HD for example
|
# an external HD for example
|
||||||
MultiUser=true
|
MultiUser=true
|
||||||
# Windows users should not use the system theme : some composed widget won't be usable
|
# Windows users should not use the system theme : some composed widget won't be usable
|
||||||
|
@ -31,6 +31,7 @@ link_directories(
|
|||||||
set(CAMCONSTSFILE "camconst.json")
|
set(CAMCONSTSFILE "camconst.json")
|
||||||
|
|
||||||
set(RTENGINESOURCEFILES
|
set(RTENGINESOURCEFILES
|
||||||
|
badpixels.cc
|
||||||
CA_correct_RT.cc
|
CA_correct_RT.cc
|
||||||
EdgePreservingDecomposition.cc
|
EdgePreservingDecomposition.cc
|
||||||
FTblockDN.cc
|
FTblockDN.cc
|
||||||
|
@ -406,7 +406,7 @@ bool MultiDiagonalSymmetricMatrix::CreateIncompleteCholeskyFactorization(int Max
|
|||||||
fp = 1;
|
fp = 1;
|
||||||
|
|
||||||
for(int ii = 1; ii < m; ii++) {
|
for(int ii = 1; ii < m; ii++) {
|
||||||
fp = rtengine::min(StartRows[ii] - StartRows[ii - 1], MaxFillAbove); //Guarunteed positive since StartRows must be created in increasing order.
|
fp = rtengine::min(StartRows[ii] - StartRows[ii - 1], MaxFillAbove); //Guaranteed positive since StartRows must be created in increasing order.
|
||||||
mic = mic + fp;
|
mic = mic + fp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -444,7 +444,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
idx = 0;
|
idx = 0;
|
||||||
} else if (idx > maxs) {
|
} else if (index > maxsf) {
|
||||||
if (clip & LUT_CLIP_ABOVE) {
|
if (clip & LUT_CLIP_ABOVE) {
|
||||||
return data[upperBound];
|
return data[upperBound];
|
||||||
}
|
}
|
||||||
@ -563,7 +563,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// compress a LUT<uint32_t> with size y into a LUT<uint32_t> with size x (y>x) by using the passTrough LUT to calculate indexes
|
// compress a LUT<uint32_t> with size y into a LUT<uint32_t> with size x (y>x) by using the passThrough LUT to calculate indexes
|
||||||
template<typename U = T, typename = typename std::enable_if<std::is_same<U, std::uint32_t>::value>::type>
|
template<typename U = T, typename = typename std::enable_if<std::is_same<U, std::uint32_t>::value>::type>
|
||||||
void compressTo(LUT<T> &dest, unsigned int numVals, const LUT<float> &passThrough) const
|
void compressTo(LUT<T> &dest, unsigned int numVals, const LUT<float> &passThrough) const
|
||||||
{
|
{
|
||||||
|
582
rtengine/badpixels.cc
Normal file
582
rtengine/badpixels.cc
Normal file
@ -0,0 +1,582 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of RawTherapee.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2004-2019 Gabor Horvath <hgabor@rawtherapee.com>
|
||||||
|
*
|
||||||
|
* RawTherapee is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* RawTherapee is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "array2D.h"
|
||||||
|
#include "median.h"
|
||||||
|
#include "pixelsmap.h"
|
||||||
|
#include "rawimagesource.h"
|
||||||
|
|
||||||
|
namespace rtengine
|
||||||
|
{
|
||||||
|
|
||||||
|
/* interpolateBadPixelsBayer: correct raw pixels looking at the bitmap
|
||||||
|
* takes into consideration if there are multiple bad pixels in the neighborhood
|
||||||
|
*/
|
||||||
|
int RawImageSource::interpolateBadPixelsBayer(const PixelsMap &bitmapBads, array2D<float> &rawData)
|
||||||
|
{
|
||||||
|
constexpr float eps = 1.f;
|
||||||
|
int counter = 0;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for reduction(+:counter) schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int row = 2; row < H - 2; ++row) {
|
||||||
|
for (int col = 2; col < W - 2; ++col) {
|
||||||
|
const int sk = bitmapBads.skipIfZero(col, row); //optimization for a stripe all zero
|
||||||
|
|
||||||
|
if (sk) {
|
||||||
|
col += sk - 1; //-1 is because of col++ in cycle
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bitmapBads.get(col, row)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
float wtdsum = 0.f, norm = 0.f;
|
||||||
|
|
||||||
|
// diagonal interpolation
|
||||||
|
if (FC(row, col) == 1) {
|
||||||
|
// green channel. We can use closer pixels than for red or blue channel. Distance to center pixel is sqrt(2) => weighting is 0.70710678
|
||||||
|
// For green channel following pixels will be used for interpolation. Pixel to be interpolated is in center.
|
||||||
|
// 1 means that pixel is used in this step, if itself and his counterpart are not marked bad
|
||||||
|
// 0 0 0 0 0
|
||||||
|
// 0 1 0 1 0
|
||||||
|
// 0 0 0 0 0
|
||||||
|
// 0 1 0 1 0
|
||||||
|
// 0 0 0 0 0
|
||||||
|
for (int dx = -1; dx <= 1; dx += 2) {
|
||||||
|
if (bitmapBads.get(col + dx, row - 1) || bitmapBads.get(col - dx, row + 1)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const float dirwt = 0.70710678f / (fabsf(rawData[row - 1][col + dx] - rawData[row + 1][col - dx]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row - 1][col + dx] + rawData[row + 1][col - dx]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// red and blue channel. Distance to center pixel is sqrt(8) => weighting is 0.35355339
|
||||||
|
// For red and blue channel following pixels will be used for interpolation. Pixel to be interpolated is in center.
|
||||||
|
// 1 means that pixel is used in this step, if itself and his counterpart are not marked bad
|
||||||
|
// 1 0 0 0 1
|
||||||
|
// 0 0 0 0 0
|
||||||
|
// 0 0 0 0 0
|
||||||
|
// 0 0 0 0 0
|
||||||
|
// 1 0 0 0 1
|
||||||
|
for (int dx = -2; dx <= 2; dx += 4) {
|
||||||
|
if (bitmapBads.get(col + dx, row - 2) || bitmapBads.get(col - dx, row + 2)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const float dirwt = 0.35355339f / (fabsf(rawData[row - 2][col + dx] - rawData[row + 2][col - dx]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row - 2][col + dx] + rawData[row + 2][col - dx]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// channel independent. Distance to center pixel is 2 => weighting is 0.5
|
||||||
|
// Additionally for all channel following pixels will be used for interpolation. Pixel to be interpolated is in center.
|
||||||
|
// 1 means that pixel is used in this step, if itself and his counterpart are not marked bad
|
||||||
|
// 0 0 1 0 0
|
||||||
|
// 0 0 0 0 0
|
||||||
|
// 1 0 0 0 1
|
||||||
|
// 0 0 0 0 0
|
||||||
|
// 0 0 1 0 0
|
||||||
|
|
||||||
|
// horizontal interpolation
|
||||||
|
if (!(bitmapBads.get(col - 2, row) || bitmapBads.get(col + 2, row))) {
|
||||||
|
const float dirwt = 0.5f / (fabsf(rawData[row][col - 2] - rawData[row][col + 2]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row][col - 2] + rawData[row][col + 2]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// vertical interpolation
|
||||||
|
if (!(bitmapBads.get(col, row - 2) || bitmapBads.get(col, row + 2))) {
|
||||||
|
const float dirwt = 0.5f / (fabsf(rawData[row - 2][col] - rawData[row + 2][col]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row - 2][col] + rawData[row + 2][col]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LIKELY(norm > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelihood of this case is about 99.999%
|
||||||
|
rawData[row][col] = wtdsum / (2.f * norm); //gradient weighted average, Factor of 2.f is an optimization to avoid multiplications in former steps
|
||||||
|
counter++;
|
||||||
|
} else { //backup plan -- simple average. Same method for all channels. We could improve this, but it's really unlikely that this case happens
|
||||||
|
int tot = 0;
|
||||||
|
float sum = 0.f;
|
||||||
|
|
||||||
|
for (int dy = -2; dy <= 2; dy += 2) {
|
||||||
|
for (int dx = -2; dx <= 2; dx += 2) {
|
||||||
|
if (bitmapBads.get(col + dx, row + dy)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
sum += rawData[row + dy][col + dx];
|
||||||
|
tot++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tot > 0) {
|
||||||
|
rawData[row][col] = sum / tot;
|
||||||
|
counter ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return counter; // Number of interpolated pixels.
|
||||||
|
}
|
||||||
|
|
||||||
|
/* interpolateBadPixelsNcolors: correct raw pixels looking at the bitmap
|
||||||
|
* takes into consideration if there are multiple bad pixels in the neighborhood
|
||||||
|
*/
|
||||||
|
int RawImageSource::interpolateBadPixelsNColours(const PixelsMap &bitmapBads, const int colors)
|
||||||
|
{
|
||||||
|
constexpr float eps = 1.f;
|
||||||
|
int counter = 0;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for reduction(+:counter) schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int row = 2; row < H - 2; ++row) {
|
||||||
|
for (int col = 2; col < W - 2; ++col) {
|
||||||
|
const int sk = bitmapBads.skipIfZero(col, row); //optimization for a stripe all zero
|
||||||
|
|
||||||
|
if (sk) {
|
||||||
|
col += sk - 1; //-1 is because of col++ in cycle
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bitmapBads.get(col, row)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
float wtdsum[colors];
|
||||||
|
float norm[colors];
|
||||||
|
for (int c = 0; c < colors; ++c) {
|
||||||
|
wtdsum[c] = norm[c] = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// diagonal interpolation
|
||||||
|
for (int dx = -1; dx <= 1; dx += 2) {
|
||||||
|
if (bitmapBads.get(col + dx, row - 1) || bitmapBads.get(col - dx, row + 1)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int c = 0; c < colors; ++c) {
|
||||||
|
const float dirwt = 0.70710678f / (fabsf(rawData[row - 1][(col + dx) * colors + c] - rawData[row + 1][(col - dx) * colors + c]) + eps);
|
||||||
|
wtdsum[c] += dirwt * (rawData[row - 1][(col + dx) * colors + c] + rawData[row + 1][(col - dx) * colors + c]);
|
||||||
|
norm[c] += dirwt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// horizontal interpolation
|
||||||
|
if (!(bitmapBads.get(col - 1, row) || bitmapBads.get(col + 1, row))) {
|
||||||
|
for (int c = 0; c < colors; ++c) {
|
||||||
|
const float dirwt = 1.f / (fabsf(rawData[row][(col - 1) * colors + c] - rawData[row][(col + 1) * colors + c]) + eps);
|
||||||
|
wtdsum[c] += dirwt * (rawData[row][(col - 1) * colors + c] + rawData[row][(col + 1) * colors + c]);
|
||||||
|
norm[c] += dirwt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// vertical interpolation
|
||||||
|
if (!(bitmapBads.get(col, row - 1) || bitmapBads.get(col, row + 1))) {
|
||||||
|
for (int c = 0; c < colors; ++c) {
|
||||||
|
const float dirwt = 1.f / (fabsf(rawData[row - 1][col * colors + c] - rawData[row + 1][col * colors + c]) + eps);
|
||||||
|
wtdsum[c] += dirwt * (rawData[row - 1][col * colors + c] + rawData[row + 1][col * colors + c]);
|
||||||
|
norm[c] += dirwt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LIKELY(norm[0] > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelihood of this case is about 99.999%
|
||||||
|
for (int c = 0; c < colors; ++c) {
|
||||||
|
rawData[row][col * colors + c] = wtdsum[c] / (2.f * norm[c]); //gradient weighted average, Factor of 2.f is an optimization to avoid multiplications in former steps
|
||||||
|
}
|
||||||
|
|
||||||
|
counter++;
|
||||||
|
} else { //backup plan -- simple average. Same method for all channels. We could improve this, but it's really unlikely that this case happens
|
||||||
|
int tot = 0;
|
||||||
|
float sum[colors];
|
||||||
|
for (int c = 0; c < colors; ++c) {
|
||||||
|
sum[c] = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int dy = -2; dy <= 2; dy += 2) {
|
||||||
|
for (int dx = -2; dx <= 2; dx += 2) {
|
||||||
|
if (bitmapBads.get(col + dx, row + dy)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int c = 0; c < colors; ++c) {
|
||||||
|
sum[c] += rawData[row + dy][(col + dx) * colors + c];
|
||||||
|
}
|
||||||
|
|
||||||
|
tot++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tot > 0) {
|
||||||
|
for (int c = 0; c < colors; ++c) {
|
||||||
|
rawData[row][col * colors + c] = sum[c] / tot;
|
||||||
|
}
|
||||||
|
|
||||||
|
counter ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return counter; // Number of interpolated pixels.
|
||||||
|
}
|
||||||
|
|
||||||
|
/* interpolateBadPixelsXtrans: correct raw pixels looking at the bitmap
|
||||||
|
* takes into consideration if there are multiple bad pixels in the neighborhood
|
||||||
|
*/
|
||||||
|
int RawImageSource::interpolateBadPixelsXtrans(const PixelsMap &bitmapBads)
|
||||||
|
{
|
||||||
|
constexpr float eps = 1.f;
|
||||||
|
int counter = 0;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for reduction(+:counter) schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int row = 2; row < H - 2; ++row) {
|
||||||
|
for (int col = 2; col < W - 2; ++col) {
|
||||||
|
const int skip = bitmapBads.skipIfZero(col, row); //optimization for a stripe all zero
|
||||||
|
|
||||||
|
if (skip) {
|
||||||
|
col += skip - 1; //-1 is because of col++ in cycle
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bitmapBads.get(col, row)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
float wtdsum = 0.f, norm = 0.f;
|
||||||
|
const unsigned int pixelColor = ri->XTRANSFC(row, col);
|
||||||
|
|
||||||
|
if (pixelColor == 1) {
|
||||||
|
// green channel. A green pixel can either be a solitary green pixel or a member of a 2x2 square of green pixels
|
||||||
|
if (ri->XTRANSFC(row, col - 1) == ri->XTRANSFC(row, col + 1)) {
|
||||||
|
// If left and right neighbor have same color, then this is a solitary green pixel
|
||||||
|
// For these the following pixels will be used for interpolation. Pixel to be interpolated is in center and marked with a P.
|
||||||
|
// Pairs of pixels used in this step are numbered. A pair will be used if none of the pixels of the pair is marked bad
|
||||||
|
// 0 means, the pixel has a different color and will not be used
|
||||||
|
// 0 1 0 2 0
|
||||||
|
// 3 5 0 6 4
|
||||||
|
// 0 0 P 0 0
|
||||||
|
// 4 6 0 5 3
|
||||||
|
// 0 2 0 1 0
|
||||||
|
for (int dx = -1; dx <= 1; dx += 2) { // pixels marked 5 or 6 in above example. Distance to P is sqrt(2) => weighting is 0.70710678f
|
||||||
|
if (bitmapBads.get(col + dx, row - 1) || bitmapBads.get(col - dx, row + 1)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const float dirwt = 0.70710678f / (fabsf(rawData[row - 1][col + dx] - rawData[row + 1][col - dx]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row - 1][col + dx] + rawData[row + 1][col - dx]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int dx = -1; dx <= 1; dx += 2) { // pixels marked 1 or 2 on above example. Distance to P is sqrt(5) => weighting is 0.44721359f
|
||||||
|
if (bitmapBads.get(col + dx, row - 2) || bitmapBads.get(col - dx, row + 2)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const float dirwt = 0.44721359f / (fabsf(rawData[row - 2][col + dx] - rawData[row + 2][col - dx]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row - 2][col + dx] + rawData[row + 2][col - dx]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int dx = -2; dx <= 2; dx += 4) { // pixels marked 3 or 4 on above example. Distance to P is sqrt(5) => weighting is 0.44721359f
|
||||||
|
if (bitmapBads.get(col + dx, row - 1) || bitmapBads.get(col - dx, row + 1)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const float dirwt = 0.44721359f / (fabsf(rawData[row - 1][col + dx] - rawData[row + 1][col - dx]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row - 1][col + dx] + rawData[row + 1][col - dx]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// this is a member of a 2x2 square of green pixels
|
||||||
|
// For these the following pixels will be used for interpolation. Pixel to be interpolated is at position P in the example.
|
||||||
|
// Pairs of pixels used in this step are numbered. A pair will be used if none of the pixels of the pair is marked bad
|
||||||
|
// 0 means, the pixel has a different color and will not be used
|
||||||
|
// 1 0 0 3
|
||||||
|
// 0 P 2 0
|
||||||
|
// 0 2 1 0
|
||||||
|
// 3 0 0 0
|
||||||
|
|
||||||
|
// pixels marked 1 in above example. Distance to P is sqrt(2) => weighting is 0.70710678f
|
||||||
|
const int offset1 = ri->XTRANSFC(row - 1, col - 1) == ri->XTRANSFC(row + 1, col + 1) ? 1 : -1;
|
||||||
|
|
||||||
|
if (!(bitmapBads.get(col - offset1, row - 1) || bitmapBads.get(col + offset1, row + 1))) {
|
||||||
|
const float dirwt = 0.70710678f / (fabsf(rawData[row - 1][col - offset1] - rawData[row + 1][col + offset1]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row - 1][col - offset1] + rawData[row + 1][col + offset1]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// pixels marked 2 in above example. Distance to P is 1 => weighting is 1.f
|
||||||
|
int offsety = ri->XTRANSFC(row - 1, col) != 1 ? 1 : -1;
|
||||||
|
int offsetx = offset1 * offsety;
|
||||||
|
|
||||||
|
if (!(bitmapBads.get(col + offsetx, row) || bitmapBads.get(col, row + offsety))) {
|
||||||
|
const float dirwt = 1.f / (fabsf(rawData[row][col + offsetx] - rawData[row + offsety][col]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row][col + offsetx] + rawData[row + offsety][col]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int offsety2 = -offsety;
|
||||||
|
const int offsetx2 = -offsetx;
|
||||||
|
offsetx *= 2;
|
||||||
|
offsety *= 2;
|
||||||
|
|
||||||
|
// pixels marked 3 in above example. Distance to P is sqrt(5) => weighting is 0.44721359f
|
||||||
|
if (!(bitmapBads.get(col + offsetx, row + offsety2) || bitmapBads.get(col + offsetx2, row + offsety))) {
|
||||||
|
const float dirwt = 0.44721359f / (fabsf(rawData[row + offsety2][col + offsetx] - rawData[row + offsety][col + offsetx2]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row + offsety2][col + offsetx] + rawData[row + offsety][col + offsetx2]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// red and blue channel.
|
||||||
|
// Each red or blue pixel has exactly one neighbor of same color in distance 2 and four neighbors of same color which can be reached by a move of a knight in chess.
|
||||||
|
// For the distance 2 pixel (marked with an X) we generate a virtual counterpart (marked with a V)
|
||||||
|
// For red and blue channel following pixels will be used for interpolation. Pixel to be interpolated is in center and marked with a P.
|
||||||
|
// Pairs of pixels used in this step are numbered except for distance 2 pixels which are marked X and V. A pair will be used if none of the pixels of the pair is marked bad
|
||||||
|
// 0 1 0 0 0 0 0 X 0 0 remaining cases are symmetric
|
||||||
|
// 0 0 0 0 2 1 0 0 0 2
|
||||||
|
// X 0 P 0 V 0 0 P 0 0
|
||||||
|
// 0 0 0 0 1 0 0 0 0 0
|
||||||
|
// 0 2 0 0 0 0 2 V 1 0
|
||||||
|
|
||||||
|
// Find two knight moves landing on a pixel of same color as the pixel to be interpolated.
|
||||||
|
// If we look at first and last row of 5x5 square, we will find exactly two knight pixels.
|
||||||
|
// Additionally we know that the column of this pixel has 1 or -1 horizontal distance to the center pixel
|
||||||
|
// When we find a knight pixel, we get its counterpart, which has distance (+-3,+-3), where the signs of distance depend on the corner of the found knight pixel.
|
||||||
|
// These pixels are marked 1 or 2 in above examples. Distance to P is sqrt(5) => weighting is 0.44721359f
|
||||||
|
// The following loop simply scans the four possible places. To keep things simple, it does not stop after finding two knight pixels, because it will not find more than two
|
||||||
|
for (int d1 = -2, offsety = 3; d1 <= 2; d1 += 4, offsety -= 6) {
|
||||||
|
for (int d2 = -1, offsetx = 3; d2 < 1; d2 += 2, offsetx -= 6) {
|
||||||
|
if (ri->XTRANSFC(row + d1, col + d2) == pixelColor) {
|
||||||
|
if (!(bitmapBads.get(col + d2, row + d1) || bitmapBads.get(col + d2 + offsetx, row + d1 + offsety))) {
|
||||||
|
const float dirwt = 0.44721359f / (fabsf(rawData[row + d1][col + d2] - rawData[row + d1 + offsety][col + d2 + offsetx]) + eps);
|
||||||
|
wtdsum += dirwt * (rawData[row + d1][col + d2] + rawData[row + d1 + offsety][col + d2 + offsetx]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// now scan for the pixel of same color in distance 2 in each direction (marked with an X in above examples).
|
||||||
|
bool distance2PixelFound = false;
|
||||||
|
int dx, dy;
|
||||||
|
|
||||||
|
// check horizontal
|
||||||
|
for (dx = -2, dy = 0; dx <= 2; dx += 4) {
|
||||||
|
if (ri->XTRANSFC(row, col + dx) == pixelColor) {
|
||||||
|
distance2PixelFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!distance2PixelFound) {
|
||||||
|
// no distance 2 pixel on horizontal, check vertical
|
||||||
|
for (dx = 0, dy = -2; dy <= 2; dy += 4) {
|
||||||
|
if (ri->XTRANSFC(row + dy, col) == pixelColor) {
|
||||||
|
distance2PixelFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// calculate the value of its virtual counterpart (marked with a V in above examples)
|
||||||
|
float virtualPixel;
|
||||||
|
|
||||||
|
if (dy == 0) {
|
||||||
|
virtualPixel = 0.5f * (rawData[row - 1][col - dx] + rawData[row + 1][col - dx]);
|
||||||
|
} else {
|
||||||
|
virtualPixel = 0.5f * (rawData[row - dy][col - 1] + rawData[row - dy][col + 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// and weight as usual. Distance to P is 2 => weighting is 0.5f
|
||||||
|
const float dirwt = 0.5f / (fabsf(virtualPixel - rawData[row + dy][col + dx]) + eps);
|
||||||
|
wtdsum += dirwt * (virtualPixel + rawData[row + dy][col + dx]);
|
||||||
|
norm += dirwt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LIKELY(norm > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelihood of this case is about 99.999%
|
||||||
|
rawData[row][col] = wtdsum / (2.f * norm); //gradient weighted average, Factor of 2.f is an optimization to avoid multiplications in former steps
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return counter; // Number of interpolated pixels.
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Search for hot or dead pixels in the image and update the map
|
||||||
|
* For each pixel compare its value to the average of similar color surrounding
|
||||||
|
* (Taken from Emil Martinec idea)
|
||||||
|
* (Optimized by Ingo Weyrich 2013 and 2015)
|
||||||
|
*/
|
||||||
|
int RawImageSource::findHotDeadPixels(PixelsMap &bpMap, const float thresh, const bool findHotPixels, const bool findDeadPixels) const
|
||||||
|
{
|
||||||
|
const float varthresh = (20.0 * (thresh / 100.0) + 1.0) / 24.f;
|
||||||
|
|
||||||
|
// allocate temporary buffer
|
||||||
|
float* cfablur = new float[H * W];
|
||||||
|
|
||||||
|
// counter for dead or hot pixels
|
||||||
|
int counter = 0;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp for schedule(dynamic,16) nowait
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int i = 2; i < H - 2; i++) {
|
||||||
|
for (int j = 2; j < W - 2; j++) {
|
||||||
|
const float temp = median(rawData[i - 2][j - 2], rawData[i - 2][j], rawData[i - 2][j + 2],
|
||||||
|
rawData[i][j - 2], rawData[i][j], rawData[i][j + 2],
|
||||||
|
rawData[i + 2][j - 2], rawData[i + 2][j], rawData[i + 2][j + 2]);
|
||||||
|
cfablur[i * W + j] = rawData[i][j] - temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// process borders. Former version calculated the median using mirrored border which does not make sense because the original pixel loses weight
|
||||||
|
// Setting the difference between pixel and median for border pixels to zero should do the job not worse then former version
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp single
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 2; ++i) {
|
||||||
|
for (int j = 0; j < W; ++j) {
|
||||||
|
cfablur[i * W + j] = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 2; i < H - 2; ++i) {
|
||||||
|
for (int j = 0; j < 2; ++j) {
|
||||||
|
cfablur[i * W + j] = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int j = W - 2; j < W; ++j) {
|
||||||
|
cfablur[i * W + j] = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = H - 2; i < H; ++i) {
|
||||||
|
for (int j = 0; j < W; ++j) {
|
||||||
|
cfablur[i * W + j] = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp barrier // barrier because of nowait clause above
|
||||||
|
|
||||||
|
#pragma omp for reduction(+:counter) schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//cfa pixel heat/death evaluation
|
||||||
|
for (int rr = 2; rr < H - 2; ++rr) {
|
||||||
|
for (int cc = 2, rrmWpcc = rr * W + 2; cc < W - 2; ++cc, ++rrmWpcc) {
|
||||||
|
//evaluate pixel for heat/death
|
||||||
|
float pixdev = cfablur[rrmWpcc];
|
||||||
|
|
||||||
|
if (pixdev == 0.f) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!findDeadPixels) && pixdev < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!findHotPixels) && pixdev > 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pixdev = fabsf(pixdev);
|
||||||
|
float hfnbrave = -pixdev;
|
||||||
|
|
||||||
|
#ifdef __SSE2__
|
||||||
|
// sum up 5*4 = 20 values using SSE
|
||||||
|
// 10 fabs function calls and 10 float additions with SSE
|
||||||
|
vfloat sum = vabsf(LVFU(cfablur[(rr - 2) * W + cc - 2])) + vabsf(LVFU(cfablur[(rr - 1) * W + cc - 2]));
|
||||||
|
sum += vabsf(LVFU(cfablur[(rr) * W + cc - 2]));
|
||||||
|
sum += vabsf(LVFU(cfablur[(rr + 1) * W + cc - 2]));
|
||||||
|
sum += vabsf(LVFU(cfablur[(rr + 2) * W + cc - 2]));
|
||||||
|
// horizontally add the values and add the result to hfnbrave
|
||||||
|
hfnbrave += vhadd(sum);
|
||||||
|
|
||||||
|
// add remaining 5 values of last column
|
||||||
|
for (int mm = rr - 2; mm <= rr + 2; ++mm) {
|
||||||
|
hfnbrave += fabsf(cfablur[mm * W + cc + 2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// 25 fabs function calls and 25 float additions without SSE
|
||||||
|
for (int mm = rr - 2; mm <= rr + 2; ++mm) {
|
||||||
|
for (int nn = cc - 2; nn <= cc + 2; ++nn) {
|
||||||
|
hfnbrave += fabsf(cfablur[mm * W + nn]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (pixdev > varthresh * hfnbrave) {
|
||||||
|
// mark the pixel as "bad"
|
||||||
|
bpMap.set(cc, rr);
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
}//end of pixel evaluation
|
||||||
|
}
|
||||||
|
}//end of parallel processing
|
||||||
|
delete [] cfablur;
|
||||||
|
return counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
int RawImageSource::findZeroPixels(PixelsMap &bpMap) const
|
||||||
|
{
|
||||||
|
int counter = 0;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for reduction(+:counter) schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int i = 0; i < H; ++i) {
|
||||||
|
for (int j = 0; j < W; ++j) {
|
||||||
|
if (ri->data[i][j] == 0.f) {
|
||||||
|
bpMap.set(j, i);
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1245,6 +1245,11 @@ Camera constants:
|
|||||||
"ranges": { "white": 64886 }
|
"ranges": { "white": 64886 }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality C
|
||||||
|
"make_model": "FUJIFILM GFX 100",
|
||||||
|
"raw_crop": [ 0, 2, 11664, 8734 ]
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality B
|
{ // Quality B
|
||||||
"make_model": "FUJIFILM GFX 50S",
|
"make_model": "FUJIFILM GFX 50S",
|
||||||
"dcraw_matrix": [ 11756,-4754,-874,-3056,11045,2305,-381,1457,6006 ], // DNGv9.9 D65
|
"dcraw_matrix": [ 11756,-4754,-874,-3056,11045,2305,-381,1457,6006 ], // DNGv9.9 D65
|
||||||
@ -1285,6 +1290,11 @@ Camera constants:
|
|||||||
"ranges": { "white": 16100 }
|
"ranges": { "white": 16100 }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality C
|
||||||
|
"make_model": "FUJIFILM X-A5",
|
||||||
|
"ranges": { "white": 16100 }
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality B
|
{ // Quality B
|
||||||
"make_model": "FUJIFILM X-A10",
|
"make_model": "FUJIFILM X-A10",
|
||||||
"dcraw_matrix": [ 11540,-4999,-991,-2949,10963,2278,-382,1049,5605 ], // DNGv9.12 D65
|
"dcraw_matrix": [ 11540,-4999,-991,-2949,10963,2278,-382,1049,5605 ], // DNGv9.12 D65
|
||||||
@ -1300,6 +1310,11 @@ Camera constants:
|
|||||||
"ranges": { "white": 16100 }
|
"ranges": { "white": 16100 }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality C
|
||||||
|
"make_model": [ "FUJIFILM X-T100" ],
|
||||||
|
"ranges": { "white": 16100 }
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality B
|
{ // Quality B
|
||||||
"make_model": "FUJIFILM X-E2S",
|
"make_model": "FUJIFILM X-E2S",
|
||||||
"dcraw_matrix": [ 11562,-5118,-961,-3022,11007,2311,-525,1569,6097 ], // DNG_v9.4 D65
|
"dcraw_matrix": [ 11562,-5118,-961,-3022,11007,2311,-525,1569,6097 ], // DNG_v9.4 D65
|
||||||
@ -1322,7 +1337,7 @@ Camera constants:
|
|||||||
},
|
},
|
||||||
|
|
||||||
{ // Quality C, only raw crop
|
{ // Quality C, only raw crop
|
||||||
"make_model": [ "FUJIFILM X-T3" ],
|
"make_model": [ "FUJIFILM X-T3", "FUJIFILM X-T30" ],
|
||||||
"raw_crop": [ 0, 5, 6252, 4176]
|
"raw_crop": [ 0, 5, 6252, 4176]
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1657,6 +1672,11 @@ Camera constants:
|
|||||||
"ranges": { "white": 4080 } // nominal 4095-4094, spread with some settings as long exposure
|
"ranges": { "white": 4080 } // nominal 4095-4094, spread with some settings as long exposure
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality C, only raw crop for highres mode
|
||||||
|
"make_model": "OLYMPUS E-M1X",
|
||||||
|
"raw_crop": [ 0, 0, 10388, 0 ] // Highres mode largest valid, full 80Mp 10400X7792, works also for non highres mode because larger width will be ignored
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality B, crop correction
|
{ // Quality B, crop correction
|
||||||
"make_model": [ "OLYMPUS E-M10", "OLYMPUS E-M10MarkII", "OLYMPUS E-M10 Mark III" ],
|
"make_model": [ "OLYMPUS E-M10", "OLYMPUS E-M10MarkII", "OLYMPUS E-M10 Mark III" ],
|
||||||
"dcraw_matrix": [ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 ],
|
"dcraw_matrix": [ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 ],
|
||||||
@ -1672,6 +1692,11 @@ Camera constants:
|
|||||||
"ranges": { "white": 4040 } // nominal 4056
|
"ranges": { "white": 4040 } // nominal 4056
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality C
|
||||||
|
"make_model": [ "OLYMPUS E-PL9" ],
|
||||||
|
"ranges": { "white": 4080 } // nominal 4093
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality B, with long exposure noise reduction White Level gets WL-BL = around 256_12-bit levels less
|
{ // Quality B, with long exposure noise reduction White Level gets WL-BL = around 256_12-bit levels less
|
||||||
"make_model": [ "OLYMPUS E-PL7", "OLYMPUS E-PL8" ],
|
"make_model": [ "OLYMPUS E-PL7", "OLYMPUS E-PL8" ],
|
||||||
"global_green_equilibration" : true,
|
"global_green_equilibration" : true,
|
||||||
@ -2359,6 +2384,11 @@ Camera constants:
|
|||||||
"ranges": { "black": 512, "white": 16300 }
|
"ranges": { "black": 512, "white": 16300 }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality C, correction for frame width
|
||||||
|
"make_model": [ "Sony DSC-RX0", "Sony DSC-RX0M2" ],
|
||||||
|
"raw_crop": [ 0, 0, -8, 0 ] // 8 rightmost columns are garbage
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality B, correction for frame width, crop modes covered
|
{ // Quality B, correction for frame width, crop modes covered
|
||||||
"make_model": [ "Sony ILCE-7RM2", "Sony DSC-RX1RM2" ],
|
"make_model": [ "Sony ILCE-7RM2", "Sony DSC-RX1RM2" ],
|
||||||
"dcraw_matrix": [ 6629,-1900,-483,-4618,12349,2550,-622,1381,6514 ], // DNG_v9.1.1 D65
|
"dcraw_matrix": [ 6629,-1900,-483,-4618,12349,2550,-622,1381,6514 ], // DNG_v9.1.1 D65
|
||||||
@ -2427,8 +2457,14 @@ Camera constants:
|
|||||||
},
|
},
|
||||||
|
|
||||||
{ // Quality C
|
{ // Quality C
|
||||||
|
"make_model": [ "Sony DSC-HX99" ],
|
||||||
|
"raw_crop": [ 0, 0, -8, 0 ] // 8 rightmost columns are garbage
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // Quality B
|
||||||
"make_model": [ "Sony DSC-R1" ],
|
"make_model": [ "Sony DSC-R1" ],
|
||||||
"raw_crop": [ 0, 0, 3924, 2608 ]
|
"raw_crop": [ 0, 0, 3924, 2608 ],
|
||||||
|
"ranges": { "white": 16368 }
|
||||||
},
|
},
|
||||||
|
|
||||||
{ // Quality A
|
{ // Quality A
|
||||||
|
@ -1509,8 +1509,8 @@ public:
|
|||||||
static const float C9 = 8.f, C8 = 15.f, C7 = 12.f, C4 = 7.f, C3 = 5.f, C2 = 5.f, C1 = 5.f;
|
static const float C9 = 8.f, C8 = 15.f, C7 = 12.f, C4 = 7.f, C3 = 5.f, C2 = 5.f, C1 = 5.f;
|
||||||
static const float H9 = 0.05f, H8 = 0.25f, H7 = 0.1f, H4 = 0.02f, H3 = 0.02f, H2 = 0.1f, H1 = 0.1f, H10 = -0.2f, H11 = -0.2f;
|
static const float H9 = 0.05f, H8 = 0.25f, H7 = 0.1f, H4 = 0.02f, H3 = 0.02f, H2 = 0.1f, H1 = 0.1f, H10 = -0.2f, H11 = -0.2f;
|
||||||
|
|
||||||
// "real" skin color : take into account a slightly usage of contrast and saturation in RT if option "skin" = 1, uses imolicit factor 1.0
|
// "real" skin color : take into account a slight usage of contrast and saturation in RT if option "skin" = 1, uses implicit factor 1.0
|
||||||
// wide area skin color, useful if not accurate colorimetry or if the user has changed hue and saturation, uses explicit facor 0.6
|
// wide area skin color, useful if not accurate colorimetry or if the user has changed hue and saturation, uses explicit factor 0.6
|
||||||
// wide area for transition, uses explicit factor 0.4
|
// wide area for transition, uses explicit factor 0.4
|
||||||
|
|
||||||
if (lum >= 85.0f) {
|
if (lum >= 85.0f) {
|
||||||
@ -1588,8 +1588,8 @@ public:
|
|||||||
static const float C9 = 8.f, C8 = 15.f, C7 = 12.f, C4 = 7.f, C3 = 5.f, C2 = 5.f, C1 = 5.f;
|
static const float C9 = 8.f, C8 = 15.f, C7 = 12.f, C4 = 7.f, C3 = 5.f, C2 = 5.f, C1 = 5.f;
|
||||||
static const float H9 = 0.05f, H8 = 0.25f, H7 = 0.1f, H4 = 0.02f, H3 = 0.02f, H2 = 0.1f, H1 = 0.1f, H10 = -0.2f, H11 = -0.2f;
|
static const float H9 = 0.05f, H8 = 0.25f, H7 = 0.1f, H4 = 0.02f, H3 = 0.02f, H2 = 0.1f, H1 = 0.1f, H10 = -0.2f, H11 = -0.2f;
|
||||||
|
|
||||||
// "real" skin color : take into account a slightly usage of contrast and saturation in RT if option "skin" = 1, uses imolicit factor 1.0
|
// "real" skin color : take into account a slight usage of contrast and saturation in RT if option "skin" = 1, uses implicit factor 1.0
|
||||||
// wide area skin color, useful if not accurate colorimetry or if the user has changed hue and saturation, uses explicit facor 0.6
|
// wide area skin color, useful if not accurate colorimetry or if the user has changed hue and saturation, uses explicit factor 0.6
|
||||||
// wide area for transition, uses explicit factor 0.4
|
// wide area for transition, uses explicit factor 0.4
|
||||||
if((b_l > -0.3f && b_r < 2.f) || basc == 0) { //range maxi skin
|
if((b_l > -0.3f && b_r < 2.f) || basc == 0) { //range maxi skin
|
||||||
if (lum >= 85.0f) {
|
if (lum >= 85.0f) {
|
||||||
@ -1704,8 +1704,8 @@ public:
|
|||||||
|
|
||||||
hue = HH;
|
hue = HH;
|
||||||
|
|
||||||
// "real" skin color : take into account a slightly usage of contrast and saturation in RT if option "skin" = 1, uses imolicit factor 1.0
|
// "real" skin color : take into account a slight usage of contrast and saturation in RT if option "skin" = 1, uses implicit factor 1.0
|
||||||
// wide area skin color, useful if not accurate colorimetry or if the user has changed hue and saturation, uses explicit facor 0.6
|
// wide area skin color, useful if not accurate colorimetry or if the user has changed hue and saturation, uses explicit factor 0.6
|
||||||
// wide area for transition, uses explicit factor 0.4
|
// wide area for transition, uses explicit factor 0.4
|
||||||
|
|
||||||
if (lum >= 85.0f) {
|
if (lum >= 85.0f) {
|
||||||
@ -1796,7 +1796,7 @@ public:
|
|||||||
static inline double huelab_to_huehsv2 (float HH)
|
static inline double huelab_to_huehsv2 (float HH)
|
||||||
{
|
{
|
||||||
//hr=translate Hue Lab value (-Pi +Pi) in approximative hr (hsv values) (0 1) [red 1/6 yellow 1/6 green 1/6 cyan 1/6 blue 1/6 magenta 1/6 ]
|
//hr=translate Hue Lab value (-Pi +Pi) in approximative hr (hsv values) (0 1) [red 1/6 yellow 1/6 green 1/6 cyan 1/6 blue 1/6 magenta 1/6 ]
|
||||||
// with multi linear correspondances (I expect there is no error !!)
|
// with multi linear correspondences (I expect there is no error !!)
|
||||||
double hr = 0.0;
|
double hr = 0.0;
|
||||||
//always put h between 0 and 1
|
//always put h between 0 and 1
|
||||||
|
|
||||||
|
@ -37,8 +37,6 @@
|
|||||||
#include "ciecam02.h"
|
#include "ciecam02.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "iccstore.h"
|
#include "iccstore.h"
|
||||||
#undef CLIPD
|
|
||||||
#define CLIPD(a) ((a)>0.0f?((a)<1.0f?(a):1.0f):0.0f)
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@ -635,33 +633,37 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou
|
|||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
// change to [0,1] range
|
// change to [0,1] range
|
||||||
shCurve.setClip(LUT_CLIP_ABOVE); // used LUT_CLIP_ABOVE, because the curve converges to 1.0 at the upper end and we don't want to exceed this value.
|
shCurve.setClip(LUT_CLIP_ABOVE); // used LUT_CLIP_ABOVE, because the curve converges to 1.0 at the upper end and we don't want to exceed this value.
|
||||||
float val = 1.f / 65535.f;
|
if (black == 0.0) {
|
||||||
float val2 = simplebasecurve (val, black, 0.015 * shcompr);
|
shCurve.makeConstant(1.f);
|
||||||
shCurve[0] = CLIPD(val2) / val;
|
} else {
|
||||||
|
const float val = 1.f / 65535.f;
|
||||||
|
shCurve[0] = simplebasecurve(val, black, 0.015 * shcompr) / val;
|
||||||
|
}
|
||||||
// gamma correction
|
// gamma correction
|
||||||
|
|
||||||
val = Color::gammatab_srgb[0] / 65535.f;
|
float val = Color::gammatab_srgb1[0];
|
||||||
|
|
||||||
// apply brightness curve
|
// apply brightness curve
|
||||||
if (brightcurve) {
|
if (brightcurve) {
|
||||||
val = brightcurve->getVal (val); // TODO: getVal(double) is very slow! Optimize with a LUTf
|
val = brightcurve->getVal(val); // TODO: getVal(double) is very slow! Optimize with a LUTf
|
||||||
}
|
}
|
||||||
|
|
||||||
// store result in a temporary array
|
// store result in a temporary array
|
||||||
dcurve[0] = CLIPD(val);
|
dcurve[0] = LIM01<float>(val);
|
||||||
|
|
||||||
for (int i = 1; i < 0x10000; i++) {
|
for (int i = 1; i < 0x10000; i++) {
|
||||||
float val = i / 65535.f;
|
|
||||||
|
|
||||||
float val2 = simplebasecurve (val, black, 0.015 * shcompr);
|
if (black != 0.0) {
|
||||||
shCurve[i] = val2 / val;
|
const float val = i / 65535.f;
|
||||||
|
shCurve[i] = simplebasecurve(val, black, 0.015 * shcompr) / val;
|
||||||
|
}
|
||||||
|
|
||||||
// gamma correction
|
// gamma correction
|
||||||
val = Color::gammatab_srgb[i] / 65535.f;
|
float val = Color::gammatab_srgb1[i];
|
||||||
|
|
||||||
// apply brightness curve
|
// apply brightness curve
|
||||||
if (brightcurve) {
|
if (brightcurve) {
|
||||||
val = CLIPD(brightcurve->getVal (val)); // TODO: getVal(double) is very slow! Optimize with a LUTf
|
val = LIM01<float>(brightcurve->getVal (val)); // TODO: getVal(double) is very slow! Optimize with a LUTf
|
||||||
}
|
}
|
||||||
|
|
||||||
// store result in a temporary array
|
// store result in a temporary array
|
||||||
@ -849,7 +851,7 @@ void CurveFactory::complexLCurve (double br, double contr, const std::vector<dou
|
|||||||
val = brightcurve.getVal (val);
|
val = brightcurve.getVal (val);
|
||||||
|
|
||||||
// store result in a temporary array
|
// store result in a temporary array
|
||||||
outCurve[i] = CLIPD(val);
|
outCurve[i] = LIM01<float>(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
#if (__GNUC__ >= 6)
|
#if (__GNUC__ >= 6)
|
||||||
#pragma GCC diagnostic ignored "-Wmisleading-indentation"
|
#pragma GCC diagnostic ignored "-Wmisleading-indentation"
|
||||||
#endif
|
#endif
|
||||||
|
#if (__GNUC__ >= 9)
|
||||||
|
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*RT*/#include <glib.h>
|
/*RT*/#include <glib.h>
|
||||||
@ -2504,11 +2507,19 @@ void CLASS unpacked_load_raw()
|
|||||||
|
|
||||||
while (1 << ++bits < maximum);
|
while (1 << ++bits < maximum);
|
||||||
read_shorts (raw_image, raw_width*raw_height);
|
read_shorts (raw_image, raw_width*raw_height);
|
||||||
|
if (load_flags) {
|
||||||
for (row=0; row < raw_height; row++)
|
for (row=0; row < raw_height; row++)
|
||||||
for (col=0; col < raw_width; col++)
|
for (col=0; col < raw_width; col++)
|
||||||
if ((RAW(row,col) >>= load_flags) >> bits
|
if ((RAW(row,col) >>= load_flags) >> bits
|
||||||
&& (unsigned) (row-top_margin) < height
|
&& (unsigned) (row-top_margin) < height
|
||||||
&& (unsigned) (col-left_margin) < width) derror();
|
&& (unsigned) (col-left_margin) < width) derror();
|
||||||
|
} else if (bits < 16) {
|
||||||
|
for (row=0; row < raw_height; row++)
|
||||||
|
for (col=0; col < raw_width; col++)
|
||||||
|
if (RAW(row,col) >> bits
|
||||||
|
&& (unsigned) (row-top_margin) < height
|
||||||
|
&& (unsigned) (col-left_margin) < width) derror();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -9279,6 +9290,8 @@ void CLASS identify()
|
|||||||
apply_tiff();
|
apply_tiff();
|
||||||
if (!strcmp(model, "X-T3")) {
|
if (!strcmp(model, "X-T3")) {
|
||||||
height = raw_height - 2;
|
height = raw_height - 2;
|
||||||
|
} else if (!strcmp(model, "GFX 100")) {
|
||||||
|
load_flags = 0;
|
||||||
}
|
}
|
||||||
if (!load_raw) {
|
if (!load_raw) {
|
||||||
load_raw = &CLASS unpacked_load_raw;
|
load_raw = &CLASS unpacked_load_raw;
|
||||||
|
@ -1206,10 +1206,10 @@ void RawImageSource::igv_interpolate(int winw, int winh)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (; col < width; col++, indx += 2) {
|
for (; col < width; col++, indx += 2) {
|
||||||
dest1[indx >> 1] = CLIP(rawData[row][col]); //rawData = RT datas
|
dest1[indx >> 1] = CLIP(rawData[row][col]); //rawData = RT data
|
||||||
col++;
|
col++;
|
||||||
if(col < width)
|
if(col < width)
|
||||||
dest2[indx >> 1] = CLIP(rawData[row][col]); //rawData = RT datas
|
dest2[indx >> 1] = CLIP(rawData[row][col]); //rawData = RT data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1561,7 +1561,7 @@ void RawImageSource::igv_interpolate(int winw, int winh)
|
|||||||
for (int row = 0; row < height - 0; row++)
|
for (int row = 0; row < height - 0; row++)
|
||||||
for (int col = 0, indx = row * width + col; col < width - 0; col++, indx++) {
|
for (int col = 0, indx = row * width + col; col < width - 0; col++, indx++) {
|
||||||
int c = FC(row, col);
|
int c = FC(row, col);
|
||||||
rgb[c][indx] = CLIP(rawData[row][col]); //rawData = RT datas
|
rgb[c][indx] = CLIP(rawData[row][col]); //rawData = RT data
|
||||||
}
|
}
|
||||||
|
|
||||||
// border_interpolate2(7, rgb);
|
// border_interpolate2(7, rgb);
|
||||||
|
@ -235,7 +235,7 @@ void dfInfo::updateBadPixelList( RawImage *df )
|
|||||||
df->data[row + 2][col - 2] + df->data[row + 2][col] + df->data[row + 2][col + 2]);
|
df->data[row + 2][col - 2] + df->data[row + 2][col] + df->data[row + 2][col + 2]);
|
||||||
|
|
||||||
if( df->data[row][col] > m * threshold ) {
|
if( df->data[row][col] > m * threshold ) {
|
||||||
badPixelsThread.push_back( badPix(col, row) );
|
badPixelsThread.emplace_back(col, row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ void dfInfo::updateBadPixelList( RawImage *df )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( df->data[row][3 * col] > m[0]*threshold || df->data[row][3 * col + 1] > m[1]*threshold || df->data[row][3 * col + 2] > m[2]*threshold) {
|
if( df->data[row][3 * col] > m[0]*threshold || df->data[row][3 * col + 1] > m[1]*threshold || df->data[row][3 * col + 2] > m[2]*threshold) {
|
||||||
badPixels.push_back( badPix(col, row) );
|
badPixels.emplace_back(col, row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,8 +270,11 @@ void dfInfo::updateBadPixelList( RawImage *df )
|
|||||||
|
|
||||||
// ************************* class DFManager *********************************
|
// ************************* class DFManager *********************************
|
||||||
|
|
||||||
void DFManager::init( Glib::ustring pathname )
|
void DFManager::init(const Glib::ustring& pathname)
|
||||||
{
|
{
|
||||||
|
if (pathname.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
std::vector<Glib::ustring> names;
|
std::vector<Glib::ustring> names;
|
||||||
|
|
||||||
auto dir = Gio::File::create_for_path (pathname);
|
auto dir = Gio::File::create_for_path (pathname);
|
||||||
@ -563,12 +566,12 @@ int DFManager::scanBadPixelsFile( Glib::ustring filename )
|
|||||||
if( numparms == 1 ) { // only one number in first line means, that this is the offset.
|
if( numparms == 1 ) { // only one number in first line means, that this is the offset.
|
||||||
offset = x;
|
offset = x;
|
||||||
} else if(numparms == 2) {
|
} else if(numparms == 2) {
|
||||||
bp.push_back( badPix(x + offset, y + offset) );
|
bp.emplace_back(x + offset, y + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
while( fgets(line, sizeof(line), file ) ) {
|
while( fgets(line, sizeof(line), file ) ) {
|
||||||
if( sscanf(line, "%d %d", &x, &y) == 2 ) {
|
if( sscanf(line, "%d %d", &x, &y) == 2 ) {
|
||||||
bp.push_back( badPix(x + offset, y + offset) );
|
bp.emplace_back(x + offset, y + offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -589,7 +592,7 @@ std::vector<badPix> *DFManager::getBadPixels ( const std::string &mak, const std
|
|||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
if( !serial.empty() ) {
|
if( !serial.empty() ) {
|
||||||
// search with sreial number first
|
// search with serial number first
|
||||||
std::ostringstream s;
|
std::ostringstream s;
|
||||||
s << mak << " " << mod << " " << serial;
|
s << mak << " " << mod << " " << serial;
|
||||||
iter = bpList.find( s.str() );
|
iter = bpList.find( s.str() );
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <glibmm/ustring.h>
|
#include <glibmm/ustring.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include "pixelsmap.h"
|
||||||
#include "rawimage.h"
|
#include "rawimage.h"
|
||||||
|
|
||||||
namespace rtengine
|
namespace rtengine
|
||||||
@ -77,7 +78,7 @@ protected:
|
|||||||
class DFManager
|
class DFManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void init( Glib::ustring pathname );
|
void init(const Glib::ustring &pathname);
|
||||||
Glib::ustring getPathname()
|
Glib::ustring getPathname()
|
||||||
{
|
{
|
||||||
return currentPath;
|
return currentPath;
|
||||||
|
@ -415,7 +415,7 @@ void RawImageSource::eahd_demosaic ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// finish H-2th and H-1th row, homogenity value is still valailable
|
// finish H-2th and H-1th row, homogeneity value is still available
|
||||||
for (int i = H - 1; i < H + 1; i++)
|
for (int i = H - 1; i < H + 1; i++)
|
||||||
for (int j = 0; j < W; j++) {
|
for (int j = 0; j < W; j++) {
|
||||||
int hc = homh[(i - 1) % 3][j];
|
int hc = homh[(i - 1) % 3][j];
|
||||||
|
@ -231,8 +231,11 @@ void ffInfo::updateRawImage()
|
|||||||
|
|
||||||
// ************************* class FFManager *********************************
|
// ************************* class FFManager *********************************
|
||||||
|
|
||||||
void FFManager::init( Glib::ustring pathname )
|
void FFManager::init(const Glib::ustring& pathname)
|
||||||
{
|
{
|
||||||
|
if (pathname.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
std::vector<Glib::ustring> names;
|
std::vector<Glib::ustring> names;
|
||||||
|
|
||||||
auto dir = Gio::File::create_for_path (pathname);
|
auto dir = Gio::File::create_for_path (pathname);
|
||||||
|
@ -75,7 +75,7 @@ protected:
|
|||||||
class FFManager
|
class FFManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void init( Glib::ustring pathname );
|
void init(const Glib::ustring &pathname);
|
||||||
Glib::ustring getPathname()
|
Glib::ustring getPathname()
|
||||||
{
|
{
|
||||||
return currentPath;
|
return currentPath;
|
||||||
@ -86,7 +86,6 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef std::multimap<std::string, ffInfo> ffList_t;
|
typedef std::multimap<std::string, ffInfo> ffList_t;
|
||||||
typedef std::map<std::string, std::list<badPix> > bpList_t;
|
|
||||||
ffList_t ffList;
|
ffList_t ffList;
|
||||||
bool initialized;
|
bool initialized;
|
||||||
Glib::ustring currentPath;
|
Glib::ustring currentPath;
|
||||||
|
@ -502,7 +502,11 @@ int ImageIO::loadJPEG (const Glib::ustring &fname)
|
|||||||
|
|
||||||
my_jpeg_stdio_src (&cinfo, file);
|
my_jpeg_stdio_src (&cinfo, file);
|
||||||
|
|
||||||
|
#if defined( WIN32 ) && defined( __x86_64__ ) && !defined(__clang__)
|
||||||
|
if ( __builtin_setjmp((reinterpret_cast<rt_jpeg_error_mgr*>(cinfo.src))->error_jmp_buf) == 0 ) {
|
||||||
|
#else
|
||||||
if ( setjmp((reinterpret_cast<rt_jpeg_error_mgr*>(cinfo.src))->error_jmp_buf) == 0 ) {
|
if ( setjmp((reinterpret_cast<rt_jpeg_error_mgr*>(cinfo.src))->error_jmp_buf) == 0 ) {
|
||||||
|
#endif
|
||||||
if (pl) {
|
if (pl) {
|
||||||
pl->setProgressStr ("PROGRESSBAR_LOADJPEG");
|
pl->setProgressStr ("PROGRESSBAR_LOADJPEG");
|
||||||
pl->setProgress (0.0);
|
pl->setProgress (0.0);
|
||||||
|
@ -76,7 +76,7 @@ void shadowToneCurve(const LUTf &shtonecurve, float *rtemp, float *gtemp, float
|
|||||||
|
|
||||||
//shadow tone curve
|
//shadow tone curve
|
||||||
vfloat Yv = cr * rv + cg * gv + cb * bv;
|
vfloat Yv = cr * rv + cg * gv + cb * bv;
|
||||||
vfloat tonefactorv = shtonecurve(Yv);
|
vfloat tonefactorv = shtonecurve[Yv];
|
||||||
STVF(rtemp[ti * tileSize + tj], rv * tonefactorv);
|
STVF(rtemp[ti * tileSize + tj], rv * tonefactorv);
|
||||||
STVF(gtemp[ti * tileSize + tj], gv * tonefactorv);
|
STVF(gtemp[ti * tileSize + tj], gv * tonefactorv);
|
||||||
STVF(btemp[ti * tileSize + tj], bv * tonefactorv);
|
STVF(btemp[ti * tileSize + tj], bv * tonefactorv);
|
||||||
@ -729,7 +729,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
|
|||||||
const float hue = params->colorappearance.colorh;
|
const float hue = params->colorappearance.colorh;
|
||||||
const float rstprotection = 100. - params->colorappearance.rstprotection;
|
const float rstprotection = 100. - params->colorappearance.rstprotection;
|
||||||
|
|
||||||
// extracting datas from 'params' to avoid cache flush (to be confirmed)
|
// extracting data from 'params' to avoid cache flush (to be confirmed)
|
||||||
const ColorAppearanceParams::TcMode curveMode = params->colorappearance.curveMode;
|
const ColorAppearanceParams::TcMode curveMode = params->colorappearance.curveMode;
|
||||||
const bool hasColCurve1 = bool (customColCurve1);
|
const bool hasColCurve1 = bool (customColCurve1);
|
||||||
const bool t1L = hasColCurve1 && curveMode == ColorAppearanceParams::TcMode::LIGHT;
|
const bool t1L = hasColCurve1 && curveMode == ColorAppearanceParams::TcMode::LIGHT;
|
||||||
@ -1261,8 +1261,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
|
|||||||
}
|
}
|
||||||
|
|
||||||
Qpro = Qanc * (Qq / Qold);
|
Qpro = Qanc * (Qq / Qold);
|
||||||
// Jpro = 100.f * (Qpro * Qpro) / ((4.0f / c) * (4.0f / c) * (aw + 4.0f) * (aw + 4.0f));
|
Jpro = SQR ((10.f * Qpro) / wh);
|
||||||
Jpro = Jpro * SQR (Qq / Qold);
|
|
||||||
|
|
||||||
if (Jpro < 1.f) {
|
if (Jpro < 1.f) {
|
||||||
Jpro = 1.f;
|
Jpro = 1.f;
|
||||||
@ -1342,11 +1341,8 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
|
|||||||
Qold = 0.001f;
|
Qold = 0.001f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Qpro = (float) (Qq * (coef) / 327.68f);
|
|
||||||
Qpro = Qanc * (Qq / Qold);
|
Qpro = Qanc * (Qq / Qold);
|
||||||
Jpro = Jpro * SQR (Qq / Qold);
|
Jpro = SQR ((10.f * Qpro) / wh);
|
||||||
|
|
||||||
// Jpro = 100.f * (Qpro * Qpro) / ((4.0f / c) * (4.0f / c) * (aw + 4.0f) * (aw + 4.0f));
|
|
||||||
|
|
||||||
if (t1L) { //to workaround the problem if we modify curve1-lightnees after curve2 brightness(the cat that bites its own tail!) in fact it's another type of curve only for this case
|
if (t1L) { //to workaround the problem if we modify curve1-lightnees after curve2 brightness(the cat that bites its own tail!) in fact it's another type of curve only for this case
|
||||||
coef = 2.f; //adapt Q to J approximation
|
coef = 2.f; //adapt Q to J approximation
|
||||||
@ -1668,7 +1664,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//all this treatments reduce artifacts, but can lead to slighty different results
|
//all this treatments reduce artifacts, but can lead to slightly different results
|
||||||
|
|
||||||
if (params->defringe.enabled)
|
if (params->defringe.enabled)
|
||||||
if (execsharp) {
|
if (execsharp) {
|
||||||
@ -2231,7 +2227,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
|
|||||||
const float shoulder = ((65536.0 / max (1.0f, exp_scale)) * (hlcomprthresh / 200.0)) + 0.1;
|
const float shoulder = ((65536.0 / max (1.0f, exp_scale)) * (hlcomprthresh / 200.0)) + 0.1;
|
||||||
const float hlrange = 65536.0 - shoulder;
|
const float hlrange = 65536.0 - shoulder;
|
||||||
const bool isProPhoto = (params->icm.workingProfile == "ProPhoto");
|
const bool isProPhoto = (params->icm.workingProfile == "ProPhoto");
|
||||||
// extracting datas from 'params' to avoid cache flush (to be confirmed)
|
// extracting data from 'params' to avoid cache flush (to be confirmed)
|
||||||
ToneCurveMode curveMode = params->toneCurve.curveMode;
|
ToneCurveMode curveMode = params->toneCurve.curveMode;
|
||||||
ToneCurveMode curveMode2 = params->toneCurve.curveMode2;
|
ToneCurveMode curveMode2 = params->toneCurve.curveMode2;
|
||||||
bool highlight = params->toneCurve.hrenabled;//Get the value if "highlight reconstruction" is activated
|
bool highlight = params->toneCurve.hrenabled;//Get the value if "highlight reconstruction" is activated
|
||||||
@ -2478,7 +2474,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
highlightToneCurve(hltonecurve, rtemp, gtemp, btemp, istart, tH, jstart, tW, TS, exp_scale, comp, hlrange);
|
highlightToneCurve(hltonecurve, rtemp, gtemp, btemp, istart, tH, jstart, tW, TS, exp_scale, comp, hlrange);
|
||||||
|
if (params->toneCurve.black != 0.0) {
|
||||||
shadowToneCurve(shtonecurve, rtemp, gtemp, btemp, istart, tH, jstart, tW, TS);
|
shadowToneCurve(shtonecurve, rtemp, gtemp, btemp, istart, tH, jstart, tW, TS);
|
||||||
|
}
|
||||||
|
|
||||||
if (dcpProf) {
|
if (dcpProf) {
|
||||||
dcpProf->step2ApplyTile (rtemp, gtemp, btemp, tW - jstart, tH - istart, TS, asIn);
|
dcpProf->step2ApplyTile (rtemp, gtemp, btemp, tW - jstart, tH - istart, TS, asIn);
|
||||||
|
@ -656,7 +656,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
|
|||||||
float cdfactor = 32768.f / delta;
|
float cdfactor = 32768.f / delta;
|
||||||
maxCD = -9999999.f;
|
maxCD = -9999999.f;
|
||||||
minCD = 9999999.f;
|
minCD = 9999999.f;
|
||||||
// coeff for auto "transmission" with 2 sigma #95% datas
|
// coeff for auto "transmission" with 2 sigma #95% data
|
||||||
float aza = 16300.f / (2.f * stddv);
|
float aza = 16300.f / (2.f * stddv);
|
||||||
float azb = -aza * (mean - 2.f * stddv);
|
float azb = -aza * (mean - 2.f * stddv);
|
||||||
float bza = 16300.f / (2.f * stddv);
|
float bza = 16300.f / (2.f * stddv);
|
||||||
|
@ -612,6 +612,7 @@ void ImProcFunctions::vibrance (LabImage* lab)
|
|||||||
|
|
||||||
const float fyy = Color::c1By116 * Lprov + Color::c16By116;
|
const float fyy = Color::c1By116 * Lprov + Color::c16By116;
|
||||||
const float yy_ = (Lprov > Color::epskap) ? fyy * fyy*fyy : Lprov / Color::kappaf;
|
const float yy_ = (Lprov > Color::epskap) ? fyy * fyy*fyy : Lprov / Color::kappaf;
|
||||||
|
float ChprovOld = std::numeric_limits<float>::min();
|
||||||
do {
|
do {
|
||||||
inGamut = true;
|
inGamut = true;
|
||||||
|
|
||||||
@ -625,10 +626,15 @@ void ImProcFunctions::vibrance (LabImage* lab)
|
|||||||
hhModified = false;
|
hhModified = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
aprovn = Chprov * sincosval.y;
|
aprovn = Chprov * sincosval.y;
|
||||||
bprovn = Chprov * sincosval.x;
|
bprovn = Chprov * sincosval.x;
|
||||||
|
|
||||||
|
if (Chprov == ChprovOld) { // avoid endless loop
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
ChprovOld = Chprov;
|
||||||
|
}
|
||||||
|
|
||||||
float fxx = 0.002f * aprovn + fyy;
|
float fxx = 0.002f * aprovn + fyy;
|
||||||
float fzz = fyy - 0.005f * bprovn;
|
float fzz = fyy - 0.005f * bprovn;
|
||||||
float xx_ = Color::f2xyz(fxx) * Color::D50x;
|
float xx_ = Color::f2xyz(fxx) * Color::D50x;
|
||||||
|
@ -3004,7 +3004,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit
|
|||||||
if(useChromAndHue) {
|
if(useChromAndHue) {
|
||||||
float modhue = varhue[ii][jj];
|
float modhue = varhue[ii][jj];
|
||||||
modchro = varchrom[ii * 2][jj * 2];
|
modchro = varchrom[ii * 2][jj * 2];
|
||||||
// hue chroma skin with initial lab datas
|
// hue chroma skin with initial lab data
|
||||||
scale = 1.f;
|
scale = 1.f;
|
||||||
|
|
||||||
if(skinprot > 0.f) {
|
if(skinprot > 0.f) {
|
||||||
@ -3216,7 +3216,7 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue,
|
|||||||
float LL100 = labco->L[ii * 2][jj * 2] / 327.68f;
|
float LL100 = labco->L[ii * 2][jj * 2] / 327.68f;
|
||||||
float modhue = varhue[ii][jj];
|
float modhue = varhue[ii][jj];
|
||||||
float modchro = varchrom[ii * 2][jj * 2];
|
float modchro = varchrom[ii * 2][jj * 2];
|
||||||
// hue chroma skin with initial lab datas
|
// hue chroma skin with initial lab data
|
||||||
float scale = 1.f;
|
float scale = 1.f;
|
||||||
|
|
||||||
if(skinprot > 0.f) {
|
if(skinprot > 0.f) {
|
||||||
@ -3252,7 +3252,7 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue,
|
|||||||
float modchro = varchrom[ii * 2][jj * 2];
|
float modchro = varchrom[ii * 2][jj * 2];
|
||||||
|
|
||||||
if(useSkinControl) {
|
if(useSkinControl) {
|
||||||
// hue chroma skin with initial lab datas
|
// hue chroma skin with initial lab data
|
||||||
float LL100 = labco->L[ii * 2][jj * 2] / 327.68f;
|
float LL100 = labco->L[ii * 2][jj * 2] / 327.68f;
|
||||||
float modhue = varhue[ii][jj];
|
float modhue = varhue[ii][jj];
|
||||||
|
|
||||||
|
@ -245,7 +245,11 @@ my_error_exit (j_common_ptr cinfo)
|
|||||||
|
|
||||||
j_decompress_ptr dinfo = (j_decompress_ptr)cinfo;
|
j_decompress_ptr dinfo = (j_decompress_ptr)cinfo;
|
||||||
// longjmp (((rt_jpeg_error_mgr*)(dinfo->src))->error_jmp_buf, 1);
|
// longjmp (((rt_jpeg_error_mgr*)(dinfo->src))->error_jmp_buf, 1);
|
||||||
|
#if defined( WIN32 ) && defined( __x86_64__ ) && !defined(__clang__)
|
||||||
|
__builtin_longjmp ((reinterpret_cast<rt_jpeg_error_mgr*>(dinfo->src)) ->error_jmp_buf, 1);
|
||||||
|
#else
|
||||||
longjmp ((reinterpret_cast<rt_jpeg_error_mgr*>(dinfo->src)) ->error_jmp_buf, 1);
|
longjmp ((reinterpret_cast<rt_jpeg_error_mgr*>(dinfo->src)) ->error_jmp_buf, 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,9 +18,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pipettebuffer.h"
|
#include "pipettebuffer.h"
|
||||||
#include "../rtgui/editcallbacks.h"
|
|
||||||
#include "imagefloat.h"
|
#include "imagefloat.h"
|
||||||
|
|
||||||
|
#include "../rtgui/editcallbacks.h"
|
||||||
|
|
||||||
namespace rtengine
|
namespace rtengine
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -16,13 +16,16 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#ifndef _PIPETTEBUFFER_H_
|
#pragma once
|
||||||
#define _PIPETTEBUFFER_H_
|
|
||||||
|
|
||||||
#include "../rtgui/editbuffer.h"
|
|
||||||
#include "array2D.h"
|
#include "array2D.h"
|
||||||
#include "iimage.h"
|
|
||||||
#include "coord.h"
|
#include "coord.h"
|
||||||
|
#include "iimage.h"
|
||||||
|
|
||||||
|
class EditDataProvider;
|
||||||
|
class EditSubscriber;
|
||||||
|
|
||||||
|
enum EditUniqueID : int;
|
||||||
|
|
||||||
namespace rtengine
|
namespace rtengine
|
||||||
{
|
{
|
||||||
@ -90,9 +93,7 @@ public:
|
|||||||
bool bufferCreated();
|
bool bufferCreated();
|
||||||
|
|
||||||
// get the pipette values
|
// get the pipette values
|
||||||
void getPipetteData(int x, int y, const int squareSize);
|
void getPipetteData(int x, int y, int squareSize);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
99
rtengine/pixelsmap.h
Normal file
99
rtengine/pixelsmap.h
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of RawTherapee.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2004-2019 Gabor Horvath <hgabor@rawtherapee.com>
|
||||||
|
*
|
||||||
|
* RawTherapee is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* RawTherapee is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstring>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "noncopyable.h"
|
||||||
|
|
||||||
|
namespace rtengine
|
||||||
|
{
|
||||||
|
|
||||||
|
struct badPix {
|
||||||
|
uint16_t x;
|
||||||
|
uint16_t y;
|
||||||
|
badPix(uint16_t xc, uint16_t yc): x(xc), y(yc) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class PixelsMap :
|
||||||
|
public NonCopyable
|
||||||
|
{
|
||||||
|
int w; // line width in base_t units
|
||||||
|
int h; // height
|
||||||
|
typedef unsigned long base_t;
|
||||||
|
static constexpr size_t base_t_size = sizeof(base_t);
|
||||||
|
base_t *pm;
|
||||||
|
|
||||||
|
public:
|
||||||
|
PixelsMap(int width, int height)
|
||||||
|
: w((width / (base_t_size * 8)) + 1), h(height), pm(new base_t[h * w])
|
||||||
|
{
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
~PixelsMap()
|
||||||
|
{
|
||||||
|
delete [] pm;
|
||||||
|
}
|
||||||
|
int width() const
|
||||||
|
{
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
int height() const
|
||||||
|
{
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if a pixel is set returns true
|
||||||
|
bool get(int x, int y) const
|
||||||
|
{
|
||||||
|
return (pm[y * w + x / (base_t_size * 8)] & (base_t)1 << (x % (base_t_size * 8))) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set a pixel
|
||||||
|
void set(int x, int y)
|
||||||
|
{
|
||||||
|
pm[y * w + x / (base_t_size * 8)] |= (base_t)1 << (x % (base_t_size * 8)) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set pixels from a list
|
||||||
|
int set(const std::vector<badPix>& bp)
|
||||||
|
{
|
||||||
|
for (const auto& bad_pix : bp) {
|
||||||
|
set(bad_pix.x, bad_pix.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bp.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
std::memset(pm, 0, h * w * base_t_size);
|
||||||
|
}
|
||||||
|
// return 0 if at least one pixel in the word(base_t) is set, otherwise return the number of pixels to skip to the next word base_t
|
||||||
|
int skipIfZero(int x, int y) const
|
||||||
|
{
|
||||||
|
return pm[y * w + x / (base_t_size * 8)] == 0 ? base_t_size * 8 - x % (base_t_size * 8) : 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -2770,23 +2770,23 @@ ProcParams::ProcParams()
|
|||||||
|
|
||||||
void ProcParams::setDefaults()
|
void ProcParams::setDefaults()
|
||||||
{
|
{
|
||||||
toneCurve = ToneCurveParams();
|
toneCurve = {};
|
||||||
|
|
||||||
labCurve = LCurveParams();
|
labCurve = {};
|
||||||
|
|
||||||
rgbCurves = RGBCurvesParams();
|
rgbCurves = {};
|
||||||
|
|
||||||
localContrast = LocalContrastParams();
|
localContrast = {};
|
||||||
|
|
||||||
colorToning = ColorToningParams();
|
colorToning = {};
|
||||||
|
|
||||||
sharpenEdge = SharpenEdgeParams();
|
sharpenEdge = {};
|
||||||
|
|
||||||
sharpenMicro = SharpenMicroParams();
|
sharpenMicro = {};
|
||||||
|
|
||||||
sharpening = SharpeningParams();
|
sharpening = {};
|
||||||
|
|
||||||
prsharpening = SharpeningParams();
|
prsharpening = {};
|
||||||
prsharpening.contrast = 15.0;
|
prsharpening.contrast = 15.0;
|
||||||
prsharpening.method = "rld";
|
prsharpening.method = "rld";
|
||||||
prsharpening.deconvamount = 100;
|
prsharpening.deconvamount = 100;
|
||||||
@ -2794,69 +2794,69 @@ void ProcParams::setDefaults()
|
|||||||
prsharpening.deconviter = 100;
|
prsharpening.deconviter = 100;
|
||||||
prsharpening.deconvdamping = 0;
|
prsharpening.deconvdamping = 0;
|
||||||
|
|
||||||
vibrance = VibranceParams();
|
vibrance = {};
|
||||||
|
|
||||||
wb = WBParams();
|
wb = {};
|
||||||
|
|
||||||
colorappearance = ColorAppearanceParams();
|
colorappearance = {};
|
||||||
|
|
||||||
defringe = DefringeParams();
|
defringe = {};
|
||||||
|
|
||||||
impulseDenoise = ImpulseDenoiseParams();
|
impulseDenoise = {};
|
||||||
|
|
||||||
dirpyrDenoise = DirPyrDenoiseParams();
|
dirpyrDenoise = {};
|
||||||
|
|
||||||
epd = EPDParams();
|
epd = {};
|
||||||
|
|
||||||
fattal = FattalToneMappingParams();
|
fattal = {};
|
||||||
|
|
||||||
sh = SHParams();
|
sh = {};
|
||||||
|
|
||||||
crop = CropParams();
|
crop = {};
|
||||||
|
|
||||||
coarse = CoarseTransformParams();
|
coarse = {};
|
||||||
|
|
||||||
commonTrans = CommonTransformParams();
|
commonTrans = {};
|
||||||
|
|
||||||
rotate = RotateParams();
|
rotate = {};
|
||||||
|
|
||||||
distortion = DistortionParams();
|
distortion = {};
|
||||||
|
|
||||||
lensProf = LensProfParams();
|
lensProf = {};
|
||||||
|
|
||||||
perspective = PerspectiveParams();
|
perspective = {};
|
||||||
|
|
||||||
gradient = GradientParams();
|
gradient = {};
|
||||||
|
|
||||||
pcvignette = PCVignetteParams();
|
pcvignette = {};
|
||||||
|
|
||||||
vignetting = VignettingParams();
|
vignetting = {};
|
||||||
|
|
||||||
chmixer = ChannelMixerParams();
|
chmixer = {};
|
||||||
|
|
||||||
blackwhite = BlackWhiteParams();
|
blackwhite = {};
|
||||||
|
|
||||||
cacorrection = CACorrParams();
|
cacorrection = {};
|
||||||
|
|
||||||
resize = ResizeParams();
|
resize = {};
|
||||||
|
|
||||||
icm = ColorManagementParams();
|
icm = {};
|
||||||
|
|
||||||
wavelet = WaveletParams();
|
wavelet = {};
|
||||||
|
|
||||||
dirpyrequalizer = DirPyrEqualizerParams();
|
dirpyrequalizer = {};
|
||||||
|
|
||||||
hsvequalizer = HSVEqualizerParams();
|
hsvequalizer = {};
|
||||||
|
|
||||||
filmSimulation = FilmSimulationParams();
|
filmSimulation = {};
|
||||||
|
|
||||||
softlight = SoftLightParams();
|
softlight = {};
|
||||||
|
|
||||||
dehaze = DehazeParams();
|
dehaze = {};
|
||||||
|
|
||||||
raw = RAWParams();
|
raw = {};
|
||||||
|
|
||||||
metadata = MetaDataParams();
|
metadata = {};
|
||||||
exif.clear();
|
exif.clear();
|
||||||
iptc.clear();
|
iptc.clear();
|
||||||
|
|
||||||
@ -4007,7 +4007,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
|||||||
if (ppVersion >= 346) {
|
if (ppVersion >= 346) {
|
||||||
assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", pedited, sharpenMicro.uniformity, pedited->sharpenMicro.uniformity);
|
assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", pedited, sharpenMicro.uniformity, pedited->sharpenMicro.uniformity);
|
||||||
} else {
|
} else {
|
||||||
double temp;
|
double temp = 50.0;
|
||||||
assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", pedited, temp, pedited->sharpenMicro.uniformity);
|
assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", pedited, temp, pedited->sharpenMicro.uniformity);
|
||||||
sharpenMicro.uniformity = temp / 10;
|
sharpenMicro.uniformity = temp / 10;
|
||||||
}
|
}
|
||||||
|
@ -767,7 +767,7 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage)
|
|||||||
this->data[row][col] = image[row * width + col][0];
|
this->data[row][col] = image[row * width + col][0];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(get_maker() == "Sigma" && dng_version) { // Hack to prevent sigma dng files from crashing
|
if((get_maker() == "Sigma" || get_maker() == "Pentax" || get_maker() == "Sony") && dng_version) { // Hack to prevent sigma dng files and dng files from PixelShift2DNG from crashing
|
||||||
height -= top_margin;
|
height -= top_margin;
|
||||||
width -= left_margin;
|
width -= left_margin;
|
||||||
}
|
}
|
||||||
|
@ -25,82 +25,10 @@
|
|||||||
|
|
||||||
#include "dcraw.h"
|
#include "dcraw.h"
|
||||||
#include "imageformat.h"
|
#include "imageformat.h"
|
||||||
#include "noncopyable.h"
|
|
||||||
|
|
||||||
namespace rtengine
|
namespace rtengine
|
||||||
{
|
{
|
||||||
|
|
||||||
struct badPix {
|
|
||||||
uint16_t x;
|
|
||||||
uint16_t y;
|
|
||||||
badPix( uint16_t xc, uint16_t yc ): x(xc), y(yc) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
class PixelsMap :
|
|
||||||
public NonCopyable
|
|
||||||
{
|
|
||||||
int w; // line width in base_t units
|
|
||||||
int h; // height
|
|
||||||
typedef unsigned long base_t;
|
|
||||||
static const size_t base_t_size = sizeof(base_t);
|
|
||||||
base_t *pm;
|
|
||||||
|
|
||||||
public:
|
|
||||||
PixelsMap(int width, int height )
|
|
||||||
: h(height)
|
|
||||||
{
|
|
||||||
w = (width / (base_t_size * 8)) + 1;
|
|
||||||
pm = new base_t [h * w ];
|
|
||||||
memset(pm, 0, h * w * base_t_size );
|
|
||||||
}
|
|
||||||
|
|
||||||
~PixelsMap()
|
|
||||||
{
|
|
||||||
delete [] pm;
|
|
||||||
}
|
|
||||||
int width() const
|
|
||||||
{
|
|
||||||
return w;
|
|
||||||
}
|
|
||||||
int height() const
|
|
||||||
{
|
|
||||||
return h;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if a pixel is set returns true
|
|
||||||
bool get(int x, int y)
|
|
||||||
{
|
|
||||||
return (pm[y * w + x / (base_t_size * 8) ] & (base_t)1 << (x % (base_t_size * 8)) ) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set a pixel
|
|
||||||
void set(int x, int y)
|
|
||||||
{
|
|
||||||
pm[y * w + x / (base_t_size * 8) ] |= (base_t)1 << (x % (base_t_size * 8)) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set pixels from a list
|
|
||||||
int set( std::vector<badPix> &bp)
|
|
||||||
{
|
|
||||||
for(std::vector<badPix>::iterator iter = bp.begin(); iter != bp.end(); ++iter) {
|
|
||||||
set( iter->x, iter->y);
|
|
||||||
}
|
|
||||||
|
|
||||||
return bp.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
memset(pm, 0, h * w * base_t_size );
|
|
||||||
}
|
|
||||||
// return 0 if at least one pixel in the word(base_t) is set, otherwise return the number of pixels to skip to the next word base_t
|
|
||||||
int skipIfZero(int x, int y)
|
|
||||||
{
|
|
||||||
return pm[y * w + x / (base_t_size * 8) ] == 0 ? base_t_size * 8 - x % (base_t_size * 8) : 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class RawImage: public DCraw
|
class RawImage: public DCraw
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -930,540 +930,6 @@ void RawImageSource::convertColorSpace(Imagefloat* image, const ColorManagementP
|
|||||||
colorSpaceConversion (image, cmp, wb, pre_mul, embProfile, camProfile, imatrices.xyz_cam, (static_cast<const FramesData*>(getMetaData()))->getCamera());
|
colorSpaceConversion (image, cmp, wb, pre_mul, embProfile, camProfile, imatrices.xyz_cam, (static_cast<const FramesData*>(getMetaData()))->getCamera());
|
||||||
}
|
}
|
||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
|
|
||||||
/* interpolateBadPixelsBayer: correct raw pixels looking at the bitmap
|
|
||||||
* takes into consideration if there are multiple bad pixels in the neighbourhood
|
|
||||||
*/
|
|
||||||
int RawImageSource::interpolateBadPixelsBayer( PixelsMap &bitmapBads, array2D<float> &rawData )
|
|
||||||
{
|
|
||||||
static const float eps = 1.f;
|
|
||||||
int counter = 0;
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp parallel for reduction(+:counter) schedule(dynamic,16)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for( int row = 2; row < H - 2; row++ ) {
|
|
||||||
for(int col = 2; col < W - 2; col++ ) {
|
|
||||||
int sk = bitmapBads.skipIfZero(col, row); //optimization for a stripe all zero
|
|
||||||
|
|
||||||
if( sk ) {
|
|
||||||
col += sk - 1; //-1 is because of col++ in cycle
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!bitmapBads.get(col, row)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float wtdsum = 0.f, norm = 0.f;
|
|
||||||
|
|
||||||
// diagonal interpolation
|
|
||||||
if(FC(row, col) == 1) {
|
|
||||||
// green channel. We can use closer pixels than for red or blue channel. Distance to centre pixel is sqrt(2) => weighting is 0.70710678
|
|
||||||
// For green channel following pixels will be used for interpolation. Pixel to be interpolated is in centre.
|
|
||||||
// 1 means that pixel is used in this step, if itself and his counterpart are not marked bad
|
|
||||||
// 0 0 0 0 0
|
|
||||||
// 0 1 0 1 0
|
|
||||||
// 0 0 0 0 0
|
|
||||||
// 0 1 0 1 0
|
|
||||||
// 0 0 0 0 0
|
|
||||||
for( int dx = -1; dx <= 1; dx += 2) {
|
|
||||||
if( bitmapBads.get(col + dx, row - 1) || bitmapBads.get(col - dx, row + 1)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float dirwt = 0.70710678f / ( fabsf( rawData[row - 1][col + dx] - rawData[row + 1][col - dx]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row - 1][col + dx] + rawData[row + 1][col - dx]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// red and blue channel. Distance to centre pixel is sqrt(8) => weighting is 0.35355339
|
|
||||||
// For red and blue channel following pixels will be used for interpolation. Pixel to be interpolated is in centre.
|
|
||||||
// 1 means that pixel is used in this step, if itself and his counterpart are not marked bad
|
|
||||||
// 1 0 0 0 1
|
|
||||||
// 0 0 0 0 0
|
|
||||||
// 0 0 0 0 0
|
|
||||||
// 0 0 0 0 0
|
|
||||||
// 1 0 0 0 1
|
|
||||||
for( int dx = -2; dx <= 2; dx += 4) {
|
|
||||||
if( bitmapBads.get(col + dx, row - 2) || bitmapBads.get(col - dx, row + 2)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float dirwt = 0.35355339f / ( fabsf( rawData[row - 2][col + dx] - rawData[row + 2][col - dx]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row - 2][col + dx] + rawData[row + 2][col - dx]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// channel independent. Distance to centre pixel is 2 => weighting is 0.5
|
|
||||||
// Additionally for all channel following pixels will be used for interpolation. Pixel to be interpolated is in centre.
|
|
||||||
// 1 means that pixel is used in this step, if itself and his counterpart are not marked bad
|
|
||||||
// 0 0 1 0 0
|
|
||||||
// 0 0 0 0 0
|
|
||||||
// 1 0 0 0 1
|
|
||||||
// 0 0 0 0 0
|
|
||||||
// 0 0 1 0 0
|
|
||||||
|
|
||||||
// horizontal interpolation
|
|
||||||
if(!(bitmapBads.get(col - 2, row) || bitmapBads.get(col + 2, row))) {
|
|
||||||
float dirwt = 0.5f / ( fabsf( rawData[row][col - 2] - rawData[row][col + 2]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row][col - 2] + rawData[row][col + 2]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// vertical interpolation
|
|
||||||
if(!(bitmapBads.get(col, row - 2) || bitmapBads.get(col, row + 2))) {
|
|
||||||
float dirwt = 0.5f / ( fabsf( rawData[row - 2][col] - rawData[row + 2][col]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row - 2][col] + rawData[row + 2][col]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LIKELY(norm > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelihood of this case is about 99.999%
|
|
||||||
rawData[row][col] = wtdsum / (2.f * norm); //gradient weighted average, Factor of 2.f is an optimization to avoid multiplications in former steps
|
|
||||||
counter++;
|
|
||||||
} else { //backup plan -- simple average. Same method for all channels. We could improve this, but it's really unlikely that this case happens
|
|
||||||
int tot = 0;
|
|
||||||
float sum = 0;
|
|
||||||
|
|
||||||
for( int dy = -2; dy <= 2; dy += 2) {
|
|
||||||
for( int dx = -2; dx <= 2; dx += 2) {
|
|
||||||
if(bitmapBads.get(col + dx, row + dy)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
sum += rawData[row + dy][col + dx];
|
|
||||||
tot++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tot > 0) {
|
|
||||||
rawData[row][col] = sum / tot;
|
|
||||||
counter ++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return counter; // Number of interpolated pixels.
|
|
||||||
}
|
|
||||||
|
|
||||||
/* interpolateBadPixels3Colours: correct raw pixels looking at the bitmap
|
|
||||||
* takes into consideration if there are multiple bad pixels in the neighbourhood
|
|
||||||
*/
|
|
||||||
int RawImageSource::interpolateBadPixelsNColours( PixelsMap &bitmapBads, const int colours )
|
|
||||||
{
|
|
||||||
static const float eps = 1.f;
|
|
||||||
int counter = 0;
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp parallel for reduction(+:counter) schedule(dynamic,16)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for( int row = 2; row < H - 2; row++ ) {
|
|
||||||
for(int col = 2; col < W - 2; col++ ) {
|
|
||||||
int sk = bitmapBads.skipIfZero(col, row); //optimization for a stripe all zero
|
|
||||||
|
|
||||||
if( sk ) {
|
|
||||||
col += sk - 1; //-1 is because of col++ in cycle
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!bitmapBads.get(col, row)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float wtdsum[colours], norm[colours];
|
|
||||||
|
|
||||||
for (int i = 0; i < colours; ++i) {
|
|
||||||
wtdsum[i] = norm[i] = 0.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
// diagonal interpolation
|
|
||||||
for( int dx = -1; dx <= 1; dx += 2) {
|
|
||||||
if( bitmapBads.get(col + dx, row - 1) || bitmapBads.get(col - dx, row + 1)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int c = 0; c < colours; c++) {
|
|
||||||
float dirwt = 0.70710678f / ( fabsf( rawData[row - 1][(col + dx) * colours + c] - rawData[row + 1][(col - dx) * colours + c]) + eps);
|
|
||||||
wtdsum[c] += dirwt * (rawData[row - 1][(col + dx) * colours + c] + rawData[row + 1][(col - dx) * colours + c]);
|
|
||||||
norm[c] += dirwt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// horizontal interpolation
|
|
||||||
if(!(bitmapBads.get(col - 1, row) || bitmapBads.get(col + 1, row))) {
|
|
||||||
for(int c = 0; c < colours; c++) {
|
|
||||||
float dirwt = 1.f / ( fabsf( rawData[row][(col - 1) * colours + c] - rawData[row][(col + 1) * colours + c]) + eps);
|
|
||||||
wtdsum[c] += dirwt * (rawData[row][(col - 1) * colours + c] + rawData[row][(col + 1) * colours + c]);
|
|
||||||
norm[c] += dirwt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vertical interpolation
|
|
||||||
if(!(bitmapBads.get(col, row - 1) || bitmapBads.get(col, row + 1))) {
|
|
||||||
for(int c = 0; c < colours; c++) {
|
|
||||||
float dirwt = 1.f / ( fabsf( rawData[row - 1][col * colours + c] - rawData[row + 1][col * colours + c]) + eps);
|
|
||||||
wtdsum[c] += dirwt * (rawData[row - 1][col * colours + c] + rawData[row + 1][col * colours + c]);
|
|
||||||
norm[c] += dirwt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LIKELY(norm[0] > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelihood of this case is about 99.999%
|
|
||||||
for(int c = 0; c < colours; c++) {
|
|
||||||
rawData[row][col * colours + c] = wtdsum[c] / (2.f * norm[c]); //gradient weighted average, Factor of 2.f is an optimization to avoid multiplications in former steps
|
|
||||||
}
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
} else { //backup plan -- simple average. Same method for all channels. We could improve this, but it's really unlikely that this case happens
|
|
||||||
int tot = 0;
|
|
||||||
float sum[colours];
|
|
||||||
|
|
||||||
for (int i = 0; i < colours; ++i) {
|
|
||||||
sum[i] = 0.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
for( int dy = -2; dy <= 2; dy += 2) {
|
|
||||||
for( int dx = -2; dx <= 2; dx += 2) {
|
|
||||||
if(bitmapBads.get(col + dx, row + dy)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int c = 0; c < colours; c++) {
|
|
||||||
sum[c] += rawData[row + dy][(col + dx) * colours + c];
|
|
||||||
}
|
|
||||||
|
|
||||||
tot++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tot > 0) {
|
|
||||||
for(int c = 0; c < colours; c++) {
|
|
||||||
rawData[row][col * colours + c] = sum[c] / tot;
|
|
||||||
}
|
|
||||||
|
|
||||||
counter ++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return counter; // Number of interpolated pixels.
|
|
||||||
}
|
|
||||||
/* interpolateBadPixelsXtrans: correct raw pixels looking at the bitmap
|
|
||||||
* takes into consideration if there are multiple bad pixels in the neighbourhood
|
|
||||||
*/
|
|
||||||
int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads )
|
|
||||||
{
|
|
||||||
static const float eps = 1.f;
|
|
||||||
int counter = 0;
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp parallel for reduction(+:counter) schedule(dynamic,16)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for( int row = 2; row < H - 2; row++ ) {
|
|
||||||
for(int col = 2; col < W - 2; col++ ) {
|
|
||||||
int skip = bitmapBads.skipIfZero(col, row); //optimization for a stripe all zero
|
|
||||||
|
|
||||||
if( skip ) {
|
|
||||||
col += skip - 1; //-1 is because of col++ in cycle
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!bitmapBads.get(col, row)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float wtdsum = 0.f, norm = 0.f;
|
|
||||||
unsigned int pixelColor = ri->XTRANSFC(row, col);
|
|
||||||
|
|
||||||
if(pixelColor == 1) {
|
|
||||||
// green channel. A green pixel can either be a solitary green pixel or a member of a 2x2 square of green pixels
|
|
||||||
if(ri->XTRANSFC(row, col - 1) == ri->XTRANSFC(row, col + 1)) {
|
|
||||||
// If left and right neighbour have same colour, then this is a solitary green pixel
|
|
||||||
// For these the following pixels will be used for interpolation. Pixel to be interpolated is in centre and marked with a P.
|
|
||||||
// Pairs of pixels used in this step are numbered. A pair will be used if none of the pixels of the pair is marked bad
|
|
||||||
// 0 means, the pixel has a different colour and will not be used
|
|
||||||
// 0 1 0 2 0
|
|
||||||
// 3 5 0 6 4
|
|
||||||
// 0 0 P 0 0
|
|
||||||
// 4 6 0 5 3
|
|
||||||
// 0 2 0 1 0
|
|
||||||
for( int dx = -1; dx <= 1; dx += 2) { // pixels marked 5 or 6 in above example. Distance to P is sqrt(2) => weighting is 0.70710678f
|
|
||||||
if( bitmapBads.get(col + dx, row - 1) || bitmapBads.get(col - dx, row + 1)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float dirwt = 0.70710678f / ( fabsf( rawData[row - 1][col + dx] - rawData[row + 1][col - dx]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row - 1][col + dx] + rawData[row + 1][col - dx]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
|
|
||||||
for( int dx = -1; dx <= 1; dx += 2) { // pixels marked 1 or 2 on above example. Distance to P is sqrt(5) => weighting is 0.44721359f
|
|
||||||
if( bitmapBads.get(col + dx, row - 2) || bitmapBads.get(col - dx, row + 2)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float dirwt = 0.44721359f / ( fabsf( rawData[row - 2][col + dx] - rawData[row + 2][col - dx]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row - 2][col + dx] + rawData[row + 2][col - dx]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
|
|
||||||
for( int dx = -2; dx <= 2; dx += 4) { // pixels marked 3 or 4 on above example. Distance to P is sqrt(5) => weighting is 0.44721359f
|
|
||||||
if( bitmapBads.get(col + dx, row - 1) || bitmapBads.get(col - dx, row + 1)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float dirwt = 0.44721359f / ( fabsf( rawData[row - 1][col + dx] - rawData[row + 1][col - dx]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row - 1][col + dx] + rawData[row + 1][col - dx]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// this is a member of a 2x2 square of green pixels
|
|
||||||
// For these the following pixels will be used for interpolation. Pixel to be interpolated is at position P in the example.
|
|
||||||
// Pairs of pixels used in this step are numbered. A pair will be used if none of the pixels of the pair is marked bad
|
|
||||||
// 0 means, the pixel has a different colour and will not be used
|
|
||||||
// 1 0 0 3
|
|
||||||
// 0 P 2 0
|
|
||||||
// 0 2 1 0
|
|
||||||
// 3 0 0 0
|
|
||||||
|
|
||||||
// pixels marked 1 in above example. Distance to P is sqrt(2) => weighting is 0.70710678f
|
|
||||||
int offset1 = ri->XTRANSFC(row - 1, col - 1) == ri->XTRANSFC(row + 1, col + 1) ? 1 : -1;
|
|
||||||
|
|
||||||
if( !(bitmapBads.get(col - offset1, row - 1) || bitmapBads.get(col + offset1, row + 1))) {
|
|
||||||
float dirwt = 0.70710678f / ( fabsf( rawData[row - 1][col - offset1] - rawData[row + 1][col + offset1]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row - 1][col - offset1] + rawData[row + 1][col + offset1]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// pixels marked 2 in above example. Distance to P is 1 => weighting is 1.f
|
|
||||||
int offsety = (ri->XTRANSFC(row - 1, col) != 1 ? 1 : -1);
|
|
||||||
int offsetx = offset1 * offsety;
|
|
||||||
|
|
||||||
if( !(bitmapBads.get(col + offsetx, row) || bitmapBads.get(col, row + offsety))) {
|
|
||||||
float dirwt = 1.f / ( fabsf( rawData[row][col + offsetx] - rawData[row + offsety][col]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row][col + offsetx] + rawData[row + offsety][col]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
|
|
||||||
int offsety2 = -offsety;
|
|
||||||
int offsetx2 = -offsetx;
|
|
||||||
offsetx *= 2;
|
|
||||||
offsety *= 2;
|
|
||||||
|
|
||||||
// pixels marked 3 in above example. Distance to P is sqrt(5) => weighting is 0.44721359f
|
|
||||||
if( !(bitmapBads.get(col + offsetx, row + offsety2) || bitmapBads.get(col + offsetx2, row + offsety))) {
|
|
||||||
float dirwt = 0.44721359f / ( fabsf( rawData[row + offsety2][col + offsetx] - rawData[row + offsety][col + offsetx2]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row + offsety2][col + offsetx] + rawData[row + offsety][col + offsetx2]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// red and blue channel.
|
|
||||||
// Each red or blue pixel has exactly one neighbour of same colour in distance 2 and four neighbours of same colour which can be reached by a move of a knight in chess.
|
|
||||||
// For the distance 2 pixel (marked with an X) we generate a virtual counterpart (marked with a V)
|
|
||||||
// For red and blue channel following pixels will be used for interpolation. Pixel to be interpolated is in centre and marked with a P.
|
|
||||||
// Pairs of pixels used in this step are numbered except for distance 2 pixels which are marked X and V. A pair will be used if none of the pixels of the pair is marked bad
|
|
||||||
// 0 1 0 0 0 0 0 X 0 0 remaining cases are symmetric
|
|
||||||
// 0 0 0 0 2 1 0 0 0 2
|
|
||||||
// X 0 P 0 V 0 0 P 0 0
|
|
||||||
// 0 0 0 0 1 0 0 0 0 0
|
|
||||||
// 0 2 0 0 0 0 2 V 1 0
|
|
||||||
|
|
||||||
// Find two knight moves landing on a pixel of same colour as the pixel to be interpolated.
|
|
||||||
// If we look at first and last row of 5x5 square, we will find exactly two knight pixels.
|
|
||||||
// Additionally we know that the column of this pixel has 1 or -1 horizontal distance to the centre pixel
|
|
||||||
// When we find a knight pixel, we get its counterpart, which has distance (+-3,+-3), where the signs of distance depend on the corner of the found knight pixel.
|
|
||||||
// These pixels are marked 1 or 2 in above examples. Distance to P is sqrt(5) => weighting is 0.44721359f
|
|
||||||
// The following loop simply scans the four possible places. To keep things simple, it does not stop after finding two knight pixels, because it will not find more than two
|
|
||||||
for(int d1 = -2, offsety = 3; d1 <= 2; d1 += 4, offsety -= 6) {
|
|
||||||
for(int d2 = -1, offsetx = 3; d2 < 1; d2 += 2, offsetx -= 6) {
|
|
||||||
if(ri->XTRANSFC(row + d1, col + d2) == pixelColor) {
|
|
||||||
if( !(bitmapBads.get(col + d2, row + d1) || bitmapBads.get(col + d2 + offsetx, row + d1 + offsety))) {
|
|
||||||
float dirwt = 0.44721359f / ( fabsf( rawData[row + d1][col + d2] - rawData[row + d1 + offsety][col + d2 + offsetx]) + eps);
|
|
||||||
wtdsum += dirwt * (rawData[row + d1][col + d2] + rawData[row + d1 + offsety][col + d2 + offsetx]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// now scan for the pixel of same colour in distance 2 in each direction (marked with an X in above examples).
|
|
||||||
bool distance2PixelFound = false;
|
|
||||||
int dx, dy;
|
|
||||||
|
|
||||||
// check horizontal
|
|
||||||
for(dx = -2, dy = 0; dx <= 2 && !distance2PixelFound; dx += 4)
|
|
||||||
if(ri->XTRANSFC(row, col + dx) == pixelColor) {
|
|
||||||
distance2PixelFound = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!distance2PixelFound)
|
|
||||||
|
|
||||||
// no distance 2 pixel on horizontal, check vertical
|
|
||||||
for(dx = 0, dy = -2; dy <= 2 && !distance2PixelFound; dy += 4)
|
|
||||||
if(ri->XTRANSFC(row + dy, col) == pixelColor) {
|
|
||||||
distance2PixelFound = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// calculate the value of its virtual counterpart (marked with a V in above examples)
|
|
||||||
float virtualPixel;
|
|
||||||
|
|
||||||
if(dy == 0) {
|
|
||||||
virtualPixel = 0.5f * (rawData[row - 1][col - dx] + rawData[row + 1][col - dx]);
|
|
||||||
} else {
|
|
||||||
virtualPixel = 0.5f * (rawData[row - dy][col - 1] + rawData[row - dy][col + 1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// and weight as usual. Distance to P is 2 => weighting is 0.5f
|
|
||||||
float dirwt = 0.5f / ( fabsf( virtualPixel - rawData[row + dy][col + dx]) + eps);
|
|
||||||
wtdsum += dirwt * (virtualPixel + rawData[row + dy][col + dx]);
|
|
||||||
norm += dirwt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LIKELY(norm > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelihood of this case is about 99.999%
|
|
||||||
rawData[row][col] = wtdsum / (2.f * norm); //gradient weighted average, Factor of 2.f is an optimization to avoid multiplications in former steps
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return counter; // Number of interpolated pixels.
|
|
||||||
}
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
|
|
||||||
/* Search for hot or dead pixels in the image and update the map
|
|
||||||
* For each pixel compare its value to the average of similar colour surrounding
|
|
||||||
* (Taken from Emil Martinec idea)
|
|
||||||
* (Optimized by Ingo Weyrich 2013 and 2015)
|
|
||||||
*/
|
|
||||||
int RawImageSource::findHotDeadPixels( PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels )
|
|
||||||
{
|
|
||||||
float varthresh = (20.0 * (thresh / 100.0) + 1.0 ) / 24.f;
|
|
||||||
|
|
||||||
// allocate temporary buffer
|
|
||||||
float* cfablur;
|
|
||||||
cfablur = (float (*)) malloc (H * W * sizeof * cfablur);
|
|
||||||
|
|
||||||
// counter for dead or hot pixels
|
|
||||||
int counter = 0;
|
|
||||||
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp parallel
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp for schedule(dynamic,16) nowait
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (int i = 2; i < H - 2; i++) {
|
|
||||||
for (int j = 2; j < W - 2; j++) {
|
|
||||||
const float& temp = median(rawData[i - 2][j - 2], rawData[i - 2][j], rawData[i - 2][j + 2],
|
|
||||||
rawData[i][j - 2], rawData[i][j], rawData[i][j + 2],
|
|
||||||
rawData[i + 2][j - 2], rawData[i + 2][j], rawData[i + 2][j + 2]);
|
|
||||||
cfablur[i * W + j] = rawData[i][j] - temp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// process borders. Former version calculated the median using mirrored border which does not make sense because the original pixel loses weight
|
|
||||||
// Setting the difference between pixel and median for border pixels to zero should do the job not worse then former version
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp single
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
for(int i = 0; i < 2; i++) {
|
|
||||||
for(int j = 0; j < W; j++) {
|
|
||||||
cfablur[i * W + j] = 0.f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 2; i < H - 2; i++) {
|
|
||||||
for(int j = 0; j < 2; j++) {
|
|
||||||
cfablur[i * W + j] = 0.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int j = W - 2; j < W; j++) {
|
|
||||||
cfablur[i * W + j] = 0.f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = H - 2; i < H; i++) {
|
|
||||||
for(int j = 0; j < W; j++) {
|
|
||||||
cfablur[i * W + j] = 0.f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp barrier // barrier because of nowait clause above
|
|
||||||
|
|
||||||
#pragma omp for reduction(+:counter) schedule(dynamic,16)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//cfa pixel heat/death evaluation
|
|
||||||
for (int rr = 2; rr < H - 2; rr++) {
|
|
||||||
int rrmWpcc = rr * W + 2;
|
|
||||||
|
|
||||||
for (int cc = 2; cc < W - 2; cc++, rrmWpcc++) {
|
|
||||||
//evaluate pixel for heat/death
|
|
||||||
float pixdev = cfablur[rrmWpcc];
|
|
||||||
|
|
||||||
if(pixdev == 0.f) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((!findDeadPixels) && pixdev < 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((!findHotPixels) && pixdev > 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
pixdev = fabsf(pixdev);
|
|
||||||
float hfnbrave = -pixdev;
|
|
||||||
|
|
||||||
#ifdef __SSE2__
|
|
||||||
// sum up 5*4 = 20 values using SSE
|
|
||||||
// 10 fabs function calls and float 10 additions with SSE
|
|
||||||
vfloat sum = vabsf(LVFU(cfablur[(rr - 2) * W + cc - 2])) + vabsf(LVFU(cfablur[(rr - 1) * W + cc - 2]));
|
|
||||||
sum += vabsf(LVFU(cfablur[(rr) * W + cc - 2]));
|
|
||||||
sum += vabsf(LVFU(cfablur[(rr + 1) * W + cc - 2]));
|
|
||||||
sum += vabsf(LVFU(cfablur[(rr + 2) * W + cc - 2]));
|
|
||||||
// horizontally add the values and add the result to hfnbrave
|
|
||||||
hfnbrave += vhadd(sum);
|
|
||||||
|
|
||||||
// add remaining 5 values of last column
|
|
||||||
for (int mm = rr - 2; mm <= rr + 2; mm++) {
|
|
||||||
hfnbrave += fabsf(cfablur[mm * W + cc + 2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
// 25 fabs function calls and 25 float additions without SSE
|
|
||||||
for (int mm = rr - 2; mm <= rr + 2; mm++) {
|
|
||||||
for (int nn = cc - 2; nn <= cc + 2; nn++) {
|
|
||||||
hfnbrave += fabsf(cfablur[mm * W + nn]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (pixdev > varthresh * hfnbrave) {
|
|
||||||
// mark the pixel as "bad"
|
|
||||||
bpMap.set(cc, rr);
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}//end of pixel evaluation
|
|
||||||
}
|
|
||||||
}//end of parallel processing
|
|
||||||
free (cfablur);
|
|
||||||
return counter;
|
|
||||||
}
|
|
||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
|
|
||||||
void RawImageSource::getFullSize (int& w, int& h, int tr)
|
void RawImageSource::getFullSize (int& w, int& h, int tr)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -1738,23 +1204,13 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
|||||||
printf( "Subtracting Darkframe:%s\n", rid->get_filename().c_str());
|
printf( "Subtracting Darkframe:%s\n", rid->get_filename().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
PixelsMap *bitmapBads = nullptr;
|
std::unique_ptr<PixelsMap> bitmapBads;
|
||||||
|
|
||||||
int totBP = 0; // Hold count of bad pixels to correct
|
int totBP = 0; // Hold count of bad pixels to correct
|
||||||
|
|
||||||
if(ri->zeroIsBad()) { // mark all pixels with value zero as bad, has to be called before FF and DF. dcraw sets this flag only for some cameras (mainly Panasonic and Leica)
|
if(ri->zeroIsBad()) { // mark all pixels with value zero as bad, has to be called before FF and DF. dcraw sets this flag only for some cameras (mainly Panasonic and Leica)
|
||||||
bitmapBads = new PixelsMap(W, H);
|
bitmapBads.reset(new PixelsMap(W, H));
|
||||||
#ifdef _OPENMP
|
totBP = findZeroPixels(*(bitmapBads.get()));
|
||||||
#pragma omp parallel for reduction(+:totBP) schedule(dynamic,16)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for(int i = 0; i < H; i++)
|
|
||||||
for(int j = 0; j < W; j++) {
|
|
||||||
if(ri->data[i][j] == 0.f) {
|
|
||||||
bitmapBads->set(j, i);
|
|
||||||
totBP++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( settings->verbose) {
|
if( settings->verbose) {
|
||||||
printf( "%d pixels with value zero marked as bad pixels\n", totBP);
|
printf( "%d pixels with value zero marked as bad pixels\n", totBP);
|
||||||
@ -1818,10 +1274,10 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
|||||||
|
|
||||||
if( bp ) {
|
if( bp ) {
|
||||||
if(!bitmapBads) {
|
if(!bitmapBads) {
|
||||||
bitmapBads = new PixelsMap(W, H);
|
bitmapBads.reset(new PixelsMap(W, H));
|
||||||
}
|
}
|
||||||
|
|
||||||
totBP += bitmapBads->set( *bp );
|
totBP += bitmapBads->set(*bp);
|
||||||
|
|
||||||
if( settings->verbose ) {
|
if( settings->verbose ) {
|
||||||
std::cout << "Correcting " << bp->size() << " pixels from .badpixels" << std::endl;
|
std::cout << "Correcting " << bp->size() << " pixels from .badpixels" << std::endl;
|
||||||
@ -1839,10 +1295,10 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
|||||||
|
|
||||||
if(bp) {
|
if(bp) {
|
||||||
if(!bitmapBads) {
|
if(!bitmapBads) {
|
||||||
bitmapBads = new PixelsMap(W, H);
|
bitmapBads.reset(new PixelsMap(W, H));
|
||||||
}
|
}
|
||||||
|
|
||||||
totBP += bitmapBads->set( *bp );
|
totBP += bitmapBads->set(*bp);
|
||||||
|
|
||||||
if( settings->verbose && !bp->empty()) {
|
if( settings->verbose && !bp->empty()) {
|
||||||
std::cout << "Correcting " << bp->size() << " hotpixels from darkframe" << std::endl;
|
std::cout << "Correcting " << bp->size() << " hotpixels from darkframe" << std::endl;
|
||||||
@ -1914,10 +1370,10 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!bitmapBads) {
|
if(!bitmapBads) {
|
||||||
bitmapBads = new PixelsMap(W, H);
|
bitmapBads.reset(new PixelsMap(W, H));
|
||||||
}
|
}
|
||||||
|
|
||||||
int nFound = findHotDeadPixels( *bitmapBads, raw.hotdeadpix_thresh, raw.hotPixelFilter, raw.deadPixelFilter );
|
int nFound = findHotDeadPixels(*(bitmapBads.get()), raw.hotdeadpix_thresh, raw.hotPixelFilter, raw.deadPixelFilter );
|
||||||
totBP += nFound;
|
totBP += nFound;
|
||||||
|
|
||||||
if( settings->verbose && nFound > 0) {
|
if( settings->verbose && nFound > 0) {
|
||||||
@ -1929,10 +1385,10 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
|||||||
PDAFLinesFilter f(ri);
|
PDAFLinesFilter f(ri);
|
||||||
|
|
||||||
if (!bitmapBads) {
|
if (!bitmapBads) {
|
||||||
bitmapBads = new PixelsMap(W, H);
|
bitmapBads.reset(new PixelsMap(W, H));
|
||||||
}
|
}
|
||||||
|
|
||||||
int n = f.mark(rawData, *bitmapBads);
|
int n = f.mark(rawData, *(bitmapBads.get()));
|
||||||
totBP += n;
|
totBP += n;
|
||||||
|
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
@ -1996,15 +1452,15 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
|||||||
if ( ri->getSensorType() == ST_BAYER ) {
|
if ( ri->getSensorType() == ST_BAYER ) {
|
||||||
if(numFrames == 4) {
|
if(numFrames == 4) {
|
||||||
for(int i = 0; i < 4; ++i) {
|
for(int i = 0; i < 4; ++i) {
|
||||||
interpolateBadPixelsBayer( *bitmapBads, *rawDataFrames[i] );
|
interpolateBadPixelsBayer(*(bitmapBads.get()), *rawDataFrames[i]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
interpolateBadPixelsBayer( *bitmapBads, rawData );
|
interpolateBadPixelsBayer(*(bitmapBads.get()), rawData);
|
||||||
}
|
}
|
||||||
} else if ( ri->getSensorType() == ST_FUJI_XTRANS ) {
|
} else if ( ri->getSensorType() == ST_FUJI_XTRANS ) {
|
||||||
interpolateBadPixelsXtrans( *bitmapBads );
|
interpolateBadPixelsXtrans(*(bitmapBads.get()));
|
||||||
} else {
|
} else {
|
||||||
interpolateBadPixelsNColours( *bitmapBads, ri->get_colors() );
|
interpolateBadPixelsNColours(*(bitmapBads.get()), ri->get_colors());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2057,10 +1513,6 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
|||||||
printf("Preprocessing: %d usec\n", t2.etime(t1));
|
printf("Preprocessing: %d usec\n", t2.etime(t1));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bitmapBads) {
|
|
||||||
delete bitmapBads;
|
|
||||||
}
|
|
||||||
|
|
||||||
rawDirty = true;
|
rawDirty = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "dcp.h"
|
#include "dcp.h"
|
||||||
#include "iimage.h"
|
#include "iimage.h"
|
||||||
#include "imagesource.h"
|
#include "imagesource.h"
|
||||||
|
#include "pixelsmap.h"
|
||||||
|
|
||||||
#define HR_SCALE 2
|
#define HR_SCALE 2
|
||||||
|
|
||||||
@ -101,7 +102,7 @@ protected:
|
|||||||
void transformRect (const PreviewProps &pp, int tran, int &sx1, int &sy1, int &width, int &height, int &fw);
|
void transformRect (const PreviewProps &pp, int tran, int &sx1, int &sy1, int &width, int &height, int &fw);
|
||||||
void transformPosition (int x, int y, int tran, int& tx, int& ty);
|
void transformPosition (int x, int y, int tran, int& tx, int& ty);
|
||||||
|
|
||||||
unsigned FC(int row, int col)
|
unsigned FC(int row, int col) const
|
||||||
{
|
{
|
||||||
return ri->FC(row, col);
|
return ri->FC(row, col);
|
||||||
}
|
}
|
||||||
@ -258,11 +259,11 @@ protected:
|
|||||||
);
|
);
|
||||||
void ddct8x8s(int isgn, float a[8][8]);
|
void ddct8x8s(int isgn, float a[8][8]);
|
||||||
|
|
||||||
int interpolateBadPixelsBayer( PixelsMap &bitmapBads, array2D<float> &rawData );
|
int interpolateBadPixelsBayer(const PixelsMap &bitmapBads, array2D<float> &rawData);
|
||||||
int interpolateBadPixelsNColours( PixelsMap &bitmapBads, const int colours );
|
int interpolateBadPixelsNColours(const PixelsMap &bitmapBads, int colours);
|
||||||
int interpolateBadPixelsXtrans( PixelsMap &bitmapBads );
|
int interpolateBadPixelsXtrans(const PixelsMap &bitmapBads);
|
||||||
int findHotDeadPixels( PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels );
|
int findHotDeadPixels(PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels) const;
|
||||||
|
int findZeroPixels(PixelsMap &bpMap) const;
|
||||||
void cfa_linedn (float linenoiselevel, bool horizontal, bool vertical, const CFALineDenoiseRowBlender &rowblender);//Emil's line denoise
|
void cfa_linedn (float linenoiselevel, bool horizontal, bool vertical, const CFALineDenoiseRowBlender &rowblender);//Emil's line denoise
|
||||||
|
|
||||||
void green_equilibrate_global (array2D<float> &rawData);
|
void green_equilibrate_global (array2D<float> &rawData);
|
||||||
|
@ -685,7 +685,7 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, eSensorType &sens
|
|||||||
int wmax = tmpw;
|
int wmax = tmpw;
|
||||||
int hmax = tmph;
|
int hmax = tmph;
|
||||||
|
|
||||||
if (ri->get_maker() == "Sigma" && ri->DNGVERSION()) { // Hack to prevent sigma dng files from crashing
|
if ((ri->get_maker() == "Sigma" || ri->get_maker() == "Pentax" || ri->get_maker() == "Sony") && ri->DNGVERSION()) { // Hack to prevent sigma dng files from crashing
|
||||||
wmax = (width - 2 - left_margin) / hskip;
|
wmax = (width - 2 - left_margin) / hskip;
|
||||||
hmax = (height - 2 - top_margin) / vskip;
|
hmax = (height - 2 - top_margin) / vskip;
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ using namespace rtengine::procparams;
|
|||||||
|
|
||||||
BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, "bayerrawexposure", M("TP_EXPOS_BLACKPOINT_LABEL"), options.prevdemo != PD_Sidecar)
|
BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, "bayerrawexposure", M("TP_EXPOS_BLACKPOINT_LABEL"), options.prevdemo != PD_Sidecar)
|
||||||
{
|
{
|
||||||
PexBlack1 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_1"), -2048, 2048, 0.1, 0)); //black level
|
PexBlack1 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_1"), -2048, 2048, 1.0, 0)); //black level
|
||||||
PexBlack1->setAdjusterListener (this);
|
PexBlack1->setAdjusterListener (this);
|
||||||
|
|
||||||
if (PexBlack1->delay < options.adjusterMaxDelay) {
|
if (PexBlack1->delay < options.adjusterMaxDelay) {
|
||||||
@ -36,7 +36,7 @@ BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, "bayerrawexposur
|
|||||||
}
|
}
|
||||||
|
|
||||||
PexBlack1->show();
|
PexBlack1->show();
|
||||||
PexBlack2 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_2"), -2048, 2048, 0.1, 0)); //black level
|
PexBlack2 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_2"), -2048, 2048, 1.0, 0)); //black level
|
||||||
PexBlack2->setAdjusterListener (this);
|
PexBlack2->setAdjusterListener (this);
|
||||||
|
|
||||||
if (PexBlack2->delay < options.adjusterMaxDelay) {
|
if (PexBlack2->delay < options.adjusterMaxDelay) {
|
||||||
@ -44,7 +44,7 @@ BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, "bayerrawexposur
|
|||||||
}
|
}
|
||||||
|
|
||||||
PexBlack2->show();
|
PexBlack2->show();
|
||||||
PexBlack3 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_3"), -2048, 2048, 0.1, 0)); //black level
|
PexBlack3 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_3"), -2048, 2048, 1.0, 0)); //black level
|
||||||
PexBlack3->setAdjusterListener (this);
|
PexBlack3->setAdjusterListener (this);
|
||||||
|
|
||||||
if (PexBlack3->delay < options.adjusterMaxDelay) {
|
if (PexBlack3->delay < options.adjusterMaxDelay) {
|
||||||
@ -52,7 +52,7 @@ BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, "bayerrawexposur
|
|||||||
}
|
}
|
||||||
|
|
||||||
PexBlack3->show();
|
PexBlack3->show();
|
||||||
PexBlack0 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_0"), -2048, 2048, 0.1, 0)); //black level
|
PexBlack0 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_0"), -2048, 2048, 1.0, 0)); //black level
|
||||||
PexBlack0->setAdjusterListener (this);
|
PexBlack0->setAdjusterListener (this);
|
||||||
|
|
||||||
if (PexBlack0->delay < options.adjusterMaxDelay) {
|
if (PexBlack0->delay < options.adjusterMaxDelay) {
|
||||||
|
@ -16,18 +16,20 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "cachemanager.h"
|
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include <glib/gstdio.h>
|
#include <dirent.h>
|
||||||
#include <giomm.h>
|
#include <giomm.h>
|
||||||
|
#include <glib/gstdio.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "cachemanager.h"
|
||||||
|
|
||||||
#include "guiutils.h"
|
#include "guiutils.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "procparamchangers.h"
|
#include "procparamchangers.h"
|
||||||
@ -340,66 +342,69 @@ Glib::ustring CacheManager::getCacheFileName (const Glib::ustring& subDir,
|
|||||||
void CacheManager::applyCacheSizeLimitation () const
|
void CacheManager::applyCacheSizeLimitation () const
|
||||||
{
|
{
|
||||||
// first count files without fetching file name and timestamp.
|
// first count files without fetching file name and timestamp.
|
||||||
|
auto cachedir = opendir(Glib::build_filename(baseDir, "data").c_str());
|
||||||
|
if (!cachedir) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::size_t numFiles = 0;
|
std::size_t numFiles = 0;
|
||||||
try {
|
while (readdir(cachedir)) {
|
||||||
|
|
||||||
const auto dirName = Glib::build_filename (baseDir, "data");
|
|
||||||
const auto dir = Gio::File::create_for_path (dirName);
|
|
||||||
|
|
||||||
auto enumerator = dir->enumerate_children ("");
|
|
||||||
|
|
||||||
while (numFiles <= options.maxCacheEntries && enumerator->next_file ()) {
|
|
||||||
++numFiles;
|
++numFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Glib::Exception&) {}
|
closedir(cachedir);
|
||||||
|
if (numFiles > 2) {
|
||||||
|
numFiles -= 2; // because . and .. are counted
|
||||||
|
}
|
||||||
|
|
||||||
if (numFiles <= options.maxCacheEntries) {
|
if (numFiles <= options.maxCacheEntries) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
using FNameMTime = std::pair<Glib::ustring, Glib::TimeVal>;
|
using FNameMTime = std::pair<Glib::ustring, Glib::TimeVal>;
|
||||||
|
|
||||||
std::vector<FNameMTime> files;
|
std::vector<FNameMTime> files;
|
||||||
|
files.reserve(numFiles);
|
||||||
|
|
||||||
|
constexpr std::size_t md5_size = 32;
|
||||||
|
// get filenames and timestamps
|
||||||
try {
|
try {
|
||||||
|
const auto dir = Gio::File::create_for_path(Glib::build_filename(baseDir, "data"));
|
||||||
|
const auto enumerator = dir->enumerate_children("standard::name,time::modified");
|
||||||
|
|
||||||
const auto dirName = Glib::build_filename (baseDir, "data");
|
while (const auto file = enumerator->next_file()) {
|
||||||
const auto dir = Gio::File::create_for_path (dirName);
|
const auto name = file->get_name();
|
||||||
|
if (name.size() >= md5_size + 5) {
|
||||||
auto enumerator = dir->enumerate_children ("standard::name,time::modified");
|
files.emplace_back(name, file->modification_time());
|
||||||
|
}
|
||||||
while (auto file = enumerator->next_file ()) {
|
|
||||||
files.emplace_back (file->get_name (), file->modification_time ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Glib::Exception&) {}
|
} catch (Glib::Exception&) {}
|
||||||
|
|
||||||
if (files.size () <= options.maxCacheEntries) {
|
if (files.size() <= options.maxCacheEntries) {
|
||||||
|
// limit not reached
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort (files.begin (), files.end (), [] (const FNameMTime& lhs, const FNameMTime& rhs)
|
const std::size_t toDelete = files.size() - options.maxCacheEntries + options.maxCacheEntries * 5 / 100; // reserve 5% free cache space
|
||||||
|
|
||||||
|
std::nth_element(
|
||||||
|
files.begin(),
|
||||||
|
files.begin() + toDelete,
|
||||||
|
files.end(),
|
||||||
|
[](const FNameMTime& lhs, const FNameMTime& rhs) -> bool
|
||||||
{
|
{
|
||||||
return lhs.second < rhs.second;
|
return lhs.second < rhs.second;
|
||||||
});
|
|
||||||
|
|
||||||
auto cacheEntries = files.size ();
|
|
||||||
|
|
||||||
for (auto entry = files.begin (); cacheEntries-- > options.maxCacheEntries; ++entry) {
|
|
||||||
|
|
||||||
const auto& name = entry->first;
|
|
||||||
|
|
||||||
constexpr auto md5_size = 32;
|
|
||||||
const auto name_size = name.size();
|
|
||||||
|
|
||||||
if (name_size < md5_size + 5) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
|
||||||
const auto fname = name.substr (0, name_size - md5_size - 5);
|
for (std::vector<FNameMTime>::const_iterator entry = files.begin(), end = files.begin() + toDelete; entry != end; ++entry) {
|
||||||
const auto md5 = name.substr (name_size - md5_size - 4, md5_size);
|
const auto& name = entry->first;
|
||||||
|
const auto name_size = name.size() - md5_size;
|
||||||
|
const auto fname = name.substr(0, name_size - 5);
|
||||||
|
const auto md5 = name.substr(name_size - 4, md5_size);
|
||||||
|
|
||||||
deleteFiles (fname, md5, true, false);
|
deleteFiles(fname, md5, true, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/// @brief List of pipette editing operation
|
/// @brief List of pipette editing operation
|
||||||
enum EditUniqueID {
|
enum EditUniqueID : int {
|
||||||
EUID_None, /// special value (default)
|
EUID_None, /// special value (default)
|
||||||
|
|
||||||
EUID_ToneCurve1,
|
EUID_ToneCurve1,
|
||||||
|
@ -300,7 +300,7 @@ ClutComboBox::ClutModel::ClutModel(const Glib::ustring &path)
|
|||||||
{
|
{
|
||||||
m_model = Gtk::TreeStore::create (m_columns);
|
m_model = Gtk::TreeStore::create (m_columns);
|
||||||
//set_model (m_model);
|
//set_model (m_model);
|
||||||
count = parseDir(path);
|
count = path.empty() ? 0 : parseDir(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ClutComboBox::ClutModel::parseDir(const Glib::ustring& path)
|
int ClutComboBox::ClutModel::parseDir(const Glib::ustring& path)
|
||||||
|
@ -16,12 +16,16 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "mydiagonalcurve.h"
|
|
||||||
#include "../rtengine/curves.h"
|
|
||||||
#include "editcallbacks.h"
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#include <gdkmm/types.h>
|
#include <gdkmm/types.h>
|
||||||
|
|
||||||
|
#include "mydiagonalcurve.h"
|
||||||
|
|
||||||
|
#include "editcallbacks.h"
|
||||||
|
|
||||||
|
#include "../rtengine/curves.h"
|
||||||
|
|
||||||
MyDiagonalCurve::MyDiagonalCurve () :
|
MyDiagonalCurve::MyDiagonalCurve () :
|
||||||
MyCurve(),
|
MyCurve(),
|
||||||
closest_point(0),
|
closest_point(0),
|
||||||
|
@ -16,12 +16,16 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "myflatcurve.h"
|
|
||||||
#include "../rtengine/curves.h"
|
|
||||||
#include "editcallbacks.h"
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#include <gdkmm/types.h>
|
#include <gdkmm/types.h>
|
||||||
|
|
||||||
|
#include "myflatcurve.h"
|
||||||
|
|
||||||
|
#include "editcallbacks.h"
|
||||||
|
|
||||||
|
#include "../rtengine/curves.h"
|
||||||
|
|
||||||
MyFlatCurve::MyFlatCurve () :
|
MyFlatCurve::MyFlatCurve () :
|
||||||
MyCurve(),
|
MyCurve(),
|
||||||
clampedX(0.0),
|
clampedX(0.0),
|
||||||
@ -1621,7 +1625,7 @@ void MyFlatCurve::movePoint(bool moveX, bool moveY, bool pipetteDrag)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set datas relative to cursor position
|
// Set data relative to cursor position
|
||||||
void MyFlatCurve::getCursorPosition(Gdk::EventType evType, bool isHint, int evX, int evY, Gdk::ModifierType modifierKey)
|
void MyFlatCurve::getCursorPosition(Gdk::EventType evType, bool isHint, int evX, int evY, Gdk::ModifierType modifierKey)
|
||||||
{
|
{
|
||||||
int tx, ty;
|
int tx, ty;
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
// User's settings directory, including images' profiles if used
|
// User's settings directory, including images' profiles if used
|
||||||
Glib::ustring Options::rtdir;
|
Glib::ustring Options::rtdir;
|
||||||
// User's cached datas' directory
|
// User's cached data directory
|
||||||
Glib::ustring Options::cacheBaseDir;
|
Glib::ustring Options::cacheBaseDir;
|
||||||
|
|
||||||
Options options;
|
Options options;
|
||||||
|
@ -19,66 +19,110 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "options.h"
|
|
||||||
#include "rtsurface.h"
|
#include "rtsurface.h"
|
||||||
|
|
||||||
|
#include "options.h"
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
std::map<std::string, Cairo::RefPtr<Cairo::ImageSurface>> surfaceCache;
|
using SurfaceCache = std::map<std::string, Cairo::RefPtr<Cairo::ImageSurface>>;
|
||||||
|
|
||||||
|
SurfaceCache surfaceCache;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double RTSurface::dpiBack = 0.;
|
RTSurface::RTSurface() :
|
||||||
int RTSurface::scaleBack = 0;
|
surface(new Cairo::ImageSurface(nullptr, false))
|
||||||
|
|
||||||
RTSurface::RTSurface () : RTScalable()
|
|
||||||
{
|
{
|
||||||
Cairo::RefPtr<Cairo::ImageSurface> imgSurf(new Cairo::ImageSurface(nullptr, false));
|
|
||||||
surface = imgSurf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RTSurface::RTSurface(const RTSurface& other) : RTScalable()
|
RTSurface::RTSurface(const Glib::ustring& fileName, const Glib::ustring& rtlFileName) :
|
||||||
|
RTSurface()
|
||||||
{
|
{
|
||||||
surface = other.surface;
|
setImage(fileName, rtlFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
RTSurface::RTSurface (Glib::ustring fileName, Glib::ustring rtlFileName) : RTScalable()
|
void RTSurface::setImage(const Glib::ustring& fileName, const Glib::ustring& rtlFileName)
|
||||||
{
|
{
|
||||||
Cairo::RefPtr<Cairo::ImageSurface> imgSurf(new Cairo::ImageSurface(nullptr, false));
|
const Glib::ustring& imageName =
|
||||||
surface = imgSurf;
|
!rtlFileName.empty() && getDirection() == Gtk::TEXT_DIR_RTL
|
||||||
setImage (fileName, rtlFileName);
|
? rtlFileName
|
||||||
}
|
: fileName;
|
||||||
|
|
||||||
void RTSurface::setImage (Glib::ustring fileName, Glib::ustring rtlFileName)
|
|
||||||
{
|
|
||||||
Glib::ustring imageName;
|
|
||||||
|
|
||||||
if (!rtlFileName.empty() && getDirection() == Gtk::TEXT_DIR_RTL) {
|
|
||||||
imageName = rtlFileName;
|
|
||||||
} else {
|
|
||||||
imageName = fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
changeImage (imageName);
|
changeImage (imageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTSurface::setDPInScale (const double newDPI, const int newScale)
|
int RTSurface::getWidth() const
|
||||||
|
{
|
||||||
|
return
|
||||||
|
surface
|
||||||
|
? surface->get_width()
|
||||||
|
: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int RTSurface::getHeight() const
|
||||||
|
{
|
||||||
|
return
|
||||||
|
surface
|
||||||
|
? surface->get_height()
|
||||||
|
: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RTSurface::hasSurface() const
|
||||||
|
{
|
||||||
|
return static_cast<bool>(surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
Cairo::RefPtr<const Cairo::ImageSurface> RTSurface::get() const
|
||||||
|
{
|
||||||
|
return surface;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Cairo::RefPtr<Cairo::ImageSurface>& RTSurface::get()
|
||||||
|
{
|
||||||
|
return surface;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RTSurface::init()
|
||||||
{
|
{
|
||||||
if (getScale() != newScale || (getScale() == 1 && getDPI() != newDPI)) {
|
|
||||||
RTScalable::setDPInScale(newDPI, newScale);
|
|
||||||
dpiBack = getDPI();
|
dpiBack = getDPI();
|
||||||
scaleBack = getScale();
|
scaleBack = getScale();
|
||||||
//printf("RTSurface::setDPInScale : New scale = %d & new DPI = %.3f (%.3f asked) -> Reloading all RTSurface\n", scaleBack, dpiBack, newDPI);
|
}
|
||||||
|
|
||||||
|
void RTSurface::updateImages()
|
||||||
|
{
|
||||||
|
const double tweakedDpi = getTweakedDPI();
|
||||||
|
|
||||||
|
for (auto& entry : surfaceCache) {
|
||||||
|
entry.second = loadImage(entry.first, tweakedDpi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RTSurface::setDPInScale(const double newDPI, const int newScale)
|
||||||
|
{
|
||||||
|
if (
|
||||||
|
getScale() != newScale
|
||||||
|
|| (
|
||||||
|
getScale() == 1
|
||||||
|
&& getDPI() != newDPI
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
setDPInScale(newDPI, newScale);
|
||||||
|
dpiBack = getDPI();
|
||||||
|
scaleBack = getScale();
|
||||||
|
|
||||||
updateImages();
|
updateImages();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTSurface::changeImage (Glib::ustring imageName)
|
void RTSurface::changeImage(const Glib::ustring& imageName)
|
||||||
{
|
{
|
||||||
auto iterator = surfaceCache.find (imageName);
|
const SurfaceCache::const_iterator iterator = surfaceCache.find(imageName);
|
||||||
|
|
||||||
if (iterator == surfaceCache.end ()) {
|
if (iterator != surfaceCache.end()) {
|
||||||
|
surface = iterator->second;
|
||||||
|
} else {
|
||||||
surface = loadImage(imageName, getTweakedDPI());
|
surface = loadImage(imageName, getTweakedDPI());
|
||||||
|
|
||||||
// HOMBRE: As of now, GDK_SCALE is forced to 1, so setting the Cairo::ImageSurface scale is not required
|
// HOMBRE: As of now, GDK_SCALE is forced to 1, so setting the Cairo::ImageSurface scale is not required
|
||||||
@ -92,48 +136,10 @@ void RTSurface::changeImage (Glib::ustring imageName)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
iterator = surfaceCache.emplace (imageName, surface).first;
|
surfaceCache.emplace(imageName, surface);
|
||||||
}
|
|
||||||
|
|
||||||
surface = iterator->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
int RTSurface::getWidth() const
|
|
||||||
{
|
|
||||||
return surface ? surface->get_width() : -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int RTSurface::getHeight() const
|
|
||||||
{
|
|
||||||
return surface ? surface->get_height() : -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RTSurface::init()
|
|
||||||
{
|
|
||||||
dpiBack = RTScalable::getDPI();
|
|
||||||
scaleBack = RTScalable::getScale();
|
|
||||||
}
|
|
||||||
|
|
||||||
void RTSurface::updateImages()
|
|
||||||
{
|
|
||||||
double res = getTweakedDPI();
|
|
||||||
for (auto entry : surfaceCache) {
|
|
||||||
entry.second = loadImage(entry.first, res);
|
|
||||||
//printf("RTSurface::updateImages : %s\n", entry.first.c_str());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTSurface::from(Glib::RefPtr<RTSurface> other)
|
double RTSurface::dpiBack = 0.;
|
||||||
{
|
|
||||||
surface = other->surface;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RTSurface::hasSurface() const
|
int RTSurface::scaleBack = 0;
|
||||||
{
|
|
||||||
return surface ? true : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Cairo::RefPtr<Cairo::ImageSurface>& RTSurface::get() const
|
|
||||||
{
|
|
||||||
return surface;
|
|
||||||
}
|
|
||||||
|
@ -19,38 +19,36 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <gtkmm/image.h>
|
#include <gtkmm/image.h>
|
||||||
|
|
||||||
#include "rtscalable.h"
|
#include "rtscalable.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A derived class of Gtk::Image in order to handle theme-related icon sets.
|
* @brief A derived class of Gtk::Image in order to handle theme-related icon sets.
|
||||||
*/
|
*/
|
||||||
class RTSurface : public RTScalable
|
class RTSurface :
|
||||||
|
public RTScalable
|
||||||
{
|
{
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
static double dpiBack; // used to keep track of master dpi change
|
|
||||||
static int scaleBack; // used to keep track of master scale change
|
|
||||||
Cairo::RefPtr<Cairo::ImageSurface> surface;
|
|
||||||
void changeImage (Glib::ustring imageName);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
RTSurface();
|
||||||
|
RTSurface(const Glib::ustring& fileName, const Glib::ustring& rtlFileName = {});
|
||||||
|
|
||||||
RTSurface ();
|
void setImage(const Glib::ustring& fileName, const Glib::ustring& rtlFileName = {});
|
||||||
RTSurface (const RTSurface& other);
|
|
||||||
RTSurface (Glib::ustring fileName, Glib::ustring rtlFileName = Glib::ustring());
|
|
||||||
|
|
||||||
void setImage (Glib::ustring fileName, Glib::ustring rtlFileName = Glib::ustring());
|
|
||||||
int getWidth() const;
|
int getWidth() const;
|
||||||
int getHeight() const;
|
int getHeight() const;
|
||||||
bool hasSurface() const;
|
bool hasSurface() const;
|
||||||
|
|
||||||
const Cairo::RefPtr<Cairo::ImageSurface>& get() const;
|
Cairo::RefPtr<const Cairo::ImageSurface> get() const;
|
||||||
|
const Cairo::RefPtr<Cairo::ImageSurface>& get();
|
||||||
|
|
||||||
static void init();
|
static void init();
|
||||||
static void updateImages ();
|
static void updateImages();
|
||||||
static void setDPInScale (const double newDPI, const int newScale);
|
static void setDPInScale(double newDPI, int newScale);
|
||||||
static void setScale (const int newScale);
|
|
||||||
|
|
||||||
void from(Glib::RefPtr<RTSurface> other);
|
private:
|
||||||
|
void changeImage(const Glib::ustring& imageName);
|
||||||
|
|
||||||
|
static double dpiBack; // used to keep track of master dpi change
|
||||||
|
static int scaleBack; // used to keep track of master scale change
|
||||||
|
Cairo::RefPtr<Cairo::ImageSurface> surface;
|
||||||
};
|
};
|
||||||
|
@ -768,8 +768,8 @@ rtengine::RawImage* ToolPanelCoordinator::getFF()
|
|||||||
const rtengine::FramesMetaData *imd = ipc->getInitialImage()->getMetaData();
|
const rtengine::FramesMetaData *imd = ipc->getInitialImage()->getMetaData();
|
||||||
|
|
||||||
if (imd) {
|
if (imd) {
|
||||||
// int iso = imd->getISOSpeed(); temporarilly removed because unused
|
// int iso = imd->getISOSpeed(); temporarily removed because unused
|
||||||
// double shutter = imd->getShutterSpeed(); temporarilly removed because unused
|
// double shutter = imd->getShutterSpeed(); temporarily removed because unused
|
||||||
double aperture = imd->getFNumber();
|
double aperture = imd->getFNumber();
|
||||||
double focallength = imd->getFocalLen();
|
double focallength = imd->getFocalLen();
|
||||||
std::string maker ( imd->getMake() );
|
std::string maker ( imd->getMake() );
|
||||||
|
@ -30,7 +30,7 @@ using namespace rtengine::procparams;
|
|||||||
|
|
||||||
XTransRAWExposure::XTransRAWExposure () : FoldableToolPanel(this, "xtransrawexposure", M("TP_EXPOS_BLACKPOINT_LABEL"))
|
XTransRAWExposure::XTransRAWExposure () : FoldableToolPanel(this, "xtransrawexposure", M("TP_EXPOS_BLACKPOINT_LABEL"))
|
||||||
{
|
{
|
||||||
PexBlackRed = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_RED"), -2048, 2048, 0.1, 0)); //black level
|
PexBlackRed = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_RED"), -2048, 2048, 1.0, 0)); //black level
|
||||||
PexBlackRed->setAdjusterListener (this);
|
PexBlackRed->setAdjusterListener (this);
|
||||||
|
|
||||||
if (PexBlackRed->delay < options.adjusterMaxDelay) {
|
if (PexBlackRed->delay < options.adjusterMaxDelay) {
|
||||||
@ -38,7 +38,7 @@ XTransRAWExposure::XTransRAWExposure () : FoldableToolPanel(this, "xtransrawexpo
|
|||||||
}
|
}
|
||||||
|
|
||||||
PexBlackRed->show();
|
PexBlackRed->show();
|
||||||
PexBlackGreen = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_GREEN"), -2048, 2048, 0.1, 0)); //black level
|
PexBlackGreen = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_GREEN"), -2048, 2048, 1.0, 0)); //black level
|
||||||
PexBlackGreen->setAdjusterListener (this);
|
PexBlackGreen->setAdjusterListener (this);
|
||||||
|
|
||||||
if (PexBlackGreen->delay < options.adjusterMaxDelay) {
|
if (PexBlackGreen->delay < options.adjusterMaxDelay) {
|
||||||
@ -46,7 +46,7 @@ XTransRAWExposure::XTransRAWExposure () : FoldableToolPanel(this, "xtransrawexpo
|
|||||||
}
|
}
|
||||||
|
|
||||||
PexBlackGreen->show();
|
PexBlackGreen->show();
|
||||||
PexBlackBlue = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_BLUE"), -2048, 2048, 0.1, 0)); //black level
|
PexBlackBlue = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_BLUE"), -2048, 2048, 1.0, 0)); //black level
|
||||||
PexBlackBlue->setAdjusterListener (this);
|
PexBlackBlue->setAdjusterListener (this);
|
||||||
|
|
||||||
if (PexBlackBlue->delay < options.adjusterMaxDelay) {
|
if (PexBlackBlue->delay < options.adjusterMaxDelay) {
|
||||||
|
10
tools/osx/Info.plist-bin.in
Normal file
10
tools/osx/Info.plist-bin.in
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>RawTherapee-bin</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.rawtherapee.rawtherapee</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/bin/sh
|
||||||
|
|
||||||
cd "$(dirname "$0")" || exit 1
|
cd "$(dirname "$0")" || exit 1
|
||||||
|
|
||||||
@ -7,21 +7,8 @@ app="${cwd%/Contents/*}"
|
|||||||
lib="${app}/Contents/Frameworks"
|
lib="${app}/Contents/Frameworks"
|
||||||
resources="${app}/Contents/Resources"
|
resources="${app}/Contents/Resources"
|
||||||
etc="${resources}"/etc
|
etc="${resources}"/etc
|
||||||
|
|
||||||
### Pending deletion:
|
|
||||||
# See https://github.com/Beep6581/RawTherapee/issues/1779
|
|
||||||
# cups_dir=/tmp/RT5
|
|
||||||
# install -d "${cups_dir}"
|
|
||||||
# cp -f /usr/lib/libcups.2.dylib "${cups_dir}"
|
|
||||||
# export DYLD_LIBRARY_PATH="${lib}:${cups_dir}"
|
|
||||||
|
|
||||||
# export GTK_EXE_PREFIX="${resources}"
|
|
||||||
# export GTK_DATA_PREFIX="${resources}"
|
|
||||||
export XDG_DATA_DIRS="${resources}/share"
|
export XDG_DATA_DIRS="${resources}/share"
|
||||||
# export GTK_IM_MODULE_FILE="${etc}/gtk-3.0/gtk.immodules"
|
|
||||||
|
|
||||||
export DYLD_LIBRARY_PATH="${lib}"
|
export DYLD_LIBRARY_PATH="${lib}"
|
||||||
|
|
||||||
export GTK_PATH="${lib}/gtk-3.0/3.0.0"
|
export GTK_PATH="${lib}/gtk-3.0/3.0.0"
|
||||||
export XDG_DATA_HOME="${resources}/share"
|
export XDG_DATA_HOME="${resources}/share"
|
||||||
export GSETTINGS_SCHEMA_DIR="${resources}/share/glib-2.0/schemas"
|
export GSETTINGS_SCHEMA_DIR="${resources}/share/glib-2.0/schemas"
|
||||||
@ -31,25 +18,13 @@ export GDK_PIXBUF_MODULEDIR="${lib}/gdk-pixbuf-2.0/2.10.0/loaders"
|
|||||||
export RT_SETTINGS="${HOME}/Library/Application Support/RawTherapee/config"
|
export RT_SETTINGS="${HOME}/Library/Application Support/RawTherapee/config"
|
||||||
export RT_CACHE="${HOME}/Library/Application Support/RawTherapee/cache"
|
export RT_CACHE="${HOME}/Library/Application Support/RawTherapee/cache"
|
||||||
|
|
||||||
### Pending deletion:
|
|
||||||
# Environment variables for X11 backend
|
|
||||||
#if [[ -d ${etc}/fonts ]]; then
|
|
||||||
# export FONTCONFIG_PATH="${etc}/fonts"
|
|
||||||
#fi
|
|
||||||
|
|
||||||
# Strip out system argument
|
# Strip out system argument
|
||||||
case "$1" in
|
case "$1" in
|
||||||
-psn_*) shift ;;
|
-psn_*) shift ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Commented-out as part of "crash-on-startup part 2" fix, see https://github.com/Beep6581/RawTherapee/issues/3882#issuecomment-311703141
|
|
||||||
#if [[ -d "/tmp/RawTherapee.app" ]]; then
|
|
||||||
# rm -rf "/tmp/RawTherapee.app"
|
|
||||||
#fi
|
|
||||||
#ln -sf "${app}" /tmp
|
|
||||||
|
|
||||||
# Prevent crash when directory name contains special characters
|
# Prevent crash when directory name contains special characters
|
||||||
AppleLocale=`defaults read -g AppleLocale`
|
AppleLocale=`defaults read -g AppleLocale`
|
||||||
export LANG=${AppleLocale%@*}.UTF-8
|
export LANG=${AppleLocale%@*}.UTF-8
|
||||||
|
|
||||||
exec "${cwd}/rawtherapee-bin" "$@"
|
exec "${cwd}/bin/rawtherapee-bin" "$@"
|
||||||
|
@ -101,7 +101,7 @@ ETC="${RESOURCES}/etc"
|
|||||||
EXECUTABLE="${MACOS}/rawtherapee"
|
EXECUTABLE="${MACOS}/rawtherapee"
|
||||||
|
|
||||||
msg "Removing old files:"
|
msg "Removing old files:"
|
||||||
rm -rf "${APP}" "${PROJECT_NAME}_*.dmg"
|
rm -rf "${APP}" "${PROJECT_NAME}_*.dmg" "*zip"
|
||||||
|
|
||||||
msg "Creating bundle container:"
|
msg "Creating bundle container:"
|
||||||
install -d "${RESOURCES}" \
|
install -d "${RESOURCES}" \
|
||||||
@ -134,7 +134,7 @@ rm -r "${LIB}"/gdk-pixbuf-2.0
|
|||||||
|
|
||||||
"${GTK_PREFIX}/bin/gdk-pixbuf-query-loaders" "${LIB}"/libpix*.so > "${ETC}/gtk-3.0/gdk-pixbuf.loaders"
|
"${GTK_PREFIX}/bin/gdk-pixbuf-query-loaders" "${LIB}"/libpix*.so > "${ETC}/gtk-3.0/gdk-pixbuf.loaders"
|
||||||
"${GTK_PREFIX}/bin/gtk-query-immodules-3.0" "${LIB}"/{im*.so,libprint*.so} > "${ETC}/gtk-3.0/gtk.immodules"
|
"${GTK_PREFIX}/bin/gtk-query-immodules-3.0" "${LIB}"/{im*.so,libprint*.so} > "${ETC}/gtk-3.0/gtk.immodules"
|
||||||
sed -i "" -e "s|${PWD}/RawTherapee.app/Contents/|@executable_path/../|" "${ETC}/gtk-3.0/gdk-pixbuf.loaders" "${ETC}/gtk-3.0/gtk.immodules"
|
sed -i "" -e "s|${PWD}/RawTherapee.app/Contents/|/Applications/RawTherapee.app/Contents/|" "${ETC}/gtk-3.0/gdk-pixbuf.loaders" "${ETC}/gtk-3.0/gtk.immodules"
|
||||||
|
|
||||||
ditto {"${GTK_PREFIX}","${RESOURCES}"}/share/glib-2.0/schemas
|
ditto {"${GTK_PREFIX}","${RESOURCES}"}/share/glib-2.0/schemas
|
||||||
"${GTK_PREFIX}/bin/glib-compile-schemas" "${RESOURCES}/share/glib-2.0/schemas"
|
"${GTK_PREFIX}/bin/glib-compile-schemas" "${RESOURCES}/share/glib-2.0/schemas"
|
||||||
@ -155,6 +155,12 @@ ditto {"${GTK_PREFIX}","${RESOURCES}"}/share/icons/Adwaita/index.theme
|
|||||||
# Copy libjpeg-turbo into the app bundle
|
# Copy libjpeg-turbo into the app bundle
|
||||||
cp /opt/local/lib/libjpeg.62.dylib "${RESOURCES}/../Frameworks"
|
cp /opt/local/lib/libjpeg.62.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
|
# Copy libexpat into the app bundle
|
||||||
|
cp /opt/local/lib/libexpat.1.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
|
# Copy libz into the app bundle
|
||||||
|
cp /opt/local/lib/libz.1.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
# Copy libtiff into the app bundle
|
# Copy libtiff into the app bundle
|
||||||
cp /opt/local/lib/libtiff.5.dylib "${RESOURCES}/../Frameworks"
|
cp /opt/local/lib/libtiff.5.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
@ -165,11 +171,8 @@ cp /opt/local/share/lensfun/version_2/* "${RESOURCES}/share/lensfun"
|
|||||||
# Copy liblensfun to Frameworks
|
# Copy liblensfun to Frameworks
|
||||||
cp /opt/local/lib/liblensfun.2.dylib "${RESOURCES}/../Frameworks"
|
cp /opt/local/lib/liblensfun.2.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
# Copy libiomp5 to Frameworks
|
# Copy libomp to Frameworks
|
||||||
cp /opt/local/lib/libomp/libiomp5.dylib "${RESOURCES}/../Frameworks"
|
cp /opt/local/lib/libomp.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
# Copy the libiomp5 license into the app bundle
|
|
||||||
cp "${PROJECT_SOURCE_DIR}/licenses/osx_libiomp5_LICENSE.txt" "${RESOURCES}"
|
|
||||||
|
|
||||||
# Install names
|
# Install names
|
||||||
find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do
|
find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do
|
||||||
@ -185,30 +188,66 @@ find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib
|
|||||||
done
|
done
|
||||||
|
|
||||||
msg "Registering @loader_path into the executable:"
|
msg "Registering @loader_path into the executable:"
|
||||||
echo " install_name_tool -add_rpath @loader_path/../Frameworks '${EXECUTABLE}'" | bash -v
|
echo " install_name_tool -add_rpath @executable_path/../../Frameworks '${EXECUTABLE}'" | bash -v
|
||||||
echo " install_name_tool -add_rpath @loader_path/../Frameworks '${EXECUTABLE}-cli'" | bash -v
|
echo " install_name_tool -add_rpath @loader_path/../Frameworks '${EXECUTABLE}-cli'" | bash -v
|
||||||
|
|
||||||
msg "Installing required application bundle files:"
|
msg "Installing required application bundle files:"
|
||||||
PROJECT_SOURCE_DATA_DIR="${PROJECT_SOURCE_DIR}/tools/osx"
|
PROJECT_SOURCE_DATA_DIR="${PROJECT_SOURCE_DIR}/tools/osx"
|
||||||
|
ditto "${PROJECT_SOURCE_DIR}/build/Resources" "${RESOURCES}"
|
||||||
# Executable loader
|
# Executable loader
|
||||||
# Note: executable is renamed to 'rawtherapee-bin'.
|
# Note: executable is renamed to 'rawtherapee-bin'.
|
||||||
mv "${MACOS}/rawtherapee" "${MACOS}/rawtherapee-bin"
|
mkdir "${MACOS}/bin"
|
||||||
|
mv "${MACOS}/rawtherapee" "${MACOS}/bin/rawtherapee-bin"
|
||||||
install -m 0755 "${PROJECT_SOURCE_DATA_DIR}/executable_loader.in" "${MACOS}/rawtherapee"
|
install -m 0755 "${PROJECT_SOURCE_DATA_DIR}/executable_loader.in" "${MACOS}/rawtherapee"
|
||||||
# App bundle resources
|
# App bundle resources
|
||||||
cp "${PROJECT_SOURCE_DATA_DIR}/"{rawtherapee,profile}.icns "${RESOURCES}"
|
cp "${PROJECT_SOURCE_DATA_DIR}/"{rawtherapee,profile}.icns "${RESOURCES}"
|
||||||
cp "${PROJECT_SOURCE_DATA_DIR}/PkgInfo" "${CONTENTS}"
|
cp "${PROJECT_SOURCE_DATA_DIR}/PkgInfo" "${CONTENTS}"
|
||||||
install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/Info.plist.in" "${CONTENTS}/Info.plist"
|
install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/Info.plist.in" "${CONTENTS}/Info.plist"
|
||||||
|
install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/Info.plist-bin.in" "${CONTENTS}/MacOS/bin/Info.plist"
|
||||||
sed -i "" -e "s|@version@|${PROJECT_FULL_VERSION}|
|
sed -i "" -e "s|@version@|${PROJECT_FULL_VERSION}|
|
||||||
s|@shortVersion@|${PROJECT_VERSION}|
|
s|@shortVersion@|${PROJECT_VERSION}|
|
||||||
s|@arch@|${arch}|" \
|
s|@arch@|${arch}|" \
|
||||||
"${CONTENTS}/Info.plist"
|
"${CONTENTS}/Info.plist"
|
||||||
plutil -convert binary1 "${CONTENTS}/Info.plist"
|
plutil -convert binary1 "${CONTENTS}/Info.plist"
|
||||||
|
plutil -convert binary1 "${CONTENTS}/MacOS/bin/Info.plist"
|
||||||
# Sign the app
|
# Sign the app
|
||||||
CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)"
|
CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)"
|
||||||
codesign --deep --force -v -s "${CODESIGNID}" "${APP}"
|
if ! test -z "$CODESIGNID" ; then
|
||||||
spctl -a -vvvv "${APP}"
|
install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/rt.entitlements" "${CONTENTS}/Entitlements.plist"
|
||||||
|
plutil -convert binary1 "${CONTENTS}/Entitlements.plist"
|
||||||
|
install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/rt-bin.entitlements" "${CONTENTS}/MacOS/bin/Entitlements.plist"
|
||||||
|
plutil -convert binary1 "${CONTENTS}/MacOS/bin/Entitlements.plist"
|
||||||
|
codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.rawtherapee-bin" --timestamp -o runtime --entitlements "${APP}/Contents/MacOS/bin/Entitlements.plist" "${APP}/Contents/MacOS/bin/rawtherapee-bin"
|
||||||
|
codesign --deep --preserve-metadata=identifier,entitlements,runtime --strict -v -s "${CODESIGNID}" -i "com.rawtherapee.rawtherapee" --timestamp -o runtime --entitlements "${APP}/Contents/Entitlements.plist" "${APP}"
|
||||||
|
spctl -a -vvvv "${APP}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Notarize the app
|
||||||
|
NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)"
|
||||||
|
if ! test -z "$NOTARY" ; then
|
||||||
|
ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip"
|
||||||
|
uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.rawtherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'`
|
||||||
|
echo "Result= $uuid" # Display identifier string
|
||||||
|
sleep 15
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status
|
||||||
|
status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'`
|
||||||
|
if [ "$status1" = "success" ]; then
|
||||||
|
xcrun stapler staple *app # staple the ticket
|
||||||
|
xcrun stapler validate -v *app
|
||||||
|
echo "Notarization success"
|
||||||
|
break
|
||||||
|
elif [ "$status1" = "in" ]; then
|
||||||
|
echo "Notarization still in progress, sleeping for 15 seconds and trying again"
|
||||||
|
sleep 15
|
||||||
|
else
|
||||||
|
echo "Notarization failed fullstatus below"
|
||||||
|
echo "$fullstatus"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
function CreateDmg {
|
function CreateDmg {
|
||||||
local srcDir="$(mktemp -dt $$)"
|
local srcDir="$(mktemp -dt $$)"
|
||||||
@ -237,7 +276,36 @@ function CreateDmg {
|
|||||||
hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg"
|
hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg"
|
||||||
|
|
||||||
# Sign disk image
|
# Sign disk image
|
||||||
codesign --deep --force -v -s "${CODESIGNID}" "${dmg_name}.dmg"
|
if ! test -z "$CODESIGNID" ; then
|
||||||
|
codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Notarize the dmg
|
||||||
|
if ! test -z "$NOTARY" ; then
|
||||||
|
zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg"
|
||||||
|
uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'`
|
||||||
|
echo "dmg Result= $uuid" # Display identifier string
|
||||||
|
sleep 15
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status
|
||||||
|
status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'`
|
||||||
|
if [ "$status1" = "success" ]; then
|
||||||
|
xcrun stapler staple "${dmg_name}.dmg" # staple the ticket
|
||||||
|
xcrun stapler validate -v "${dmg_name}.dmg"
|
||||||
|
echo "dmg Notarization success"
|
||||||
|
break
|
||||||
|
elif [ "$status1" = "in" ]; then
|
||||||
|
echo "dmg Notarization still in progress, sleeping for 15 seconds and trying again"
|
||||||
|
sleep 15
|
||||||
|
else
|
||||||
|
echo "dmg Notarization failed fullstatus below"
|
||||||
|
echo "$fullstatus"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Zip disk image for redistribution
|
# Zip disk image for redistribution
|
||||||
zip "${dmg_name}.zip" "${dmg_name}.dmg" AboutThisBuild.txt
|
zip "${dmg_name}.zip" "${dmg_name}.dmg" AboutThisBuild.txt
|
||||||
|
8
tools/osx/rt-bin.entitlements
Normal file
8
tools/osx/rt-bin.entitlements
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.inherit</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
20
tools/osx/rt.entitlements
Normal file
20
tools/osx/rt.entitlements
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>application-identifier</key>
|
||||||
|
<string>com.rawtherapee.rawtherapee</string>
|
||||||
|
<key>com.apple.security.temporary-exception.files.absolute-path.read-write</key>
|
||||||
|
<array>
|
||||||
|
<string>"/"</string>
|
||||||
|
</array>
|
||||||
|
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.files.user-selected.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.app-sandbox</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.files.downloads.read-write</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -5,7 +5,7 @@
|
|||||||
#set(CMAKE_BUILD_TYPE Release CACHE STRING "Between: None Debug Release RelWithDebInfo MinSizeRel.")
|
#set(CMAKE_BUILD_TYPE Release CACHE STRING "Between: None Debug Release RelWithDebInfo MinSizeRel.")
|
||||||
|
|
||||||
set(CMAKE_INSTALL_PREFIX ./${CMAKE_BUILD_TYPE} CACHE PATH "Libraries installation path")
|
set(CMAKE_INSTALL_PREFIX ./${CMAKE_BUILD_TYPE} CACHE PATH "Libraries installation path")
|
||||||
set(DATADIR . CACHE PATH "Datas installation path")
|
set(DATADIR . CACHE PATH "Data installation path")
|
||||||
set(BINDIR . CACHE PATH "Binaries installation path")
|
set(BINDIR . CACHE PATH "Binaries installation path")
|
||||||
set(LIBDIR . CACHE PATH "Libraries installation path")
|
set(LIBDIR . CACHE PATH "Libraries installation path")
|
||||||
set(DOCDIR ./doc CACHE PATH "Documentation installation path")
|
set(DOCDIR ./doc CACHE PATH "Documentation installation path")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user