diff --git a/CMakeLists.txt b/CMakeLists.txt index b8c39eea4..5e3c8c393 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,13 +54,19 @@ pkg_check_modules (SIGC REQUIRED sigc++-2.0) if (WIN32) set (EXTRA_LIBDIR "${CMAKE_CURRENT_SOURCE_DIR}/lib") set (EXTRA_INCDIR "${CMAKE_CURRENT_SOURCE_DIR}/winclude") - set (EXTRA_LIB "ws2_32") + set (EXTRA_LIB "-lws2_32") set (IPTCDATA_LIBRARIES iptcdata) set (LCMS_LIBRARIES liblcms.a) set (JPEG_LIBRARIES libjpeg.a) set (PNG_LIBRARIES libpng.a) set (TIFF_LIBRARIES libtiff.a) set (ZLIB_LIBRARIES libz.a) + + add_definitions (-DWIN32) + add_definitions (-D_WIN32) + if (MINGW) + add_definitions (-D__MINGW32__) + endif (MINGW) else (WIN32) pkg_check_modules (IPTCDATA REQUIRED libiptcdata) pkg_check_modules (LCMS REQUIRED lcms) diff --git a/rtdata/images/menuSymbol.png b/rtdata/images/menuSymbol.png new file mode 100644 index 000000000..cee408a32 Binary files /dev/null and b/rtdata/images/menuSymbol.png differ diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 54a397031..5c2dd4d04 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -609,6 +609,7 @@ ZOOMBAR_SMALL;Petit !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -627,18 +628,29 @@ ZOOMBAR_SMALL;Petit !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -674,7 +686,7 @@ ZOOMBAR_SMALL;Petit !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -686,7 +698,9 @@ ZOOMBAR_SMALL;Petit !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -699,9 +713,9 @@ ZOOMBAR_SMALL;Petit !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -714,7 +728,23 @@ ZOOMBAR_SMALL;Petit !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index 721165bb7..c8cdddec7 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -613,6 +613,7 @@ ZOOMBAR_SMALL;小 !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -631,18 +632,29 @@ ZOOMBAR_SMALL;小 !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -678,7 +690,7 @@ ZOOMBAR_SMALL;小 !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -690,7 +702,9 @@ ZOOMBAR_SMALL;小 !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -703,9 +717,9 @@ ZOOMBAR_SMALL;小 !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -718,7 +732,23 @@ ZOOMBAR_SMALL;小 !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index f4fbd4838..8695457be 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -626,6 +626,7 @@ ZOOMBAR_SMALL;小 !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -639,18 +640,29 @@ ZOOMBAR_SMALL;小 !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q !MAIN_BUTTON_SAVE_TOOLTIP;Save current image Ctrl+S @@ -681,7 +693,7 @@ ZOOMBAR_SMALL;小 !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -693,7 +705,9 @@ ZOOMBAR_SMALL;小 !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -705,9 +719,9 @@ ZOOMBAR_SMALL;小 !SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -720,7 +734,23 @@ ZOOMBAR_SMALL;小 !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 46a7b53b6..6f741c92b 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -4,21 +4,35 @@ #02 21.2.2008: updated by mkyral (typos and some missing strings) #03 24.4.2008: updated by mkyral (for version 2.4m1) #04 28.10.2008: updated by mkyral (for version 2.4 beta1) +#05 25.11.2010: updated by mkyral (for version 3.0) ADJUSTER_RESET_TO_DEFAULT;Vrátit se k původnímu +BATCHQUEUE_AUTOSTART;Automatický start +BATCH_PROCESSING;Dávkové zpracování +CURVEEDITOR_CURVE;Křivka +CURVEEDITOR_CURVES;Křivky +CURVEEDITOR_CUSTOM;Vlastní +CURVEEDITOR_DARKS;Tmavé CURVEEDITOR_FILEDLGFILTERANY;Jakékoliv soubory CURVEEDITOR_FILEDLGFILTERCURVE;Soubory křivek +CURVEEDITOR_HIGHLIGHTS;Světla +CURVEEDITOR_LIGHTS;Světlé CURVEEDITOR_LINEAR;Lineární CURVEEDITOR_LOADDLGLABEL;Načíst křivku... +CURVEEDITOR_NURBS;Deformační klec +CURVEEDITOR_PARAMETRIC;Parametrická CURVEEDITOR_SAVEDLGLABEL;Uložit křivku... +CURVEEDITOR_SHADOWS;Stíny CURVEEDITOR_TOOLTIPLINEAR;Vrátit se k lineární křivce CURVEEDITOR_TOOLTIPLOAD;Načíst křivku ze souboru CURVEEDITOR_TOOLTIPSAVE;Uložit současnou křivku +CURVEEDITOR_TYPE;Typ: EXIFFILTER_APERTURE;Clona EXIFFILTER_CAMERA;Aparát EXIFFILTER_DIALOGLABEL;Filtruj dle Exif EXIFFILTER_FOCALLEN;Ohnisková vzdálenost EXIFFILTER_ISO;ISO EXIFFILTER_LENS;Objektiv +EXIFFILTER_METADATAFILTER;Povolit filtr metadat EXIFFILTER_SHUTTER;Rychlost závěrky EXIFPANEL_ADDEDIT;Přidej/Změň EXIFPANEL_ADDEDITHINT;Přidej/Oprav štítek @@ -34,10 +48,13 @@ EXIFPANEL_RESETALL;Obnov vše EXIFPANEL_RESETALLHINT;Obnov původní hodnoty u všech štítků EXIFPANEL_RESETHINT;Obnov původní hodnoty u vybraných štítků EXIFPANEL_SUBDIRECTORY;Podadresář +FILEBROWSER_ADDDELTEMPLATE;Přidání/Smazání šablon... FILEBROWSER_APPLYPROFILE;Aplikuj profil FILEBROWSER_ARRANGEMENTHINT;Přepnutí mezi vertikálním/horizontálním zarovnáním náhledů +FILEBROWSER_AUTODARKFRAME;Automatické tmavé snímky FILEBROWSER_CLEARPROFILE;Vymaž profil FILEBROWSER_COPYPROFILE;Kopíruj profil +FILEBROWSER_CURRENT_NAME;Současné jméno: FILEBROWSER_DELETEDLGLABEL;Potvrzení smazání souboru FILEBROWSER_DELETEDLGMSG;Opravdu chcete vymazat %1 souborů? FILEBROWSER_EMPTYTRASH;Vysypat koš @@ -47,6 +64,8 @@ FILEBROWSER_EXIFFILTERAPPLYHINT;Zapne/Vypne filtrování dle exif v prohlížeč FILEBROWSER_EXIFFILTERLABEL;Exif Filtr FILEBROWSER_EXIFFILTERSETTINGS;Nastavení FILEBROWSER_EXIFFILTERSETTINGSHINT;Změna nastavení exif filtru +FILEBROWSER_MOVETODARKFDIR;Přesunout do adresáře tmavých snímků +FILEBROWSER_NEW_NAME;Nové jméno: FILEBROWSER_PARTIALPASTEPROFILE;Vlož částečně FILEBROWSER_PASTEPROFILE;Vlož profil FILEBROWSER_POPUPCANCELJOB;Zruš úlohu @@ -69,7 +88,9 @@ FILEBROWSER_PROCESSINGSETTINGS;Nastavení FILEBROWSER_PROCESSINGSETTINGSHINT;Nastavení formátu souboru a výstupního adresáře FILEBROWSER_RENAMEDLGLABEL;Přejmenování souboru FILEBROWSER_RENAMEDLGMSG;Přejmenovat soubor "%1" na: +FILEBROWSER_SELECTDARKFRAME;Vyber tmavý snímek... FILEBROWSER_SHOWDIRHINT;Ukaž všechny obrázky v adresáři +FILEBROWSER_SHOWEXIFINFO;Zobrazit informace EXIF i FILEBROWSER_SHOWQUEUEHINT;Ukaž obsah fronty FILEBROWSER_SHOWRANK1HINT;Ukaž obrázky hodnocené 1 hvězdičkou FILEBROWSER_SHOWRANK2HINT;Ukaž obrázky hodnocené 2 hvězdičkama @@ -83,14 +104,19 @@ FILEBROWSER_STARTPROCESSINGHINT;Spustí zpracování nebo ukládání obrázků FILEBROWSER_STOPPROCESSING;Zastav zpracovávaní FILEBROWSER_STOPPROCESSINGHINT;Zastaví zpracovávaní obrázků FILEBROWSER_THUMBSIZE;Velikost náhledů +FILEBROWSER_TOOLTIP_STOPPROCESSING;Automaticky spustit zpracování po vložení nové dávky +FILEBROWSER_USETEMPLATE;Použít šablonu: FILEBROWSER_ZOOMINHINT;Zvětší velikost náhledů FILEBROWSER_ZOOMOUTHINT;Zmenší velikost náhledů GENERAL_ABOUT;O programu +GENERAL_AFTER;Poté +GENERAL_BEFORE;Před GENERAL_CANCEL;Storno GENERAL_DISABLE;Vypnout GENERAL_DISABLED;Vypnuto GENERAL_ENABLE;Zapnout GENERAL_ENABLED;Zapnuto +GENERAL_HIGH_QUALITY;Vysoká kvalita GENERAL_LANDSCAPE;Na šířku GENERAL_LOAD;Načíst GENERAL_NA;n/a @@ -98,7 +124,12 @@ GENERAL_NO;Ne GENERAL_OK;OK GENERAL_PORTRAIT;Na výšku GENERAL_SAVE;Uschovat +GENERAL_UNCHANGED;(Beze změny) GENERAL_YES;Ano +HISTOGRAM_BUTTON_B;B +HISTOGRAM_BUTTON_G;G +HISTOGRAM_BUTTON_L;L +HISTOGRAM_BUTTON_R;R HISTOGRAM_LABEL;Histogram HISTOGRAM_TOOLTIP_B;Schovej či zobraz histogram pro MODROU HISTOGRAM_TOOLTIP_G;Schovej či zobraz histogram pro ZELENOU @@ -109,6 +140,11 @@ HISTORY_CUSTOMCURVE;Vlastní křivka HISTORY_DELSNAPSHOT;Odstranit snímek HISTORY_FROMCLIPBOARD;Ze schránky HISTORY_LABEL;Historie +HISTORY_MSG_100;Sytost RGB +HISTORY_MSG_101;HSV korekce -- Odstín +HISTORY_MSG_102;HSV korekce -- Sytost +HISTORY_MSG_103;HSV korekce -- Hodnota +HISTORY_MSG_104;HSV korekce HISTORY_MSG_10;Komprese stínů HISTORY_MSG_11;Tónová křivka HISTORY_MSG_12;Automatická expozice @@ -164,7 +200,7 @@ HISTORY_MSG_57;Hrubé otáčení HISTORY_MSG_58;Horizontální překlopení HISTORY_MSG_59;Vertikální překlopení HISTORY_MSG_5;Jas -HISTORY_MSG_60;Otáčení +HISTORY_MSG_60;Otočení HISTORY_MSG_61;Otočení HISTORY_MSG_62;Úprava zkreslení objektivu HISTORY_MSG_63;Záložka zvolena @@ -188,7 +224,25 @@ HISTORY_MSG_79;Resize width HISTORY_MSG_7;Černá HISTORY_MSG_80;Resize height HISTORY_MSG_81;Resize enabled +HISTORY_MSG_82;Profil změněn +HISTORY_MSG_83;Vysoká kvalita světel/stínů +HISTORY_MSG_84;Korekce perspektivy +HISTORY_MSG_85;Vlnkové koeficienty +HISTORY_MSG_86;Vlnková korekce +HISTORY_MSG_87;Sůl a pepř redukce šumu +HISTORY_MSG_88;Sůl a pepř redukce šumu - práh +HISTORY_MSG_89;Redukce šumu HISTORY_MSG_8;Expoziční korekce +HISTORY_MSG_90;Redukce šumu - jas +HISTORY_MSG_91;Redukce šumu - barevnost +HISTORY_MSG_92;Redukce šumu - gama +HISTORY_MSG_93;Kontrast dle detailu úrovní - hodnota +HISTORY_MSG_94;Kontrast dle detailu úrovní +HISTORY_MSG_95;Sytost +HISTORY_MSG_96;'a' křivka +HISTORY_MSG_97;'b' křivka +HISTORY_MSG_98;Demozajkování +HISTORY_MSG_99;Předzpracování HISTORY_MSG_9;Komprese světel HISTORY_NEWSNAPSHOT;Nový snímek HISTORY_NEWSNAPSHOTAS;Jako... @@ -253,47 +307,78 @@ IPTCPANEL_TITLE;Titulek IPTCPANEL_TITLEHINT;Zkrácený popis obrázku (Jméno obrázku). IPTCPANEL_TRANSREFERENCE;Trans. Reference IPTCPANEL_TRANSREFERENCEHINT;Kód místa, odkud byl převzat originální obrázek (Original Transmission Reference). -MAIN_BUTTON_EXIT;Exit +MAIN_BUTTON_EXIT;Konec +MAIN_BUTTON_FULLSCREEN;Celá obrazovka MAIN_BUTTON_PREFERENCES;Volby -MAIN_BUTTON_QUEUE;Put to queue +MAIN_BUTTON_PUTTOQUEUE;Vlož do fronty +MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Vloží současný obrázek do fronty Ctrl+Q +MAIN_BUTTON_QUEUE;Vložit do fronty MAIN_BUTTON_SAVE;Uložit MAIN_BUTTON_SAVEAS;jako... +MAIN_BUTTON_SAVE_TOOLTIP;Uloží současný obrázek Ctrl+S MAIN_BUTTON_SENDTOEDITOR;Odeslat do editoru -MAIN_FRAME_BATCHQUEUE;Batch Queue -MAIN_FRAME_FILEBROWSER;File Browser -MAIN_FRAME_PLACES;Places -MAIN_FRAME_PLACES_ADD;Add -MAIN_FRAME_PLACES_DEL;Del -MAIN_FRAME_RECENT;Recent Folders +MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Editovat současný obrázek v externím editoru Ctrl+E +MAIN_BUTTON_UNFULLSCREEN;Ukončit mód celé obrazovky +MAIN_FRAME_BATCHQUEUE;Fronta +MAIN_FRAME_FILEBROWSER; Prohlížeč souborů +MAIN_FRAME_PLACES;Místa +MAIN_FRAME_PLACES_ADD;Přidat +MAIN_FRAME_PLACES_DEL;Smazat +MAIN_FRAME_RECENT;Poslední složky MAIN_MSG_ALREADYEXISTS;Soubor již existuje. MAIN_MSG_CANNOTLOAD;Nepodařilo se načíst obrázek MAIN_MSG_CANNOTSAVE;Chyba při ukládání souboru. -MAIN_MSG_CANNOTSTARTEDITOR;Can not start editor. -MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Please set the correct path in the "Preferences" dialog. +MAIN_MSG_CANNOTSTARTEDITOR;Editor nelze spustit. +MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Nastavte prosím správnou cestu v okně "Volby". +MAIN_MSG_ERRORDURINGIMAGESAVING;Chyba při ukládání obrázku MAIN_MSG_EXITJOBSINQUEUEINFO;Nezpracované obrázky ve frontě budou ztraceny! MAIN_MSG_EXITJOBSINQUEUEQUEST;OPravdu chcete skončit? Ve frontě jsou nezpracované obrázky. MAIN_MSG_JOBSINQUEUE;Úlohy ve frontě +MAIN_MSG_NAVIGATOR;Navigátor +MAIN_MSG_PLACES;Místa MAIN_MSG_QOVERWRITE;Chcete jej přepsat? MAIN_TAB_BASIC;Základní MAIN_TAB_COLOR;Barvy MAIN_TAB_DETAIL;Detaily -MAIN_TAB_DEVELOP;Develop +MAIN_TAB_DEVELOP;Vyvolání MAIN_TAB_EXIF;Exif MAIN_TAB_EXPOSURE;Expozice -MAIN_TAB_FILTER;Filter +MAIN_TAB_FILTER;Filtr MAIN_TAB_ICM;ICM MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;Metadata -MAIN_TAB_TAGGING;Tagging +MAIN_TAB_RAW;RAW +MAIN_TAB_TAGGING;Štítky MAIN_TAB_TRANSFORM;Transformace -MAIN_TOOLTIP_HIDEFP;Zobrazit či schovat dolní panel (složky a prohlížeč souborů, shortcut key: F)) -MAIN_TOOLTIP_HIDEHP;Zobrazit či schovat levý panel (obsahující historii, shortcut key: H) +MAIN_TOGGLE_BEFORE_AFTER;Před|Po +MAIN_TOOLTIP_HIDEFP;Zobrazit či schovat dolní panel (složky a prohlížeč souborů F) +MAIN_TOOLTIP_HIDEHP;Zobrazit či schovat levý panel (obsahující historii H) MAIN_TOOLTIP_INDCLIPPEDH;Zvýraznit oříznuté jasy MAIN_TOOLTIP_INDCLIPPEDS;Zvýraznit oříznuté stíny MAIN_TOOLTIP_PREFERENCES;Změnit volby MAIN_TOOLTIP_QINFO;Stručné informace o obrázku MAIN_TOOLTIP_SAVE;Uložit obrázek do výchozí složky MAIN_TOOLTIP_SAVEAS;Uložit obrázek do vybrané složky +MAIN_TOOLTIP_TOGGLE;Přepnout Před a Po B +NAVIGATOR_B_NA;B = n/a +NAVIGATOR_B_VALUE;B = %1 +NAVIGATOR_G_NA;G = n/a +NAVIGATOR_G_VALUE;G = %1 +NAVIGATOR_H_NA;H = n/a +NAVIGATOR_H_VALUE;H = %1 +NAVIGATOR_LAB_A_NA;A = n/a +NAVIGATOR_LAB_A_VALUE;A = %1 +NAVIGATOR_LAB_B_NA;B = n/a +NAVIGATOR_LAB_B_VALUE;B = %1 +NAVIGATOR_LAB_L_NA;L = n/a +NAVIGATOR_LAB_L_VALUE;L = %1 +NAVIGATOR_R_NA;R = n/a +NAVIGATOR_R_VALUE;R = %1 +NAVIGATOR_S_NA;S = n/a +NAVIGATOR_S_VALUE;S = %1 +NAVIGATOR_V_NA;V = n/a +NAVIGATOR_V_VALUE;V = %1 +NAVIGATOR_XY_NA;x = n/a, y = n/a PARTIALPASTE_BASICGROUP;Základní nastavení PARTIALPASTE_CACORRECTION;Korekce C/A PARTIALPASTE_COARSETRANS;Orientace / převrácení @@ -306,11 +391,13 @@ PARTIALPASTE_COMPOSITIONGROUP;Nastavení kompozice PARTIALPASTE_CROP;Ořez PARTIALPASTE_DIALOGLABEL;Nastavení profilu částečného vložení PARTIALPASTE_DISTORTION;Korekce zkreslení -PARTIALPASTE_EXIFCHANGES;Upravené exif data +PARTIALPASTE_EXIFCHANGES;Upravená exif data PARTIALPASTE_EXPOSURE;Expozice PARTIALPASTE_HLRECOVERY;Obnovení světel PARTIALPASTE_ICMSETTINGS;Nastavení ICM PARTIALPASTE_IPTCINFO;IPTC info +PARTIALPASTE_LABCURVE;Jasová křivka +PARTIALPASTE_LABCURVE;Lab křivka PARTIALPASTE_LENSGROUP;Nastavení objektivu PARTIALPASTE_LUMACURVE;Křivka jasu PARTIALPASTE_LUMADENOISE;Redukce šumu v jasech @@ -322,7 +409,11 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;Stíny/Světla PARTIALPASTE_SHARPENING;Doostření PARTIALPASTE_VIGNETTING;Korekce vinětace PARTIALPASTE_WHITEBALANCE;Nastavení bílé +POPUPBUTTON_SELECTOPTIONHINT;Pravé tl. myši pro změnu nastavení +PREFERENCES_ADD;Přidat PREFERENCES_APPLNEXTSTARTUP;Projeví se při dalším spuštění +PREFERENCES_BATCH_PROCESSING;Dávkové zpracování +PREFERENCES_BEHAVIOR;Režim PREFERENCES_BLINKCLIPPED;Blikání v oříznutých oblastech PREFERENCES_CACHECLEARALL;Vymaž vše PREFERENCES_CACHECLEARPROFILES;Vymaž profily @@ -336,16 +427,21 @@ PREFERENCES_CACHESTRAT2;Upřednostnit menší spotřebu paměti před rychlostí PREFERENCES_CACHESTRAT;Strategie cache PREFERENCES_CACHETHUMBFORM;Formát náhledů v cache PREFERENCES_CACHETHUMBHEIGHT;Maximální velikost náhledu +PREFERENCES_CACORRECTION;Aplikovat automatickou korekci chromatické aberace PREFERENCES_CLEARDLG_LINE1;Čištění cache PREFERENCES_CLEARDLG_LINE2;může trvat několik sekund. PREFERENCES_CLEARDLG_TITLE;Prosím počkejte. PREFERENCES_CLIPPINGIND;Zvýraznění oříznutých jasů či stínů PREFERENCES_CMETRICINTENT;Kolorimetrická metoda +PREFERENCES_DARKFRAME;Tmavé snímky PREFERENCES_DATEFORMAT;Formát data PREFERENCES_DATEFORMATHINT;Lze použít následující formátovací řetězce:\n%y : rok (year)\n%m : měsíc (month)\n%d : den (day)\n\nNapříklad český formát data:\n%d. %m. %y +PREFERENCES_DCBENHANCE;Aplikovat krok DCB rozšíření +PREFERENCES_DCBITERATIONS;Počet DCB iterací PREFERENCES_DEFAULTLANG;Výchozí jazyk PREFERENCES_DEFAULTTHEME;Výchozí vzhled PREFERENCES_DEMOSAICINGALGO;Demozajkovací algoritmus +PREFERENCES_DIRDARKFRAMES;Adresář tmavých snímků PREFERENCES_DIRHOME;Domovská složka PREFERENCES_DIRLAST;Poslední navštívená složka PREFERENCES_DIROTHER;Jiná @@ -353,6 +449,7 @@ PREFERENCES_DIRSELECTDLG;Zvolte složku s obrázky pro spuštění... PREFERENCES_DIRSOFTWARE;Instalační složka PREFERENCES_DMETHOD;Metoda PREFERENCES_EDITORCMDLINE;Jiný příkaz +PREFERENCES_EDITORLAYOUT;Rozvržení editoru PREFERENCES_EXTERNALEDITOR;Externí editor PREFERENCES_FALSECOLOR;Počet kroků při potlačování chybných barev PREFERENCES_FBROWSEROPTS;Volby prohlížeče souborů @@ -360,23 +457,29 @@ PREFERENCES_FILEFORMAT;Formát souboru PREFERENCES_FORIMAGE;Pro obrázkové soubory PREFERENCES_FORRAW;Pro RAW soubory PREFERENCES_GIMPPATH;GIMP instalační adresář +PREFERENCES_GREENEQUIL;Vyrovnání zelené PREFERENCES_GTKTHEME;GTK výchozí PREFERENCES_HINT;Nápověda PREFERENCES_HLTHRESHOLD;Práh pro oříznutá světla +PREFERENCES_HOTDEADPIXFILT;Aplikovat filtr na vypálené/mrtvé body PREFERENCES_ICCDIR;Složka ICC profilů PREFERENCES_IMPROCPARAMS;Výchozí profily pro zpracování obrázku PREFERENCES_INTENT_ABSOLUTE;Absolutní kolorimetrie PREFERENCES_INTENT_PERCEPTUAL;Vnímání PREFERENCES_INTENT_RELATIVE;Relativní kolorimetrie PREFERENCES_INTENT_SATURATION;Saturace +PREFERENCES_LINEDENOISE;Filtrovat linkové rušení PREFERENCES_LIVETHUMBNAILS;Živé náhledy (pomalejší) PREFERENCES_MONITORICC;Profil monitoru +PREFERENCES_MULTITAB;Mód více karet PREFERENCES_OUTDIR;Výstupní složka PREFERENCES_OUTDIRFOLDER;Ulož do souboru PREFERENCES_OUTDIRFOLDERHINT;Uloží obrázky do vybraného adresáře PREFERENCES_OUTDIRHINT;Lze použít následující formátovací řetězce:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nTyto formátovací řetězce reprezentují adresáře a části cesty, kde je uložen raw soubor.\n\nNapříklad pokud je otevřen soubor /home/tom/image/02-09-2006/dsc0012.nef, mají jednotlivé formátovací řetězce tento význam:\n%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\nPokud si přejete uložit výstupní obrázek vedle originálu, napiště:\n%p1/%f\n\nJestliže si jej ale přejete uložit do adresáře 'converted' ve stejném adresáři jako originál, napiště:\n%p1/converted/%f\n\nPro uložení výstupního obrázku do adresáře '/home/tom/converted' se zachováním adresáře s datem, použijte:\n%p2/converted/%d1/%f PREFERENCES_OUTDIRTEMPLATE;Použij šablonu PREFERENCES_OUTDIRTEMPLATEHINT;Lze použít následující formátovací řetězce:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nTyto formátovací řetězce reprezentují adresáře a části cesty, kde je uložen raw soubor.\n\nNapříklad pokud je otevřen soubor /home/tom/image/02-09-2006/dsc0012.nef, mají jednotlivé formátovací řetězce tento význam:\n%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\nPokud si přejete uložit výstupní obrázek vedle originálu, napiště:\n%p1/%f\n\nJestliže si jej ale přejete uložit do adresáře 'converted' ve stejném adresáři jako originál, napiště:\n%p1/converted/%f\n\nPro uložení výstupního obrázku do adresáře '/home/tom/converted' se zachováním adresáře s datem, použijte:\n%p2/converted/%d1/%f +PREFERENCES_OVERLAY_FILENAMES;Přepsat jména souborů v náhledech +PREFERENCES_OVERWRITEOUTPUTFILE;Přepsat existující soubory PREFERENCES_PARSEDEXT;Zobrazované přípony PREFERENCES_PARSEDEXTADD;Přidej příponu PREFERENCES_PARSEDEXTADDHINT;Vložte příponu a stiskněte toto tlačítko pro přidání do seznamu @@ -387,15 +490,19 @@ PREFERENCES_PROFILEPRCACHE;Profil v cache PREFERENCES_PROFILEPRFILE;Profil uložený se zdrojovým souborem PREFERENCES_PROFILESAVECACHE;Ukládat parametry zpracování do cache PREFERENCES_PROFILESAVEINPUT;Ukládat parametry zpracování se zdrojovým souborem +PREFERENCES_PROPERTY;Vlastnost PREFERENCES_PSPATH;Adobe Photoshop instalační adresář +PREFERENCES_SELECTFONT;Vybrat písmo PREFERENCES_SELECTICCDIRDLG;Zvolte složky s ICC profily... PREFERENCES_SELECTLANG;Volba jazyka PREFERENCES_SELECTMONITORPROFDLG;Zvolte ICC profil obrazovky... PREFERENCES_SELECTTHEME;Vybraný vzhled +PREFERENCES_SET;Nastavit PREFERENCES_SHOWBASICEXIF;Zobrazovat základní informace z EXIF PREFERENCES_SHOWDATETIME;Zobrazovat datum a čas PREFERENCES_SHOWONLYRAW;Zobrazovat pouze soubory RAW PREFERENCES_SHTHRESHOLD;Práh pro oříznuté stíny +PREFERENCES_SINGLETAB;Mód jedné karty PREFERENCES_STARTUPIMDIR;Složka s obrázky při spuštění PREFERENCES_TAB_BROWSER;Prohlížeč souborů PREFERENCES_TAB_COLORMGR;Správa barev @@ -403,6 +510,8 @@ PREFERENCES_TAB_GENERAL;Obecné PREFERENCES_TAB_IMPROC;Zpracování obrázku PREFERENCES_TAB_OUTPUT;Volby výstupu PREFERENCES_THUMBSIZE;Velikost náhledu +PREFERENCES_USESYSTEMTHEME; Použít systémový motiv +PREFERENCES_WORKFLOW;Způsob práce PROFILEPANEL_FILEDLGFILTERANY;Jakékoliv souboru PROFILEPANEL_FILEDLGFILTERPP;Profily zpracování PROFILEPANEL_LABEL;Profily zpracování @@ -429,28 +538,30 @@ PROGRESSBAR_SAVEJPEG;Ukládám jako JPEG... PROGRESSBAR_SAVEPNG;Ukládám jako PNG... PROGRESSBAR_SAVETIFF;Ukládám jako TIFF... PROGRESSDLG_LOADING;Loading file... -PROGRESSDLG_PROCESSING;Processing image... -PROGRESSDLG_SAVING;Saving file... +PROGRESSDLG_PROCESSING;Zpracovávaní obrázku... +PROGRESSDLG_PROFILECHANGEDINBROWSER;Profil změněn v prohlížeči +PROGRESSDLG_SAVING;Ukládání souboru... QINFO_FOCALLENGTH;Ohnisková vzdálenost QINFO_ISO;ISO -QINFO_LENS;Lens +QINFO_LENS;Objektivy QINFO_NOEXIF;Exif údaje nejsou k dispozici. +SAVEDLG_AUTOSUFFIX;Automaticky přidat příponu pokud soubor již existuje SAVEDLG_FILEFORMAT;Formát souboru SAVEDLG_JPEGQUAL;JPEG Kvalita SAVEDLG_JPGFILTER;Soubory JPEG SAVEDLG_PNGCOMPR;PNG Komprese SAVEDLG_PNGFILTER;Soubory PNG SAVEDLG_PUTTOQUEUE;Vložit soubor do fronty -SAVEDLG_PUTTOQUEUEHEAD;Put to the head of the processing queue -SAVEDLG_PUTTOQUEUETAIL;Put to the end of the processing queue +SAVEDLG_PUTTOQUEUEHEAD;Vložit na začátek fronty +SAVEDLG_PUTTOQUEUETAIL;Vložit na konec fronty SAVEDLG_SAVEIMMEDIATELY;Okamžitě uložit SAVEDLG_SAVESPP;Uschovat s obrazem i parametry zpracování SAVEDLG_TIFFFILTER;Soubory TIFF -SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF -TOOLBAR_TOOLTIP_CROP;Označení výřezu (shortcut key: C) -TOOLBAR_TOOLTIP_HAND;Nástroj ruka (shortcut key: N) -TOOLBAR_TOOLTIP_STRAIGHTEN;Vyznačení roviny (shortcut key: S) -TOOLBAR_TOOLTIP_WB;Bodové vyvážení bílé (shortcut key: W) +SAVEDLG_TIFFUNCOMPRESSED;Nekomprimovaný TIFF +TOOLBAR_TOOLTIP_CROP;Označení výřezu C +TOOLBAR_TOOLTIP_HAND;Nástroj ruka N +TOOLBAR_TOOLTIP_STRAIGHTEN;Vyznačení roviny S +TOOLBAR_TOOLTIP_WB;Bodové vyvážení bílé W TP_CACORRECTION_BLUE;Modrá TP_CACORRECTION_LABEL;Oprava chromatické vady TP_CACORRECTION_RED;Červená @@ -496,8 +607,26 @@ TP_CROP_SELECTCROP; Označení výřezu TP_CROP_W;Š TP_CROP_X;x TP_CROP_Y;y +TP_DETAIL_AMOUNT;Míra +TP_DIRPYRDENOISE_CHROMA;Barevnost +TP_DIRPYRDENOISE_GAMMA;Gama +TP_DIRPYRDENOISE_LABEL;Redukce šumu +TP_DIRPYRDENOISE_LUMA;Jas +TP_DIRPYREQUALIZER_LABEL;Kontrast dle detailu úrovní +TP_DIRPYREQUALIZER_LUMACOARSEST;nejhrubší +TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Kontrast- +TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Kontrast+ +TP_DIRPYREQUALIZER_LUMAFINEST;nejjemnější +TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutrální +TP_DIRPYREQUALIZER_THRESHOLD;Práh TP_DISTORTION_AMOUNT;Míra TP_DISTORTION_LABEL;Oprava zkreslení objektivu +TP_EQUALIZER_CONTRAST_MINUS;Kontrast- +TP_EQUALIZER_CONTRAST_PLUS;Kontrast+ +TP_EQUALIZER_FINEST;nejjemnější +TP_EQUALIZER_LABEL;Vlnková korekce +TP_EQUALIZER_LARGEST;nejhrubší +TP_EQUALIZER_NEUTRAL;Neutrální TP_EXPOSURE_AUTOLEVELS;Úrovně automaticky TP_EXPOSURE_BLACKLEVEL;Černá TP_EXPOSURE_BRIGHTNESS;Jas @@ -508,11 +637,26 @@ TP_EXPOSURE_CONTRAST;Kontrast TP_EXPOSURE_CURVEEDITOR;Tonální křivka TP_EXPOSURE_EXPCOMP;Korekce expozice TP_EXPOSURE_LABEL;Expozice +TP_EXPOSURE_SATURATION;Sytost TP_HLREC_CIELAB;Mísení CIELAB TP_HLREC_COLOR;Propagace barev TP_HLREC_LABEL;Obnovení jasů TP_HLREC_LUMINANCE;Obnovení jasů TP_HLREC_METHOD;Metoda: +TP_HSVEQUALIZER1;Červená +TP_HSVEQUALIZER2;Žlutá +TP_HSVEQUALIZER3;Limetková +TP_HSVEQUALIZER4;Zelená +TP_HSVEQUALIZER5;Azurová +TP_HSVEQUALIZER6;Modrá +TP_HSVEQUALIZER7;Růžová +TP_HSVEQUALIZER8;Purpurová +TP_HSVEQUALIZER_CHANNEL;HSV kanál +TP_HSVEQUALIZER_HUE;Odstín +TP_HSVEQUALIZER_LABEL;HSV korekce +TP_HSVEQUALIZER_NEUTRAL;Neutrální +TP_HSVEQUALIZER_SAT;Sytost +TP_HSVEQUALIZER_VAL;Hodnota TP_ICM_FILEDLGFILTERANY;Jakékoliv soubory TP_ICM_FILEDLGFILTERICM;Soubory ICC profilů TP_ICM_GAMMABEFOREINPUT;Profil provádí Gama korekci @@ -520,6 +664,7 @@ TP_ICM_INPUTCAMERA;Výchozí profil fotoaparátu TP_ICM_INPUTCUSTOM;Vlastní TP_ICM_INPUTDLGLABEL;Vyber vstupní ICC profil... TP_ICM_INPUTEMBEDDED;Použít vložený profil, pokud je k dispozici +TP_ICM_INPUTNONE;Bez profilu TP_ICM_INPUTPROFILE;Vstupní profil TP_ICM_LABEL;ICM TP_ICM_NOICM;Bez správy barev: sRGB výstup @@ -527,6 +672,16 @@ TP_ICM_OUTPUTDLGLABEL;Vyber výstupní ICC profil... TP_ICM_OUTPUTPROFILE;Výstupní barevný prostor TP_ICM_SAVEREFERENCE;Uložit referenční obrázek pro profilování TP_ICM_WORKINGPROFILE;Pracovní barevný prostor +TP_IMPULSEDENOISE_LABEL;Redukce bodového šumu +TP_IMPULSEDENOISE_THRESH;Práh +TP_LABCURVE_BRIGHTNESS;Jasnost +TP_LABCURVE_CONTRAST;Kontrast +TP_LABCURVE_CURVEEDITOR;Křivka svítivosti +TP_LABCURVE_LABEL;Lab křivky +TP_LABCURVE_SATURATION;Sytost +TP_LENSGEOM_AUTOCROP;Automatický ořez +TP_LENSGEOM_FILL;Automatické vyplnění +TP_LENSGEOM_LABEL;Objektiv / Geometrie TP_LUMACURVE_BLACKLEVEL;Černá TP_LUMACURVE_BRIGHTNESS;Jas TP_LUMACURVE_COMPRHIGHLIGHTS;Komprese světel @@ -537,21 +692,34 @@ TP_LUMACURVE_LABEL;Křivka jasu v CIELAB TP_LUMADENOISE_EDGETOLERANCE;Tolerance okrajů TP_LUMADENOISE_LABEL;Redukce šumu v jasech TP_LUMADENOISE_RADIUS;Poloměr +TP_PERSPECTIVE_HORIZONTAL;Horizontální +TP_PERSPECTIVE_LABEL;Perspektiva +TP_PERSPECTIVE_VERTICAL;Vertikální +TP_PREPROCESS_DARKFRAME;Tmavé snímky +TP_PREPROCESS_DFAUTOSELECT;Automatický výběr +TP_RAWPANEL_DEMOSAICING;Demozajkování +TP_RAWPANEL_PREPROCESSING;Předzpracování TP_RESIZE_BICUBIC;Bikubická TP_RESIZE_BICUBICSF;Bikubická (Měkčí) TP_RESIZE_BICUBICSH;Bikubická (Ostřejší) TP_RESIZE_BILINEAR;Bilineární +TP_RESIZE_DOWNSCALEB;Downscale (Lepší) +TP_RESIZE_DOWNSCALEF;Downscale (Rychlejší) TP_RESIZE_FULLSIZE;Plná velikost obrázku: TP_RESIZE_H;V: +TP_RESIZE_HEIGHT;Výška TP_RESIZE_LABEL;Změnit rozměry +TP_RESIZE_LANCZOS;Lanczos TP_RESIZE_METHOD;Metoda: TP_RESIZE_NEAREST;Nejbližší TP_RESIZE_SCALE;Měřítko +TP_RESIZE_SPECIFY;Zvolte: TP_RESIZE_W;Š: +TP_RESIZE_WIDTH;Šířka TP_ROTATE_AUTOCROP;Automatický ořez TP_ROTATE_DEGREE;Stupně TP_ROTATE_FILL;Vyplnit -TP_ROTATE_LABEL;Otáčení +TP_ROTATE_LABEL;Otočení TP_ROTATE_SELECTLINE; Vyznač rovinu TP_SHADOWSHLIGHTS_HIGHLIGHTS;Světla TP_SHADOWSHLIGHTS_HLTONALW;Tonální rozsah @@ -576,8 +744,12 @@ TP_SHARPENING_RLD_ITERATIONS;Počet opakování TP_SHARPENING_THRESHOLD;Práh TP_SHARPENING_USM;Maskovat rozostření TP_VIGNETTING_AMOUNT;Míra +TP_VIGNETTING_CENTER;Střed +TP_VIGNETTING_CENTER_X;Střed X +TP_VIGNETTING_CENTER_Y;Střed Y TP_VIGNETTING_LABEL;Oprava vinětace TP_VIGNETTING_RADIUS;Poloměr +TP_VIGNETTING_STRENGTH;Síla TP_WBALANCE_AUTO;Automaticky TP_WBALANCE_CAMERA;Fotoaparát TP_WBALANCE_CUSTOM;Vlastní @@ -594,6 +766,12 @@ ZOOMBAR_NORMAL;Normální ZOOMBAR_PREVIEW;Náhled ZOOMBAR_SCALE;Měřítko ZOOMBAR_SMALL;Malý +ZOOMPANEL_100;(100%) +ZOOMPANEL_NEWCROPWINDOW;Otevřít (nové) okno detailu +ZOOMPANEL_ZOOM100;Zvětšit na 100% 1 +ZOOMPANEL_ZOOMFITSCREEN;Přizpůsobit obrazovce F +ZOOMPANEL_ZOOMIN;Přiblížit + +ZOOMPANEL_ZOOMOUT;Oddálit - !!!!!!!!!!!!!!!!!!!!!!!!! @@ -601,152 +779,5 @@ ZOOMBAR_SMALL;Malý !!!!!!!!!!!!!!!!!!!!!!!!! -!BATCHQUEUE_AUTOSTART;Auto start -!BATCH_PROCESSING;Batch processing -!CURVEEDITOR_CURVE;Curve -!CURVEEDITOR_CURVES;Curves -!CURVEEDITOR_CUSTOM;Custom -!CURVEEDITOR_DARKS;Darks -!CURVEEDITOR_HIGHLIGHTS;Highlights -!CURVEEDITOR_LIGHTS;Lights -!CURVEEDITOR_NURBS;Control cage -!CURVEEDITOR_PARAMETRIC;Parametric -!CURVEEDITOR_SHADOWS;Shadows -!CURVEEDITOR_TYPE;Type: -!EXIFFILTER_METADATAFILTER;Enable Metadata Filters -!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... -!FILEBROWSER_AUTODARKFRAME;Auto dark frame -!FILEBROWSER_CURRENT_NAME;Current name: -!FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory -!FILEBROWSER_NEW_NAME;New name: -!FILEBROWSER_SELECTDARKFRAME;Select dark frame... -!FILEBROWSER_SHOWEXIFINFO;Show EXIF info i -!FILEBROWSER_TOOLTIP_STOPPROCESSING;Start processing automatically when a new job arrives -!FILEBROWSER_USETEMPLATE;Use template: -!GENERAL_AFTER;After -!GENERAL_BEFORE;Before -!GENERAL_HIGH_QUALITY;High Quality -!GENERAL_UNCHANGED;(Unchanged) -!HISTOGRAM_BUTTON_B;B -!HISTOGRAM_BUTTON_G;G -!HISTOGRAM_BUTTON_L;L -!HISTOGRAM_BUTTON_R;R -!HISTORY_MSG_82;Profile Changed -!HISTORY_MSG_83;High quality shadows/highlights -!HISTORY_MSG_84;Perspective correction -!HISTORY_MSG_85;Wavelet coefficients -!HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter -!HISTORY_MSG_94;Contrast by detail levels -!MAIN_BUTTON_FULLSCREEN;Fullscreen -!MAIN_BUTTON_PUTTOQUEUE;Put to queue -!MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image Ctrl+S -!MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor Ctrl+E -!MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen -!MAIN_MSG_ERRORDURINGIMAGESAVING;Error during image saving -!MAIN_MSG_NAVIGATOR;Navigator -!MAIN_MSG_PLACES;Places -!MAIN_TAB_RAW;RAW -!MAIN_TOGGLE_BEFORE_AFTER;B|A -!MAIN_TOOLTIP_TOGGLE;Toggle before/after view B -!NAVIGATOR_B_NA;B = n/a -!NAVIGATOR_B_VALUE;B = %1 -!NAVIGATOR_G_NA;G = n/a -!NAVIGATOR_G_VALUE;G = %1 -!NAVIGATOR_H_NA;H = n/a -!NAVIGATOR_H_VALUE;H = %1 -!NAVIGATOR_LAB_A_NA;A = n/a -!NAVIGATOR_LAB_A_VALUE;A = %1 -!NAVIGATOR_LAB_B_NA;B = n/a -!NAVIGATOR_LAB_B_VALUE;B = %1 -!NAVIGATOR_LAB_L_NA;L = n/a -!NAVIGATOR_LAB_L_VALUE;L = %1 -!NAVIGATOR_R_NA;R = n/a -!NAVIGATOR_R_VALUE;R = %1 -!NAVIGATOR_S_NA;S = n/a -!NAVIGATOR_S_VALUE;S = %1 -!NAVIGATOR_V_NA;V = n/a -!NAVIGATOR_V_VALUE;V = %1 -!NAVIGATOR_XY_NA;x = n/a, y = n/a -!PARTIALPASTE_LABCURVE;Lab curve -!PARTIALPASTE_LABCURVE;Luminance curve -!POPUPBUTTON_SELECTOPTIONHINT;RMB to change option -!PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing -!PREFERENCES_BEHAVIOR;Behavior -!PREFERENCES_CACORRECTION;Apply CA auto correction -!PREFERENCES_DARKFRAME;Dark frame -!PREFERENCES_DCBENHANCE;Apply DCB enhancement step -!PREFERENCES_DCBITERATIONS;Number of DCB iterations -!PREFERENCES_DIRDARKFRAMES;Dark frames directory -!PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_GREENEQUIL;Green equilibration -!PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter -!PREFERENCES_LINEDENOISE;Line noise filter -!PREFERENCES_MULTITAB;Multiple tabs mode -!PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails -!PREFERENCES_PROPERTY;Property -!PREFERENCES_SELECTFONT;Select font -!PREFERENCES_SET;SET -!PREFERENCES_SINGLETAB;Single tab mode -!PREFERENCES_USESYSTEMTHEME; Use System Theme -!PREFERENCES_WORKFLOW;Workflow -!PROGRESSDLG_PROFILECHANGEDINBROWSER;Profile changed in browser -!SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists -!TP_DETAIL_AMOUNT;Amount -!TP_DIRPYRDENOISE_CHROMA;Chrominance -!TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction -!TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer -!TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest -!TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- -!TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ -!TP_DIRPYREQUALIZER_LUMAFINEST;Finest -!TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutral -!TP_DIRPYREQUALIZER_THRESHOLD;Threshold -!TP_EQUALIZER_CONTRAST_MINUS;Contrast- -!TP_EQUALIZER_CONTRAST_PLUS;Contrast+ -!TP_EQUALIZER_FINEST;finest -!TP_EQUALIZER_LABEL;Wavelet equalizer -!TP_EQUALIZER_LARGEST;coarsest -!TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction -!TP_IMPULSEDENOISE_THRESH;Threshold -!TP_LABCURVE_BRIGHTNESS;Brightness -!TP_LABCURVE_CONTRAST;Contrast -!TP_LABCURVE_CURVEEDITOR;Luminance Curve -!TP_LABCURVE_LABEL;Lab Curves -!TP_LABCURVE_SATURATION;Saturation -!TP_LENSGEOM_AUTOCROP;Auto Crop -!TP_LENSGEOM_FILL;Auto Fill -!TP_LENSGEOM_LABEL;Lens / Geometry -!TP_PERSPECTIVE_HORIZONTAL;Horizontal -!TP_PERSPECTIVE_LABEL;Perspective -!TP_PERSPECTIVE_VERTICAL;Vertical -!TP_PREPROCESS_DARKFRAME;Dark frame -!TP_PREPROCESS_DFAUTOSELECT;Auto selection -!TP_RAWPANEL_DEMOSAICING;Demosaicing -!TP_RAWPANEL_PREPROCESSING;Preprocessing -!TP_RESIZE_DOWNSCALEB;Downscale (Better) -!TP_RESIZE_DOWNSCALEF;Downscale (Faster) -!TP_RESIZE_HEIGHT;Height -!TP_RESIZE_LANCZOS;Lanczos -!TP_RESIZE_SPECIFY;Specify: -!TP_RESIZE_WIDTH;Width -!TP_VIGNETTING_CENTER;Center -!TP_VIGNETTING_CENTER_X;Center X -!TP_VIGNETTING_CENTER_Y;Center Y -!TP_VIGNETTING_STRENGTH;Strength -!ZOOMPANEL_100;(100%) -!ZOOMPANEL_NEWCROPWINDOW;Open (new) detail window -!ZOOMPANEL_ZOOM100;Zoom to 100% 1 -!ZOOMPANEL_ZOOMFITSCREEN;Fit to screen F -!ZOOMPANEL_ZOOMIN;Zoom In + -!ZOOMPANEL_ZOOMOUT;Zoom Out - +!EDITWINDOW_TITLE;Image Edit +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index 1603802c4..a1706878c 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -611,6 +611,7 @@ ZOOMBAR_SMALL;Lille !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -629,18 +630,29 @@ ZOOMBAR_SMALL;Lille !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -676,7 +688,7 @@ ZOOMBAR_SMALL;Lille !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -688,7 +700,9 @@ ZOOMBAR_SMALL;Lille !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -701,9 +715,9 @@ ZOOMBAR_SMALL;Lille !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -716,7 +730,23 @@ ZOOMBAR_SMALL;Lille !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 932462985..9ce148fa7 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -11,9 +11,13 @@ #09 Leichte Anpassungen (keenonkites/klonk) #10 Erweiterung (oduis) #11 Erweiterung (oduis) +#12 Erweiterung (oduis) +#13 Erweiterung (oduis) ADJUSTER_RESET_TO_DEFAULT;Standard wiederherstellen BATCHQUEUE_AUTOSTART;Automatisch starten BATCH_PROCESSING;Batch-Verarbeitung +CURVEEDITOR_CURVE;Kurve +CURVEEDITOR_CURVES;Kurven CURVEEDITOR_CUSTOM;Angepasst CURVEEDITOR_DARKS;Tiefen CURVEEDITOR_FILEDLGFILTERANY;Alle Dateien @@ -30,6 +34,7 @@ CURVEEDITOR_TOOLTIPLINEAR;Zurücksetzen der Kurve (linear) CURVEEDITOR_TOOLTIPLOAD;Laden einer Kurve CURVEEDITOR_TOOLTIPSAVE;Speichern der aktuellen Kurve CURVEEDITOR_TYPE;Typ: +EDITWINDOW_TITLE;Bildbearbeitung EXIFFILTER_APERTURE;Blende EXIFFILTER_CAMERA;Kamera EXIFFILTER_DIALOGLABEL;Exif Filter @@ -144,6 +149,11 @@ HISTORY_CUSTOMCURVE;Benutzerdefinierte Kurve HISTORY_DELSNAPSHOT;Variante löschen HISTORY_FROMCLIPBOARD;Aus der Zwischenablage HISTORY_LABEL;Abfolge der Änderungen +HISTORY_MSG_100;RGB Sättigung +HISTORY_MSG_101;HSV EQ -- Farbton +HISTORY_MSG_102;HSV EQ -- Sättigung +HISTORY_MSG_103;HSV EQ -- Hellwert +HISTORY_MSG_104;HSV Mixer HISTORY_MSG_10;Schatten-Kompression HISTORY_MSG_11;Tonwertkurve HISTORY_MSG_12;Automatische Belichtung @@ -227,13 +237,21 @@ HISTORY_MSG_82;Profil geändert HISTORY_MSG_83;Schatten/Lichter hohe Qualität HISTORY_MSG_84;Perspektivische Korrektur HISTORY_MSG_85;Wavelet Koeffizienten -HISTORY_MSG_86;Wavelet Equalizer -HISTORY_MSG_87;Impulsrauschfilter +HISTORY_MSG_86;Wavelet Mixer +HISTORY_MSG_87;Fleckrauschfilter +HISTORY_MSG_88;Fleckrauschf. Schwelle HISTORY_MSG_89;Gerichtete Pyramide HISTORY_MSG_8;Belichtungskorrektur HISTORY_MSG_90;Gerichtete Pyramide Luminanz HISTORY_MSG_91;Gerichtete Pyramide Chrominanz HISTORY_MSG_92;Gerichtete Pyramide Gamma +HISTORY_MSG_93;Kontrast nach Detailebene-Parameter +HISTORY_MSG_94;Kontrast nach Detailebenen +HISTORY_MSG_95;Sättigung +HISTORY_MSG_96;'a'-Kurve +HISTORY_MSG_97;'b'-Kurve +HISTORY_MSG_98;Entrasterung +HISTORY_MSG_99;Vorverarbeitung HISTORY_MSG_9;Lichter-Kompression HISTORY_NEWSNAPSHOT;Neue Variante HISTORY_NEWSNAPSHOTAS;als... @@ -399,6 +417,7 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;Schatten/Lichter PARTIALPASTE_SHARPENING;Schärfen PARTIALPASTE_VIGNETTING;Korrektur Vignettierung PARTIALPASTE_WHITEBALANCE;Weissabgleich +POPUPBUTTON_SELECTOPTIONHINT;Rechter Mausklick zum Ändern PREFERENCES_ADD;HINZU PREFERENCES_APPLNEXTSTARTUP;beim nächsten Programmstart aktiv PREFERENCES_BATCH_PROCESSING;Batch-Verarbeitung @@ -462,6 +481,7 @@ PREFERENCES_LINEDENOISE;Zeilenrausch-Filter PREFERENCES_LIVETHUMBNAILS;Live Voransichten (langsamer) PREFERENCES_MONITORICC;Monitor-Profil PREFERENCES_MULTITAB;Multi-Reiter Modus +PREFERENCES_MULTITABDUALMON;Multi-Reiter Modus, auf zweitem Monitor wenn verfügbar PREFERENCES_OUTDIR;Ausgabe-Verzeichnis PREFERENCES_OUTDIRFOLDER;Speichern in Verzeichnis PREFERENCES_OUTDIRFOLDERHINT;Ablegen der gespeicherten Bilder in ein ausgewähltes Verzeichnis @@ -469,6 +489,7 @@ PREFERENCES_OUTDIRHINT;Die folgenden Variablen können verwendet werden:\ PREFERENCES_OUTDIRTEMPLATE;Verwenden einer Vorlage PREFERENCES_OUTDIRTEMPLATEHINT;Die folgenden Variablen können verwendet werden:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nDiese Variablen referenzieren die Verzeichnisse und Unterverzeichnisse des Pfades in dem das RAW liegt.\n\nWenn zum Beispiele /home/tom/image/02-09-2006/dsc0012.nefgeöffnet wurde, dann haben die Variablen den folgenden Inhalt:\n%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\nWenn Sie die Ausgabedatei in das selbe Verzeichnis wie das RAW speichern wollen, dann wählen Sie:\n%p1/%f\n\nWenn sie die Ausgabedatei in ein Unterverzeichnis mit dem Namen 'konvertiert' schreiben wollen, wählen sie:\n%p1/konvertiert/%f\n\nWenn Sie die Ausgabedatei im Verzeichnis '/home/tom/converted' unter beibehaltung des letzen Verzeichnisses wo das RAW lag, dann wählen sie:\n%p2/converted/%d1/%f PREFERENCES_OVERLAY_FILENAMES;Dateinamen auf Vorschaubildern anzeigen +PREFERENCES_OVERWRITEOUTPUTFILE;Bestehende Ausgabe-Dateien überschreiben PREFERENCES_PARSEDEXT;Im Datei-Browser angezeigte Datei-Typen PREFERENCES_PARSEDEXTADD;Datei-Typ hinzufügen PREFERENCES_PARSEDEXTADDHINT;Gebe einen Datei-Typ (Extension) ein und drücke diesen Knopf um diesen Typ hinzuzufügen @@ -601,7 +622,7 @@ TP_DIRPYRDENOISE_CHROMA;Chrominanz TP_DIRPYRDENOISE_GAMMA;Gamma TP_DIRPYRDENOISE_LABEL;Direktionale Pyramiden-Rauschminderung TP_DIRPYRDENOISE_LUMA;Luminanz -TP_DIRPYREQUALIZER_LABEL;Direktionaler Pyramiden-Equalizer +TP_DIRPYREQUALIZER_LABEL;Direktionaler Pyramiden-Mixer TP_DIRPYREQUALIZER_LUMACOARSEST;Gröbstes TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Kontrast- TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Kontrast+ @@ -613,7 +634,7 @@ TP_DISTORTION_LABEL;Entzerrung TP_EQUALIZER_CONTRAST_MINUS;Kontrast- TP_EQUALIZER_CONTRAST_PLUS;Kontrast+ TP_EQUALIZER_FINEST;Feinstes -TP_EQUALIZER_LABEL;Wavelet-Equalizer +TP_EQUALIZER_LABEL;Wavelet-Mixer TP_EQUALIZER_LARGEST;Gröbstes TP_EQUALIZER_NEUTRAL;Neutral TP_EXPOSURE_AUTOLEVELS;Auto @@ -626,14 +647,29 @@ TP_EXPOSURE_CONTRAST;Kontrast TP_EXPOSURE_CURVEEDITOR;Tonwertkurve TP_EXPOSURE_EXPCOMP;Belichtungskorrektur TP_EXPOSURE_LABEL;Belichtung +TP_EXPOSURE_SATURATION;Sättigung TP_HLREC_CIELAB;CIELab Überlagerung TP_HLREC_COLOR;Farbübertragung TP_HLREC_LABEL;Lichter wiederherstellen TP_HLREC_LUMINANCE;Luminanz wiederherstellen TP_HLREC_METHOD;Methode: +TP_HSVEQUALIZER1;Rot +TP_HSVEQUALIZER2;Orange +TP_HSVEQUALIZER3;Gelb +TP_HSVEQUALIZER4;Grün +TP_HSVEQUALIZER5;Aquamarin +TP_HSVEQUALIZER6;Blau +TP_HSVEQUALIZER7;Violett +TP_HSVEQUALIZER8;Magenta +TP_HSVEQUALIZER_CHANNEL;HSV Kanal +TP_HSVEQUALIZER_HUE;Farbton +TP_HSVEQUALIZER_LABEL;HSV Mixer +TP_HSVEQUALIZER_NEUTRAL;Neutral +TP_HSVEQUALIZER_SAT;Sättigung +TP_HSVEQUALIZER_VAL;Hellwert TP_ICM_FILEDLGFILTERANY;Alle Dateien TP_ICM_FILEDLGFILTERICM;ICC-Profildateien -TP_ICM_GAMMABEFOREINPUT;Profil enthält Gammaanpassung +TP_ICM_GAMMABEFOREINPUT;Profil enthält Gamma-Anpassung TP_ICM_INPUTCAMERA;Kamera-Standard TP_ICM_INPUTCUSTOM;Benutzerdefiniert TP_ICM_INPUTDLGLABEL;Wähle Eingabe-ICC-Profil... @@ -645,7 +681,7 @@ TP_ICM_OUTPUTDLGLABEL;Wähle Ausgabe-ICC-Profil... TP_ICM_OUTPUTPROFILE;Ausgabeprofil TP_ICM_SAVEREFERENCE;Speichere Referenzbild für die Profilierung TP_ICM_WORKINGPROFILE;Arbeitsfarbraum -TP_IMPULSEDENOISE_LABEL;Impulsrauschminderung +TP_IMPULSEDENOISE_LABEL;Fleckrauschminderung TP_IMPULSEDENOISE_THRESH;Schwellwert TP_LABCURVE_BRIGHTNESS;Helligkeit TP_LABCURVE_CONTRAST;Kontrast @@ -753,8 +789,4 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen !!!!!!!!!!!!!!!!!!!!!!!!! -!CURVEEDITOR_CURVE;Curve -!CURVEEDITOR_CURVES;Curves -!HISTORY_MSG_93;Contrast by detail levels parameter -!HISTORY_MSG_94;Contrast by detail levels -!POPUPBUTTON_SELECTOPTIONHINT;RMB to change option +!TP_ICM_INPUTNONE;No profile diff --git a/rtdata/languages/English b/rtdata/languages/English index 6cc5252c4..ea525f60a 100644 --- a/rtdata/languages/English +++ b/rtdata/languages/English @@ -28,6 +28,7 @@ !CURVEEDITOR_TOOLTIPLOAD;Load a curve from file !CURVEEDITOR_TOOLTIPSAVE;Save current curve !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_APERTURE;Aperture !EXIFFILTER_CAMERA;Camera !EXIFFILTER_DIALOGLABEL;Exif Filter @@ -142,6 +143,11 @@ !HISTORY_DELSNAPSHOT;Del !HISTORY_FROMCLIPBOARD;From clipboard !HISTORY_LABEL;History +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_10;Shadow Compression !HISTORY_MSG_11;Tone Curve !HISTORY_MSG_12;Auto Exposure @@ -151,7 +157,7 @@ !HISTORY_MSG_16;Luminance Black !HISTORY_MSG_17;Luminance Highlight Compr. !HISTORY_MSG_18;Luminance Shadow Compr. -!HISTORY_MSG_19;Luminance Curve +!HISTORY_MSG_19;'L' Curve !HISTORY_MSG_1;Photo Loaded !HISTORY_MSG_20;Sharpening !HISTORY_MSG_21;Sharpening Radius @@ -226,14 +232,20 @@ !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction !HISTORY_MSG_8;Exposure Compensation -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !HISTORY_MSG_9;Highlight Compression !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOTAS;As... @@ -402,7 +414,7 @@ !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD !PREFERENCES_APPLNEXTSTARTUP;restart required -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_BLINKCLIPPED;Blink clipped areas !PREFERENCES_CACHECLEARALL;Clear All @@ -459,6 +471,7 @@ !PREFERENCES_LIVETHUMBNAILS;Live Thumbnails (slower) !PREFERENCES_MONITORICC;Monitor Profile !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OUTDIR;Output Directory !PREFERENCES_OUTDIRFOLDER;Save to folder !PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the selected folder @@ -466,6 +479,7 @@ !PREFERENCES_OUTDIRTEMPLATE;Use Template !PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:n%f, %d1, %d2, ..., %p1, %p2, ...nnThese formatting strings refer to the different parts of the photo's pathname.nnFor example, if the photo being processed has the following pathname:n/home/tom/photos/2010-10-31/dsc0042.nefnthe meaning of the formatting strings are:n%d4 = homen%d3 = tomn%d2 = photosn%d1 = 2010-10-31n%f = dsc0042n%p1 = /home/tom/photos/2010-10-31/n%p2 = /home/tom/photos/n%p3 = /home/tom/n%p4 = /home/nnIf you want to save the output image where the original is, write:n%p1/%fnnIf you want to save the output image in a directory named "converted" located in the directory of the opened image, write:n%p1/converted/%fnnIf you want to save the output image in a directory named "/home/tom/photos/converted/2010-10-31", write:n%p2/converted/%d1/%f !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PARSEDEXT;Parsed Extensions !PREFERENCES_PARSEDEXTADD;Add Extension !PREFERENCES_PARSEDEXTADDHINT;Type an extension and press this button to append list @@ -596,9 +610,9 @@ !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -623,11 +637,26 @@ !TP_EXPOSURE_CURVEEDITOR;Tone Curve !TP_EXPOSURE_EXPCOMP;Exp. Comp. !TP_EXPOSURE_LABEL;Exposure +!TP_EXPOSURE_SATURATION;Saturation !TP_HLREC_CIELAB;CIELab Blending !TP_HLREC_COLOR;Color Propagation !TP_HLREC_LABEL;Highlight Reconstruction !TP_HLREC_LUMINANCE;Luminance Recovery !TP_HLREC_METHOD;Method: +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value !TP_ICM_FILEDLGFILTERANY;Any files !TP_ICM_FILEDLGFILTERICM;ICC Profile Files !TP_ICM_GAMMABEFOREINPUT;Profile applies Gamma @@ -635,6 +664,7 @@ !TP_ICM_INPUTCUSTOM;Custom !TP_ICM_INPUTDLGLABEL;Select Input ICC Profile... !TP_ICM_INPUTEMBEDDED;Use Embedded, if possible +!TP_ICM_INPUTNONE;No profile !TP_ICM_INPUTPROFILE;Input Profile !TP_ICM_LABEL;ICM !TP_ICM_NOICM;No ICM: sRGB output @@ -642,7 +672,7 @@ !TP_ICM_OUTPUTPROFILE;Output Profile !TP_ICM_SAVEREFERENCE;Save reference image for profiling !TP_ICM_WORKINGPROFILE;Working Profile -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast @@ -683,12 +713,12 @@ !TP_ROTATE_LABEL;Rotate !TP_ROTATE_SELECTLINE; Select Straight Line !TP_SHADOWSHLIGHTS_HIGHLIGHTS;Highlights -!TP_SHADOWSHLIGHTS_HLTONALW;Tonal Width +!TP_SHADOWSHLIGHTS_HLTONALW;Tonal Width for Highlights !TP_SHADOWSHLIGHTS_LABEL;Shadows/Highlights !TP_SHADOWSHLIGHTS_LOCALCONTR;Local Contrast !TP_SHADOWSHLIGHTS_RADIUS;Radius !TP_SHADOWSHLIGHTS_SHADOWS;Shadows -!TP_SHADOWSHLIGHTS_SHTONALW;Tonal Width +!TP_SHADOWSHLIGHTS_SHTONALW;Tonal Width for Shadows !TP_SHARPENING_AMOUNT;Amount !TP_SHARPENING_EDRADIUS;Radius !TP_SHARPENING_EDTOLERANCE;Edge tolerance diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 65faf1d8e..99ac3b000 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -57,6 +57,7 @@ TP_HLREC_COLOR;Colour Propagation !CURVEEDITOR_TOOLTIPLOAD;Load a curve from file !CURVEEDITOR_TOOLTIPSAVE;Save current curve !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_APERTURE;Aperture !EXIFFILTER_CAMERA;Camera !EXIFFILTER_DIALOGLABEL;Exif Filter @@ -171,6 +172,11 @@ TP_HLREC_COLOR;Colour Propagation !HISTORY_DELSNAPSHOT;Del !HISTORY_FROMCLIPBOARD;From clipboard !HISTORY_LABEL;History +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_10;Shadow Compression !HISTORY_MSG_11;Tone Curve !HISTORY_MSG_12;Auto Exposure @@ -180,7 +186,7 @@ TP_HLREC_COLOR;Colour Propagation !HISTORY_MSG_16;Luminance Black !HISTORY_MSG_17;Luminance Highlight Compr. !HISTORY_MSG_18;Luminance Shadow Compr. -!HISTORY_MSG_19;Luminance Curve +!HISTORY_MSG_19;'L' Curve !HISTORY_MSG_1;Photo Loaded !HISTORY_MSG_20;Sharpening !HISTORY_MSG_21;Sharpening Radius @@ -239,14 +245,20 @@ TP_HLREC_COLOR;Colour Propagation !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction !HISTORY_MSG_8;Exposure Compensation -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !HISTORY_MSG_9;Highlight Compression !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOTAS;As... @@ -405,7 +417,7 @@ TP_HLREC_COLOR;Colour Propagation !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD !PREFERENCES_APPLNEXTSTARTUP;restart required -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_BLINKCLIPPED;Blink clipped areas !PREFERENCES_CACHECLEARALL;Clear All @@ -461,6 +473,7 @@ TP_HLREC_COLOR;Colour Propagation !PREFERENCES_LIVETHUMBNAILS;Live Thumbnails (slower) !PREFERENCES_MONITORICC;Monitor Profile !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OUTDIR;Output Directory !PREFERENCES_OUTDIRFOLDER;Save to folder !PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the selected folder @@ -468,6 +481,7 @@ TP_HLREC_COLOR;Colour Propagation !PREFERENCES_OUTDIRTEMPLATE;Use Template !PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:n%f, %d1, %d2, ..., %p1, %p2, ...nnThese formatting strings refer to the different parts of the photo's pathname.nnFor example, if the photo being processed has the following pathname:n/home/tom/photos/2010-10-31/dsc0042.nefnthe meaning of the formatting strings are:n%d4 = homen%d3 = tomn%d2 = photosn%d1 = 2010-10-31n%f = dsc0042n%p1 = /home/tom/photos/2010-10-31/n%p2 = /home/tom/photos/n%p3 = /home/tom/n%p4 = /home/nnIf you want to save the output image where the original is, write:n%p1/%fnnIf you want to save the output image in a directory named "converted" located in the directory of the opened image, write:n%p1/converted/%fnnIf you want to save the output image in a directory named "/home/tom/photos/converted/2010-10-31", write:n%p2/converted/%d1/%f !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PARSEDEXT;Parsed Extensions !PREFERENCES_PARSEDEXTADD;Add Extension !PREFERENCES_PARSEDEXTADDHINT;Type an extension and press this button to append list @@ -593,9 +607,9 @@ TP_HLREC_COLOR;Colour Propagation !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -620,10 +634,25 @@ TP_HLREC_COLOR;Colour Propagation !TP_EXPOSURE_CURVEEDITOR;Tone Curve !TP_EXPOSURE_EXPCOMP;Exp. Comp. !TP_EXPOSURE_LABEL;Exposure +!TP_EXPOSURE_SATURATION;Saturation !TP_HLREC_CIELAB;CIELab Blending !TP_HLREC_LABEL;Highlight Reconstruction !TP_HLREC_LUMINANCE;Luminance Recovery !TP_HLREC_METHOD;Method: +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value !TP_ICM_FILEDLGFILTERANY;Any files !TP_ICM_FILEDLGFILTERICM;ICC Profile Files !TP_ICM_GAMMABEFOREINPUT;Profile applies Gamma @@ -631,6 +660,7 @@ TP_HLREC_COLOR;Colour Propagation !TP_ICM_INPUTCUSTOM;Custom !TP_ICM_INPUTDLGLABEL;Select Input ICC Profile... !TP_ICM_INPUTEMBEDDED;Use Embedded, if possible +!TP_ICM_INPUTNONE;No profile !TP_ICM_INPUTPROFILE;Input Profile !TP_ICM_LABEL;ICM !TP_ICM_NOICM;No ICM: sRGB output @@ -638,7 +668,7 @@ TP_HLREC_COLOR;Colour Propagation !TP_ICM_OUTPUTPROFILE;Output Profile !TP_ICM_SAVEREFERENCE;Save reference image for profiling !TP_ICM_WORKINGPROFILE;Working Profile -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast @@ -679,12 +709,12 @@ TP_HLREC_COLOR;Colour Propagation !TP_ROTATE_LABEL;Rotate !TP_ROTATE_SELECTLINE; Select Straight Line !TP_SHADOWSHLIGHTS_HIGHLIGHTS;Highlights -!TP_SHADOWSHLIGHTS_HLTONALW;Tonal Width +!TP_SHADOWSHLIGHTS_HLTONALW;Tonal Width for Highlights !TP_SHADOWSHLIGHTS_LABEL;Shadows/Highlights !TP_SHADOWSHLIGHTS_LOCALCONTR;Local Contrast !TP_SHADOWSHLIGHTS_RADIUS;Radius !TP_SHADOWSHLIGHTS_SHADOWS;Shadows -!TP_SHADOWSHLIGHTS_SHTONALW;Tonal Width +!TP_SHADOWSHLIGHTS_SHTONALW;Tonal Width for Shadows !TP_SHARPENING_AMOUNT;Amount !TP_SHARPENING_EDRADIUS;Radius !TP_SHARPENING_EDTOLERANCE;Edge tolerance diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index a6520951a..8b92bf17e 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -28,6 +28,7 @@ !CURVEEDITOR_TOOLTIPLOAD;Load a curve from file !CURVEEDITOR_TOOLTIPSAVE;Save current curve !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_APERTURE;Aperture !EXIFFILTER_CAMERA;Camera !EXIFFILTER_DIALOGLABEL;Exif Filter @@ -142,6 +143,11 @@ !HISTORY_DELSNAPSHOT;Del !HISTORY_FROMCLIPBOARD;From clipboard !HISTORY_LABEL;History +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_10;Shadow Compression !HISTORY_MSG_11;Tone Curve !HISTORY_MSG_12;Auto Exposure @@ -151,7 +157,7 @@ !HISTORY_MSG_16;Luminance Black !HISTORY_MSG_17;Luminance Highlight Compr. !HISTORY_MSG_18;Luminance Shadow Compr. -!HISTORY_MSG_19;Luminance Curve +!HISTORY_MSG_19;'L' Curve !HISTORY_MSG_1;Photo Loaded !HISTORY_MSG_20;Sharpening !HISTORY_MSG_21;Sharpening Radius @@ -226,14 +232,20 @@ !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction !HISTORY_MSG_8;Exposure Compensation -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !HISTORY_MSG_9;Highlight Compression !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOTAS;As... @@ -402,7 +414,7 @@ !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD !PREFERENCES_APPLNEXTSTARTUP;restart required -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_BLINKCLIPPED;Blink clipped areas !PREFERENCES_CACHECLEARALL;Clear All @@ -459,6 +471,7 @@ !PREFERENCES_LIVETHUMBNAILS;Live Thumbnails (slower) !PREFERENCES_MONITORICC;Monitor Profile !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OUTDIR;Output Directory !PREFERENCES_OUTDIRFOLDER;Save to folder !PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the selected folder @@ -466,6 +479,7 @@ !PREFERENCES_OUTDIRTEMPLATE;Use Template !PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:n%f, %d1, %d2, ..., %p1, %p2, ...nnThese formatting strings refer to the different parts of the photo's pathname.nnFor example, if the photo being processed has the following pathname:n/home/tom/photos/2010-10-31/dsc0042.nefnthe meaning of the formatting strings are:n%d4 = homen%d3 = tomn%d2 = photosn%d1 = 2010-10-31n%f = dsc0042n%p1 = /home/tom/photos/2010-10-31/n%p2 = /home/tom/photos/n%p3 = /home/tom/n%p4 = /home/nnIf you want to save the output image where the original is, write:n%p1/%fnnIf you want to save the output image in a directory named "converted" located in the directory of the opened image, write:n%p1/converted/%fnnIf you want to save the output image in a directory named "/home/tom/photos/converted/2010-10-31", write:n%p2/converted/%d1/%f !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PARSEDEXT;Parsed Extensions !PREFERENCES_PARSEDEXTADD;Add Extension !PREFERENCES_PARSEDEXTADDHINT;Type an extension and press this button to append list @@ -596,9 +610,9 @@ !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -623,11 +637,26 @@ !TP_EXPOSURE_CURVEEDITOR;Tone Curve !TP_EXPOSURE_EXPCOMP;Exp. Comp. !TP_EXPOSURE_LABEL;Exposure +!TP_EXPOSURE_SATURATION;Saturation !TP_HLREC_CIELAB;CIELab Blending !TP_HLREC_COLOR;Color Propagation !TP_HLREC_LABEL;Highlight Reconstruction !TP_HLREC_LUMINANCE;Luminance Recovery !TP_HLREC_METHOD;Method: +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value !TP_ICM_FILEDLGFILTERANY;Any files !TP_ICM_FILEDLGFILTERICM;ICC Profile Files !TP_ICM_GAMMABEFOREINPUT;Profile applies Gamma @@ -635,6 +664,7 @@ !TP_ICM_INPUTCUSTOM;Custom !TP_ICM_INPUTDLGLABEL;Select Input ICC Profile... !TP_ICM_INPUTEMBEDDED;Use Embedded, if possible +!TP_ICM_INPUTNONE;No profile !TP_ICM_INPUTPROFILE;Input Profile !TP_ICM_LABEL;ICM !TP_ICM_NOICM;No ICM: sRGB output @@ -642,7 +672,7 @@ !TP_ICM_OUTPUTPROFILE;Output Profile !TP_ICM_SAVEREFERENCE;Save reference image for profiling !TP_ICM_WORKINGPROFILE;Working Profile -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast @@ -683,12 +713,12 @@ !TP_ROTATE_LABEL;Rotate !TP_ROTATE_SELECTLINE; Select Straight Line !TP_SHADOWSHLIGHTS_HIGHLIGHTS;Highlights -!TP_SHADOWSHLIGHTS_HLTONALW;Tonal Width +!TP_SHADOWSHLIGHTS_HLTONALW;Tonal Width for Highlights !TP_SHADOWSHLIGHTS_LABEL;Shadows/Highlights !TP_SHADOWSHLIGHTS_LOCALCONTR;Local Contrast !TP_SHADOWSHLIGHTS_RADIUS;Radius !TP_SHADOWSHLIGHTS_SHADOWS;Shadows -!TP_SHADOWSHLIGHTS_SHTONALW;Tonal Width +!TP_SHADOWSHLIGHTS_SHTONALW;Tonal Width for Shadows !TP_SHARPENING_AMOUNT;Amount !TP_SHARPENING_EDRADIUS;Radius !TP_SHARPENING_EDTOLERANCE;Edge tolerance diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index cfb8e5b10..05feb3104 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -8,15 +8,26 @@ #06 09.06.2008: Ramon, Adaptions regarding 2.4m1 and others #07 20.09.2008: keenonkites, first version for 2.4m2 #08 19.12.2008: keenonkites, first version for 2.4beta4 +#09 07.12.2010: rickydh, some translations of untranslated keys for 3.0 alpha1 ADJUSTER_RESET_TO_DEFAULT;Restablece los valores predeterminados +BATCHQUEUE_AUTOSTART;Inicio automático +BATCH_PROCESSING;Proceso por lotes +CURVEEDITOR_CURVE;Curva +CURVEEDITOR_CURVES;Curvas +CURVEEDITOR_CUSTOM;Personalizado CURVEEDITOR_FILEDLGFILTERANY;Cuaquier archivo CURVEEDITOR_FILEDLGFILTERCURVE;Archivos de curvas +CURVEEDITOR_HIGHLIGHTS;Luces altas +CURVEEDITOR_LIGHTS;Luces CURVEEDITOR_LINEAR;Lineal CURVEEDITOR_LOADDLGLABEL;Cargar curva... +CURVEEDITOR_PARAMETRIC;Parametrica CURVEEDITOR_SAVEDLGLABEL;Guardar curva... +CURVEEDITOR_SHADOWS;Sombras CURVEEDITOR_TOOLTIPLINEAR;Restablece la curva a lineal CURVEEDITOR_TOOLTIPLOAD;Abre una curva desde un archivo CURVEEDITOR_TOOLTIPSAVE;Guarda curva actual +CURVEEDITOR_TYPE;Tipo: EXIFFILTER_APERTURE;Diafragma EXIFFILTER_CAMERA;Cámera EXIFFILTER_DIALOGLABEL;Filtro Exif @@ -38,10 +49,12 @@ EXIFPANEL_RESETALL;Reiniciar todo EXIFPANEL_RESETALLHINT;Reiniciar todos los atributos a los valores originales EXIFPANEL_RESETHINT;Reiniciar atributos seleccionados a los valores originales EXIFPANEL_SUBDIRECTORY;Subcarpeta +FILEBROWSER_ADDDELTEMPLATE;Añadir/Borrar plantillas... FILEBROWSER_APPLYPROFILE;Aplicar perfil FILEBROWSER_ARRANGEMENTHINT;Cambiar disposición de las miniaturas entre horizontal y vertical FILEBROWSER_CLEARPROFILE;Borrar perfil FILEBROWSER_COPYPROFILE;Copiar perfil +FILEBROWSER_CURRENT_NAME;Nombre actual: FILEBROWSER_DELETEDLGLABEL;Confirmacion de borrar archivos FILEBROWSER_DELETEDLGMSG;¿Seguro que quieres borrar los %1 archivos seleccionados? FILEBROWSER_EMPTYTRASH;Vaciar papelera @@ -51,6 +64,7 @@ FILEBROWSER_EXIFFILTERAPPLYHINT;Activar/desactivar filtro exif en el explorador FILEBROWSER_EXIFFILTERLABEL;Filtro Exif FILEBROWSER_EXIFFILTERSETTINGS;Ajuste FILEBROWSER_EXIFFILTERSETTINGSHINT;Cambiar ajustes del filtro exif +FILEBROWSER_NEW_NAME;Nuevo nombre: FILEBROWSER_PARTIALPASTEPROFILE;Pegar perfil parcialmente FILEBROWSER_PASTEPROFILE;Pegar perfil FILEBROWSER_POPUPCANCELJOB;Cancelar trabajo @@ -74,6 +88,7 @@ FILEBROWSER_PROCESSINGSETTINGSHINT;Ajustar formato de archivo y carpeta de salid FILEBROWSER_RENAMEDLGLABEL;Renombrar archivo FILEBROWSER_RENAMEDLGMSG;Renombrar archive "%1"a: FILEBROWSER_SHOWDIRHINT;Mostrar todas imagenes de la carpeta +FILEBROWSER_SHOWEXIFINFO;Mostrar información EXIF i FILEBROWSER_SHOWQUEUEHINT;Mostrar contenido de la cola de procesamiento FILEBROWSER_SHOWRANK1HINT;Mostrar imagenes con 1 estrella FILEBROWSER_SHOWRANK2HINT;Mostrar imagenes con 2 estrellas @@ -87,14 +102,18 @@ FILEBROWSER_STARTPROCESSINGHINT;Iniciar procesamiento de imagenes en la cola FILEBROWSER_STOPPROCESSING;Parar procesamiento FILEBROWSER_STOPPROCESSINGHINT;Parar procesamiento de imagenes en la cola FILEBROWSER_THUMBSIZE;Tamaño miniatura +FILEBROWSER_USETEMPLATE;Utilizar plantilla: FILEBROWSER_ZOOMINHINT;Agrandar miniatura FILEBROWSER_ZOOMOUTHINT;Reducir miniatura GENERAL_ABOUT;Acerca de +GENERAL_AFTER;Despues +GENERAL_BEFORE;Antes GENERAL_CANCEL;Cancelar GENERAL_DISABLE;Desactivar GENERAL_DISABLED;Desactivado GENERAL_ENABLE;Activar GENERAL_ENABLED;Activado +GENERAL_HIGH_QUALITY;Alta Calidad GENERAL_LANDSCAPE;Paisaje GENERAL_LOAD;Abrir GENERAL_NA;n/a @@ -102,6 +121,7 @@ GENERAL_NO;No GENERAL_OK;Aceptar GENERAL_PORTRAIT;Retrato GENERAL_SAVE;Guardar +GENERAL_UNCHANGED;(Sin cambios) GENERAL_YES;Sí HISTOGRAM_LABEL;Histograma HISTOGRAM_TOOLTIP_B;Mostrar/Ocultar histograma AZUL @@ -192,7 +212,14 @@ HISTORY_MSG_79;Resize width HISTORY_MSG_7;Negro HISTORY_MSG_80;Resize height HISTORY_MSG_81;Resize enabled +HISTORY_MSG_82;Perfil Cambiado +HISTORY_MSG_83;Alta Calidad Sombras/Luces Altas +HISTORY_MSG_84;Corrección de Perspectiva +HISTORY_MSG_89;Reducción de ruido HISTORY_MSG_8;Compensación de Exposición +HISTORY_MSG_95;Saturacion +HISTORY_MSG_96;Curva 'a' +HISTORY_MSG_97;Curva 'b' HISTORY_MSG_9;Compresión de Luces Altas HISTORY_NEWSNAPSHOT;Instantánea nueva HISTORY_NEWSNAPSHOTAS;Como... @@ -259,10 +286,14 @@ IPTCPANEL_TRANSREFERENCE;Ref. trans. original IPTCPANEL_TRANSREFERENCEHINT;Un código que representa el lugar de la transmisión original (Original Transmission Reference). MAIN_BUTTON_EXIT;Exit MAIN_BUTTON_PREFERENCES;Preferencias +MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Añadir imagen actual a la cola de procesamiento Ctrl+Q MAIN_BUTTON_QUEUE;Put to queue MAIN_BUTTON_SAVE;Guardar Imagen MAIN_BUTTON_SAVEAS;Como... +MAIN_BUTTON_SAVE_TOOLTIP;Guardar imagen actual Ctrl+S MAIN_BUTTON_SENDTOEDITOR;Abrir con editor +MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Editar imagen actual en editor externo Ctrl+E +MAIN_BUTTON_UNFULLSCREEN;Salir de Pantalla Completa MAIN_FRAME_BATCHQUEUE;Batch Queue MAIN_FRAME_FILEBROWSER;File Browser MAIN_FRAME_PLACES;Places @@ -274,6 +305,7 @@ MAIN_MSG_CANNOTLOAD;No se puede abrir imagen MAIN_MSG_CANNOTSAVE;Error al guardar archivo MAIN_MSG_CANNOTSTARTEDITOR;Problema abriendo con editor. MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Porfavor ajusten las preferencias. +MAIN_MSG_ERRORDURINGIMAGESAVING;Error al guardar imagen MAIN_MSG_EXITJOBSINQUEUEINFO;Saliendo del programa imagenes no terminados en la cola son perdidos. MAIN_MSG_EXITJOBSINQUEUEQUEST;Estas seguro de salis ? Hay imagenes no terminados en la cola. MAIN_MSG_JOBSINQUEUE;trabajo(s) en cola @@ -288,6 +320,7 @@ MAIN_TAB_FILTER;Filter MAIN_TAB_ICM;GIC MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;Metadata +MAIN_TAB_RAW;RAW MAIN_TAB_TAGGING;Tagging MAIN_TAB_TRANSFORM;Transformar MAIN_TOOLTIP_HIDEFP;Mostrar/Ocultar panel inferior (explorador carpetas y arch. tecla F) @@ -315,6 +348,8 @@ PARTIALPASTE_EXPOSURE;Exposición PARTIALPASTE_HLRECOVERY;Recuperación de Luces Altas PARTIALPASTE_ICMSETTINGS;Ajustes GIC PARTIALPASTE_IPTCINFO;Informaciones IPTC +PARTIALPASTE_LABCURVE;Curva Lab +PARTIALPASTE_LABCURVE;Curva de Luminancia PARTIALPASTE_LENSGROUP;Ajustes al respecto del objetivo PARTIALPASTE_LUMACURVE;Curva de Luminancia PARTIALPASTE_LUMADENOISE;Reducción de Ruido de Luminancia @@ -326,7 +361,10 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;Sombras/Luces Altas PARTIALPASTE_SHARPENING;Enfoque PARTIALPASTE_VIGNETTING;Corrección de viñeteo PARTIALPASTE_WHITEBALANCE;Equilibrio de Blancos +PREFERENCES_ADD;Añadir PREFERENCES_APPLNEXTSTARTUP;aplicado al próximo arranque +PREFERENCES_BATCH_PROCESSING;Proceso por lotes +PREFERENCES_BEHAVIOR;Comportamiento PREFERENCES_BLINKCLIPPED;Parpadear áreas cortadas PREFERENCES_CACHECLEARALL;Borrar todo PREFERENCES_CACHECLEARPROFILES;Borrar perfiles @@ -439,6 +477,7 @@ QINFO_FOCALLENGTH;Longitud Focal QINFO_ISO;ISO QINFO_LENS;Objetivo QINFO_NOEXIF;No hay datos EXIF. +SAVEDLG_AUTOSUFFIX;Añade un sufijo automáticamente si el archivo existe SAVEDLG_FILEFORMAT;Formato de archivo SAVEDLG_JPEGQUAL;Calidad JPEG SAVEDLG_JPGFILTER;Archivos JPEG @@ -499,8 +538,20 @@ TP_CROP_SELECTCROP; Seleccionar Recorte TP_CROP_W;An TP_CROP_X;x TP_CROP_Y;y +TP_DETAIL_AMOUNT;Cantidad +TP_DIRPYRDENOISE_CHROMA;Crominancia +TP_DIRPYRDENOISE_GAMMA;Gamma +TP_DIRPYRDENOISE_LABEL;Reducción de ruido +TP_DIRPYRDENOISE_LUMA;Luminancia +TP_DIRPYREQUALIZER_LABEL;Contraste mediante niveles de detalle +TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contraste- +TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contraste+ +TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutro TP_DISTORTION_AMOUNT;Cantidad TP_DISTORTION_LABEL;Distorsión +TP_EQUALIZER_CONTRAST_MINUS;Contraste- +TP_EQUALIZER_CONTRAST_PLUS;Contraste+ +TP_EQUALIZER_NEUTRAL;Neutro TP_EXPOSURE_AUTOLEVELS;Niveles Automáticos TP_EXPOSURE_BLACKLEVEL;Negro TP_EXPOSURE_BRIGHTNESS;Brillo @@ -530,6 +581,12 @@ TP_ICM_OUTPUTDLGLABEL;Seleccionar perfil ICC de salida... TP_ICM_OUTPUTPROFILE;Perfil de Salida TP_ICM_SAVEREFERENCE;Guardar imagen de referencia para el perfilado TP_ICM_WORKINGPROFILE;Perfil de Trabajo +TP_LABCURVE_BRIGHTNESS;Brillo +TP_LABCURVE_CONTRAST;Contraste +TP_LABCURVE_CURVEEDITOR;Curva de Luminancia +TP_LABCURVE_LABEL;Curvas Lab +TP_LABCURVE_SATURATION;Saturación +TP_LENSGEOM_LABEL;Objetivo / Geometría TP_LUMACURVE_BLACKLEVEL;Negro TP_LUMACURVE_BRIGHTNESS;Brillo TP_LUMACURVE_COMPRHIGHLIGHTS;Compresión de Luces Altas @@ -540,6 +597,11 @@ TP_LUMACURVE_LABEL;Curva de Luminancia TP_LUMADENOISE_EDGETOLERANCE;Tolerancia de bordes TP_LUMADENOISE_LABEL;Reducción de Ruido de Luminancia TP_LUMADENOISE_RADIUS;Radio +TP_PERSPECTIVE_HORIZONTAL;Horizontal +TP_PERSPECTIVE_LABEL;Perspectiva +TP_PERSPECTIVE_VERTICAL;Vertical +TP_PREPROCESS_DFAUTOSELECT;Selección automática +TP_RAWPANEL_PREPROCESSING;Preprocesando TP_RESIZE_BICUBIC;Bicúbica TP_RESIZE_BICUBICSF;Bicúbica (Más suave) TP_RESIZE_BICUBICSH;Bicúbica (Más enfocado) @@ -597,6 +659,12 @@ ZOOMBAR_NORMAL;Normal ZOOMBAR_PREVIEW;Previsualización ZOOMBAR_SCALE;Escala ZOOMBAR_SMALL;Pequeño +ZOOMPANEL_100;(100%) +ZOOMPANEL_NEWCROPWINDOW;Abrir (nueva) ventana de detalle +ZOOMPANEL_ZOOM100;Zoom al 100% 1 +ZOOMPANEL_ZOOMFITSCREEN;Ajustar a pantalla F +ZOOMPANEL_ZOOMIN;Aumentar Zoom + +ZOOMPANEL_ZOOMOUT;Reducir Zoom - # @@ -605,58 +673,37 @@ ZOOMBAR_SMALL;Pequeño !!!!!!!!!!!!!!!!!!!!!!!!! -!BATCHQUEUE_AUTOSTART;Auto start -!BATCH_PROCESSING;Batch processing -!CURVEEDITOR_CURVE;Curve -!CURVEEDITOR_CURVES;Curves -!CURVEEDITOR_CUSTOM;Custom !CURVEEDITOR_DARKS;Darks -!CURVEEDITOR_HIGHLIGHTS;Highlights -!CURVEEDITOR_LIGHTS;Lights !CURVEEDITOR_NURBS;Control cage -!CURVEEDITOR_PARAMETRIC;Parametric -!CURVEEDITOR_SHADOWS;Shadows -!CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters -!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame -!FILEBROWSER_CURRENT_NAME;Current name: !FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory -!FILEBROWSER_NEW_NAME;New name: !FILEBROWSER_SELECTDARKFRAME;Select dark frame... -!FILEBROWSER_SHOWEXIFINFO;Show EXIF info i !FILEBROWSER_TOOLTIP_STOPPROCESSING;Start processing automatically when a new job arrives -!FILEBROWSER_USETEMPLATE;Use template: -!GENERAL_AFTER;After -!GENERAL_BEFORE;Before -!GENERAL_HIGH_QUALITY;High Quality -!GENERAL_UNCHANGED;(Unchanged) !HISTOGRAM_BUTTON_B;B !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R -!HISTORY_MSG_82;Profile Changed -!HISTORY_MSG_83;High quality shadows/highlights -!HISTORY_MSG_84;Perspective correction +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen -!MAIN_BUTTON_PUTTOQUEUE;Put to queue -!MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image Ctrl+S -!MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor Ctrl+E -!MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen -!MAIN_MSG_ERRORDURINGIMAGESAVING;Error during image saving !MAIN_MSG_NAVIGATOR;Navigator !MAIN_MSG_PLACES;Places -!MAIN_TAB_RAW;RAW !MAIN_TOGGLE_BEFORE_AFTER;B|A !MAIN_TOOLTIP_TOGGLE;Toggle before/after view B !NAVIGATOR_B_NA;B = n/a @@ -678,12 +725,7 @@ ZOOMBAR_SMALL;Pequeño !NAVIGATOR_V_NA;V = n/a !NAVIGATOR_V_VALUE;V = %1 !NAVIGATOR_XY_NA;x = n/a, y = n/a -!PARTIALPASTE_LABCURVE;Lab curve -!PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option -!PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing -!PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame !PREFERENCES_DCBENHANCE;Apply DCB enhancement step @@ -694,7 +736,9 @@ ZOOMBAR_SMALL;Pequeño !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -702,43 +746,35 @@ ZOOMBAR_SMALL;Pequeño !PREFERENCES_USESYSTEMTHEME; Use System Theme !PREFERENCES_WORKFLOW;Workflow !PROGRESSDLG_PROFILECHANGEDINBROWSER;Profile changed in browser -!SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists !SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF -!TP_DETAIL_AMOUNT;Amount -!TP_DIRPYRDENOISE_CHROMA;Chrominance -!TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction -!TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest -!TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- -!TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ !TP_DIRPYREQUALIZER_LUMAFINEST;Finest -!TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutral !TP_DIRPYREQUALIZER_THRESHOLD;Threshold -!TP_EQUALIZER_CONTRAST_MINUS;Contrast- -!TP_EQUALIZER_CONTRAST_PLUS;Contrast+ !TP_EQUALIZER_FINEST;finest !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest -!TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold -!TP_LABCURVE_BRIGHTNESS;Brightness -!TP_LABCURVE_CONTRAST;Contrast -!TP_LABCURVE_CURVEEDITOR;Luminance Curve -!TP_LABCURVE_LABEL;Lab Curves -!TP_LABCURVE_SATURATION;Saturation !TP_LENSGEOM_AUTOCROP;Auto Crop !TP_LENSGEOM_FILL;Auto Fill -!TP_LENSGEOM_LABEL;Lens / Geometry -!TP_PERSPECTIVE_HORIZONTAL;Horizontal -!TP_PERSPECTIVE_LABEL;Perspective -!TP_PERSPECTIVE_VERTICAL;Vertical !TP_PREPROCESS_DARKFRAME;Dark frame -!TP_PREPROCESS_DFAUTOSELECT;Auto selection !TP_RAWPANEL_DEMOSAICING;Demosaicing -!TP_RAWPANEL_PREPROCESSING;Preprocessing !TP_RESIZE_DOWNSCALEB;Downscale (Better) !TP_RESIZE_DOWNSCALEF;Downscale (Faster) !TP_RESIZE_HEIGHT;Height @@ -749,9 +785,3 @@ ZOOMBAR_SMALL;Pequeño !TP_VIGNETTING_CENTER_X;Center X !TP_VIGNETTING_CENTER_Y;Center Y !TP_VIGNETTING_STRENGTH;Strength -!ZOOMPANEL_100;(100%) -!ZOOMPANEL_NEWCROPWINDOW;Open (new) detail window -!ZOOMPANEL_ZOOM100;Zoom to 100% 1 -!ZOOMPANEL_ZOOMFITSCREEN;Fit to screen F -!ZOOMPANEL_ZOOMIN;Zoom In + -!ZOOMPANEL_ZOOMOUT;Zoom Out - diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index a0594390a..4aa4192b0 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -611,6 +611,7 @@ ZOOMBAR_SMALL;Txikia !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -629,18 +630,29 @@ ZOOMBAR_SMALL;Txikia !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -676,7 +688,7 @@ ZOOMBAR_SMALL;Txikia !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -688,7 +700,9 @@ ZOOMBAR_SMALL;Txikia !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -701,9 +715,9 @@ ZOOMBAR_SMALL;Txikia !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -716,7 +730,23 @@ ZOOMBAR_SMALL;Txikia !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 8476ef20e..7b6baee43 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -50,6 +50,7 @@ EXIFPANEL_SUBDIRECTORY;Sous-répertoire FILEBROWSER_ADDDELTEMPLATE;Ajouter/Supprimer le modèle... FILEBROWSER_APPLYPROFILE;Appliquer le profil FILEBROWSER_ARRANGEMENTHINT;Permuter entre l'alignement vertical/horizontal des vignettes +FILEBROWSER_AUTODARKFRAME;Soustraction d'image noire automatique FILEBROWSER_CLEARPROFILE;Remettre le profil à zéro FILEBROWSER_COPYPROFILE;Copier le profil FILEBROWSER_CURRENT_NAME;Nom courant: @@ -62,6 +63,7 @@ FILEBROWSER_EXIFFILTERAPPLYHINT;Activer/désactiver les filtres EXIF le navigate FILEBROWSER_EXIFFILTERLABEL;Filtre EXIF FILEBROWSER_EXIFFILTERSETTINGS;Réglages FILEBROWSER_EXIFFILTERSETTINGSHINT;Change les réglages du filtre EXIF +FILEBROWSER_MOVETODARKFDIR;Déplacer dans le dossier d'images noires FILEBROWSER_NEW_NAME;Nouveau nom: FILEBROWSER_PARTIALPASTEPROFILE;Coller partiellement FILEBROWSER_PASTEPROFILE;Coller le profil @@ -85,6 +87,7 @@ FILEBROWSER_PROCESSINGSETTINGS;Réglages FILEBROWSER_PROCESSINGSETTINGSHINT;Règle le format de fichier et le dossier de sortie FILEBROWSER_RENAMEDLGLABEL;Rennommage du fichier FILEBROWSER_RENAMEDLGMSG;Renommer le fichier "%1" en: +FILEBROWSER_SELECTDARKFRAME;Choisir une image noire... FILEBROWSER_SHOWDIRHINT;Voir toutes les images du dossier D FILEBROWSER_SHOWEXIFINFO;Montrer les infos EXIF i FILEBROWSER_SHOWQUEUEHINT;Voir le contenu de la file de traitement @@ -136,6 +139,11 @@ HISTORY_CUSTOMCURVE;Courbe personnelle HISTORY_DELSNAPSHOT;Supprimer HISTORY_FROMCLIPBOARD;Du presse-papier HISTORY_LABEL;Historique +HISTORY_MSG_100;Saturation RVB +HISTORY_MSG_101;Ég. TSV - Teinte +HISTORY_MSG_102;Ég. TSV - Saturation +HISTORY_MSG_103;Ég. TSV - Valeur +HISTORY_MSG_104;Égaliseur TSV HISTORY_MSG_10;Compression des ombres HISTORY_MSG_11;Courbe tonale HISTORY_MSG_12;Exposition auto @@ -145,7 +153,7 @@ HISTORY_MSG_15;Luminance - Contraste HISTORY_MSG_16;Luminance - Noir HISTORY_MSG_17;Luminance - Compression Hautes lumières HISTORY_MSG_18;Luminance - Compression des Ombres -HISTORY_MSG_19;Luminance - Courbe +HISTORY_MSG_19;Courbe 'L' HISTORY_MSG_1;Photo chargée HISTORY_MSG_20;Netteté HISTORY_MSG_21;Netteté - Rayon @@ -221,6 +229,7 @@ HISTORY_MSG_84;Correction de la perspective HISTORY_MSG_85;Coefficients d'ondelette HISTORY_MSG_86;Égaliseur d'ondelette HISTORY_MSG_87;Réduction du bruit d'impulsion +HISTORY_MSG_88;Seuil de réduction de bruit HISTORY_MSG_89;Réd. du bruit présevant les bords HISTORY_MSG_8;Compensation d'exposition HISTORY_MSG_90;Réd. de bruit Luminance @@ -228,6 +237,11 @@ HISTORY_MSG_91;Réd. de bruit Chominance HISTORY_MSG_92;Réd. de bruit Gamma HISTORY_MSG_93;Param. de contraste HISTORY_MSG_94;Contraste par niveau de détail +HISTORY_MSG_95;Saturation +HISTORY_MSG_96;Courbe 'a' +HISTORY_MSG_97;Courbe 'b' +HISTORY_MSG_98;Dématriçage +HISTORY_MSG_99;Pre-traitement HISTORY_MSG_9;Compression des hautes lumières HISTORY_NEWSNAPSHOT;Ajouter HISTORY_NEWSNAPSHOTAS;Sous... @@ -332,6 +346,7 @@ MAIN_TAB_FILTER;Filtrer MAIN_TAB_ICM;ICM MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;Métadonnées +MAIN_TAB_RAW;RAW MAIN_TAB_TAGGING;Étiquetter MAIN_TAB_TRANSFORM;Transformation MAIN_TOGGLE_BEFORE_AFTER;Av|Ap @@ -350,6 +365,12 @@ NAVIGATOR_G_NA;V = n/d NAVIGATOR_G_VALUE;V = %1 NAVIGATOR_H_NA;T = n/d NAVIGATOR_H_VALUE;T = %1 +NAVIGATOR_LAB_A_NA;a = n/d +NAVIGATOR_LAB_A_VALUE;a = %1 +NAVIGATOR_LAB_B_NA;b = n/d +NAVIGATOR_LAB_B_VALUE;b = %1 +NAVIGATOR_LAB_L_NA;L = n/d +NAVIGATOR_LAB_L_VALUE;L = %1 NAVIGATOR_R_NA;R = n/d NAVIGATOR_R_VALUE;R = %1 NAVIGATOR_S_NA;S = n/d @@ -374,8 +395,9 @@ PARTIALPASTE_EXPOSURE;Exposition PARTIALPASTE_HLRECOVERY;Récupération des hautes lumières PARTIALPASTE_ICMSETTINGS;Réglages ICM PARTIALPASTE_IPTCINFO;Infos IPTC +PARTIALPASTE_LABCURVE;Courbe de luminance +PARTIALPASTE_LABCURVE;Courebes Lab PARTIALPASTE_LENSGROUP;Réglages de l'objectif -PARTIALPASTE_LUMACURVE;Courbe de luminance PARTIALPASTE_LUMADENOISE;Réduction du bruit de luminance PARTIALPASTE_LUMINANCEGROUP;Réglages de la luminance PARTIALPASTE_METAICMGROUP;Réglages des Métadonnées/ICM @@ -403,12 +425,10 @@ PREFERENCES_CACHESTRAT2;Optimiser la consommation mémoire au détriment de la v PREFERENCES_CACHESTRAT;Stratégie de gestion du Cache PREFERENCES_CACHETHUMBFORM;Format des vignettes du Cache PREFERENCES_CACHETHUMBHEIGHT;Hauteur maximale des vignettes -PREFERENCES_CACORRECTION;Appliquer la correction auto. de l'aberration chromatique -PREFERENCES_CLEARDLG_LINE1;Nettoyage du Cache -PREFERENCES_CLEARDLG_LINE2;Ceci peut prendre plusieurs secondes. -PREFERENCES_CLEARDLG_TITLE;Veuillez patienter +PREFERENCES_CACORRECTION;Correction automatique de\nl'aberration chromatique PREFERENCES_CLIPPINGIND;Indication du dépassement de plage dynamique PREFERENCES_CMETRICINTENT;Intention Colorimétrique +PREFERENCES_DARKFRAME;Soustraction d'image noire PREFERENCES_DATEFORMAT;Format de la date PREFERENCES_DATEFORMATHINT;Vous pouvez utiliser les paramètres de chaînes formatés suivants:\n%y : année\n%m : mois\n%d : jour\n\nPar exemple, le format de date française est:\n%d/%m/%y PREFERENCES_DCBENHANCE;Appliquer la phase d'amélioration de DCB @@ -416,17 +436,17 @@ PREFERENCES_DCBITERATIONS;Nombre d'itération de DCB PREFERENCES_DEFAULTLANG;Langue par défaut PREFERENCES_DEFAULTTHEME;Thème par défaut PREFERENCES_DEMOSAICINGALGO;Algorithme de dématriçage +PREFERENCES_DIRDARKFRAMES;Dossier d'images noires PREFERENCES_DIRHOME;Racine de mes documents personnels PREFERENCES_DIRLAST;Dernier dossier visité PREFERENCES_DIROTHER;Autre PREFERENCES_DIRSELECTDLG;Choix du dossier Image au lancement... PREFERENCES_DIRSOFTWARE;Dossier d'installation PREFERENCES_DMETHOD;Méthode -PREFERENCES_DMETHODBATCH;Batch PREFERENCES_EDITORCMDLINE;Autre ligne de commande PREFERENCES_EDITORLAYOUT;Disposition de l'éditeur PREFERENCES_EXTERNALEDITOR;Éditeur externe -PREFERENCES_FALSECOLOR;Itérations pour la suppression des fausses couleurs +PREFERENCES_FALSECOLOR;Itérations pour la suppression\ndes fausses couleurs PREFERENCES_FBROWSEROPTS;Options du navigateur de fichiers PREFERENCES_FILEFORMAT;Format du fichier PREFERENCES_FORIMAGE;Pour les fichiers images @@ -436,7 +456,7 @@ PREFERENCES_GREENEQUIL;Équilibrage du vert PREFERENCES_GTKTHEME;GTK par défaut PREFERENCES_HINT;Conseil PREFERENCES_HLTHRESHOLD;Seuil pour le dépassement de domaine supérieur -PREFERENCES_HOTDEADPIXFILT;Appliquer le filtre des pixels chauds/morts +PREFERENCES_HOTDEADPIXFILT;Filtrer les pixels chauds/morts PREFERENCES_ICCDIR;Dossier des profils ICC PREFERENCES_IMPROCPARAMS;Paramètres de traitement d'image par défaut PREFERENCES_INTENT_ABSOLUTE;Colorimétrie absolue @@ -586,7 +606,7 @@ TP_DIRPYRDENOISE_CHROMA;Chrominance TP_DIRPYRDENOISE_GAMMA;Gamma TP_DIRPYRDENOISE_LABEL;Réduction du bruit présevant les bords TP_DIRPYRDENOISE_LUMA;Luminance -TP_DIRPYREQUALIZER_LABEL;Égaliseur d'amas +TP_DIRPYREQUALIZER_LABEL;Contraste par niveaux de détail TP_DIRPYREQUALIZER_LUMACOARSEST;les plus gros TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contraste- TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contraste+ @@ -611,11 +631,26 @@ TP_EXPOSURE_CONTRAST;Contraste TP_EXPOSURE_CURVEEDITOR;Courbe tonale TP_EXPOSURE_EXPCOMP;Compensation d'exposition TP_EXPOSURE_LABEL;Exposition +TP_EXPOSURE_SATURATION;Saturation TP_HLREC_CIELAB;Mélange CIELab TP_HLREC_COLOR;Propagation de la couleur TP_HLREC_LABEL;Récupération des hautes lumières TP_HLREC_LUMINANCE;Récupération de la luminance TP_HLREC_METHOD;Méthode: +TP_HSVEQUALIZER1;Rouge +TP_HSVEQUALIZER2;Orange +TP_HSVEQUALIZER3;Vert citron +TP_HSVEQUALIZER4;Vert +TP_HSVEQUALIZER5;Cyan +TP_HSVEQUALIZER6;Bleu +TP_HSVEQUALIZER7;Violet +TP_HSVEQUALIZER8;Magenta +TP_HSVEQUALIZER_CHANNEL;Canal +TP_HSVEQUALIZER_HUE;Teinte +TP_HSVEQUALIZER_LABEL;Égaliseur TSV +TP_HSVEQUALIZER_NEUTRAL;Neutre +TP_HSVEQUALIZER_SAT;Saturation +TP_HSVEQUALIZER_VAL;Valeur TP_ICM_FILEDLGFILTERANY;Tous les fichiers TP_ICM_FILEDLGFILTERICM;Fichiers de profil ICC TP_ICM_GAMMABEFOREINPUT;Appliquer le Gamma du profil @@ -632,32 +667,36 @@ TP_ICM_SAVEREFERENCE;Utiliser l'image comme profil de référence TP_ICM_WORKINGPROFILE;Profil de Travail TP_IMPULSEDENOISE_LABEL;Réduction du bruit d'impulsion TP_IMPULSEDENOISE_THRESH;Seuil +TP_LABCURVE_BRIGHTNESS;Luminosité +TP_LABCURVE_CONTRAST;Contraste +TP_LABCURVE_CURVEEDITOR;Courbe de luminance +TP_LABCURVE_LABEL;Courbes Lab +TP_LABCURVE_SATURATION;Saturation TP_LENSGEOM_AUTOCROP;Rognage auto TP_LENSGEOM_FILL;Remplir TP_LENSGEOM_LABEL;Objectif / Géométrie -TP_LUMACURVE_BLACKLEVEL;Noir -TP_LUMACURVE_BRIGHTNESS;Luminosité -TP_LUMACURVE_COMPRHIGHLIGHTS;Compression hautes lumières -TP_LUMACURVE_COMPRSHADOWS;Compression des ombres -TP_LUMACURVE_CONTRAST;Contraste -TP_LUMACURVE_CURVEEDITOR;Courbe de luminance -TP_LUMACURVE_LABEL;Courbe de luminance TP_LUMADENOISE_EDGETOLERANCE;Tolérance des bords TP_LUMADENOISE_LABEL;Réduction du bruit de luminance TP_LUMADENOISE_RADIUS;Rayon TP_PERSPECTIVE_HORIZONTAL;Horizontal TP_PERSPECTIVE_LABEL;Perspective TP_PERSPECTIVE_VERTICAL;Vertical +TP_PREPROCESS_DARKFRAME;Image noire +TP_PREPROCESS_DFAUTOSELECT;Sélection automatique +TP_RAWPANEL_DEMOSAICING;Dématriçage +TP_RAWPANEL_PREPROCESSING;Pre-traitement TP_RESIZE_BICUBIC;Bicubique TP_RESIZE_BICUBICSF;Bicubique (Plus doux) TP_RESIZE_BICUBICSH;Bicubique (Plus net) TP_RESIZE_BILINEAR;Bilinéaire TP_RESIZE_DOWNSCALEB;Diminuer (Meilleur) TP_RESIZE_DOWNSCALEF;Diminuer (Plus rapide) +TP_RESIZE_FITBOX;Contenu dans une boîte TP_RESIZE_FULLSIZE;Dimensions finales de l'image: TP_RESIZE_H;H: TP_RESIZE_HEIGHT;Hauteur TP_RESIZE_LABEL;Redimensionnement +TP_RESIZE_LANCZOS;Lanczos TP_RESIZE_METHOD;Méthode: TP_RESIZE_NEAREST;Au plus proche TP_RESIZE_SCALE;Échelle @@ -690,8 +729,12 @@ TP_SHARPENING_RLD_ITERATIONS;Itérations TP_SHARPENING_THRESHOLD;Seuil TP_SHARPENING_USM;Masque flou TP_VIGNETTING_AMOUNT;Quantité +TP_VIGNETTING_CENTER;Centre +TP_VIGNETTING_CENTER_X;Centre X +TP_VIGNETTING_CENTER_Y;Centre Y TP_VIGNETTING_LABEL;Correction vignettage TP_VIGNETTING_RADIUS;Rayon +TP_VIGNETTING_STRENGTH;Force TP_WBALANCE_AUTO;Auto TP_WBALANCE_CAMERA;Appareil photo TP_WBALANCE_CUSTOM;Personnalisé @@ -721,31 +764,7 @@ ZOOMPANEL_ZOOMOUT;Zoom - !!!!!!!!!!!!!!!!!!!!!!!!! -!FILEBROWSER_AUTODARKFRAME;Auto dark frame -!FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory -!FILEBROWSER_SELECTDARKFRAME;Select dark frame... -!MAIN_TAB_RAW;RAW -!NAVIGATOR_LAB_A_NA;A = n/a -!NAVIGATOR_LAB_A_VALUE;A = %1 -!NAVIGATOR_LAB_B_NA;B = n/a -!NAVIGATOR_LAB_B_VALUE;B = %1 -!NAVIGATOR_LAB_L_NA;L = n/a -!NAVIGATOR_LAB_L_VALUE;L = %1 -!PARTIALPASTE_LABCURVE;Lab curve -!PARTIALPASTE_LABCURVE;Luminance curve -!PREFERENCES_DARKFRAME;Dark frame -!PREFERENCES_DIRDARKFRAMES;Dark frames directory -!TP_LABCURVE_BRIGHTNESS;Brightness -!TP_LABCURVE_CONTRAST;Contrast -!TP_LABCURVE_CURVEEDITOR;Luminance Curve -!TP_LABCURVE_LABEL;Lab Curves -!TP_LABCURVE_SATURATION;Saturation -!TP_PREPROCESS_DARKFRAME;Dark frame -!TP_PREPROCESS_DFAUTOSELECT;Auto selection -!TP_RAWPANEL_DEMOSAICING;Demosaicing -!TP_RAWPANEL_PREPROCESSING;Preprocessing -!TP_RESIZE_LANCZOS;Lanczos -!TP_VIGNETTING_CENTER;Center -!TP_VIGNETTING_CENTER_X;Center X -!TP_VIGNETTING_CENTER_Y;Center Y -!TP_VIGNETTING_STRENGTH;Strength +!EDITWINDOW_TITLE;Image Edit +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files +!TP_ICM_INPUTNONE;No profile diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 1d6759bf6..1f860f1d9 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -609,6 +609,7 @@ ZOOMBAR_SMALL;Μικρό !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -627,18 +628,29 @@ ZOOMBAR_SMALL;Μικρό !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -674,7 +686,7 @@ ZOOMBAR_SMALL;Μικρό !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -686,7 +698,9 @@ ZOOMBAR_SMALL;Μικρό !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -699,9 +713,9 @@ ZOOMBAR_SMALL;Μικρό !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -714,7 +728,23 @@ ZOOMBAR_SMALL;Μικρό !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index c60a0eb0a..66efd0e1a 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -610,6 +610,7 @@ ZOOMBAR_SMALL;קטן !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -628,18 +629,29 @@ ZOOMBAR_SMALL;קטן !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -675,7 +687,7 @@ ZOOMBAR_SMALL;קטן !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -687,7 +699,9 @@ ZOOMBAR_SMALL;קטן !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -700,9 +714,9 @@ ZOOMBAR_SMALL;קטן !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -715,7 +729,23 @@ ZOOMBAR_SMALL;קטן !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Italian b/rtdata/languages/Italian index 73c8f6e3e..e7b53b5af 100644 --- a/rtdata/languages/Italian +++ b/rtdata/languages/Italian @@ -613,6 +613,7 @@ ZOOMBAR_SMALL;Piccola !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -631,18 +632,29 @@ ZOOMBAR_SMALL;Piccola !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -678,7 +690,7 @@ ZOOMBAR_SMALL;Piccola !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -690,7 +702,9 @@ ZOOMBAR_SMALL;Piccola !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -703,9 +717,9 @@ ZOOMBAR_SMALL;Piccola !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -718,7 +732,23 @@ ZOOMBAR_SMALL;Piccola !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 70520009b..deb1c65f2 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -1,11 +1,14 @@ +# Japanese translation of RawTherapee #00 Japanese #01 2009-02-18 by A3novy #02 updated to RT2.4-RC by paul.matthijsse -#03 2010-10-24 updated to RT3.0 alpha 1 by A3novy +#03 2010-11-014 updated to RT3.0 alpha 1 by A3novy ADJUSTER_RESET_TO_DEFAULT;リセット初期化 BATCHQUEUE_AUTOSTART;オートスタート BATCH_PROCESSING;バッチ処理 +CURVEEDITOR_CURVE;カーブ +CURVEEDITOR_CURVES;カーブ CURVEEDITOR_CUSTOM;カスタム CURVEEDITOR_DARKS;ダーク CURVEEDITOR_FILEDLGFILTERANY;すべてのファイル @@ -47,6 +50,7 @@ EXIFPANEL_SUBDIRECTORY;サブディレクトリ FILEBROWSER_ADDDELTEMPLATE;テンプレートの追加/削除... FILEBROWSER_APPLYPROFILE;プロファイルの適応 FILEBROWSER_ARRANGEMENTHINT;サムネイル整列 縦/横 +FILEBROWSER_AUTODARKFRAME;オート・ダークフレーム FILEBROWSER_CLEARPROFILE;プロファイルの削除 FILEBROWSER_COPYPROFILE;プロファイルをコピー FILEBROWSER_CURRENT_NAME;カーブ名: @@ -55,10 +59,11 @@ FILEBROWSER_DELETEDLGMSG;%1 を削除してもいいですか? FILEBROWSER_EMPTYTRASH;ゴミ箱を空にする FILEBROWSER_EMPTYTRASHHINT;ゴミ箱を完全に空にする FILEBROWSER_EXIFFILTERAPPLY;適応 -FILEBROWSER_EXIFFILTERAPPLYHINT;ファイルブラウザのExifフィルターのon/off -FILEBROWSER_EXIFFILTERLABEL;Exifフィルター +FILEBROWSER_EXIFFILTERAPPLYHINT;ファイルブラウザのExifフィルタのon/off +FILEBROWSER_EXIFFILTERLABEL;Exifフィルタ FILEBROWSER_EXIFFILTERSETTINGS;セットアップ -FILEBROWSER_EXIFFILTERSETTINGSHINT;Exifフィルターの設定を変える +FILEBROWSER_EXIFFILTERSETTINGSHINT;Exifフィルタの設定を変える +FILEBROWSER_MOVETODARKFDIR;ダークフレーム・ディレクトリに移動 FILEBROWSER_NEW_NAME;新規名称: FILEBROWSER_PARTIALPASTEPROFILE;部分的に貼り付け FILEBROWSER_PASTEPROFILE;プロファイルの貼り付け @@ -82,6 +87,7 @@ FILEBROWSER_PROCESSINGSETTINGS;設定 FILEBROWSER_PROCESSINGSETTINGSHINT;ファイル形式と出力ディレクトリを設定 FILEBROWSER_RENAMEDLGLABEL;ファイル名変更 FILEBROWSER_RENAMEDLGMSG;"%1" にファイル名変更: +FILEBROWSER_SELECTDARKFRAME;ダークフレーム 選択... FILEBROWSER_SHOWDIRHINT;ディレクトリのすべての画像を表示 FILEBROWSER_SHOWEXIFINFO;EXIF 情報表示 FILEBROWSER_SHOWQUEUEHINT;キューの内容を表示 @@ -133,16 +139,21 @@ HISTORY_CUSTOMCURVE;カスタムカーブ HISTORY_DELSNAPSHOT;削除 HISTORY_FROMCLIPBOARD;クリップボードから HISTORY_LABEL;履歴 -HISTORY_MSG_10;シャドウ補正 +HISTORY_MSG_100;RGB 彩度 +HISTORY_MSG_101;HSV EQ -- 色相 +HISTORY_MSG_102;HSV EQ -- 彩度 +HISTORY_MSG_103;HSV EQ -- 明度 +HISTORY_MSG_104;HSV イコライザ +HISTORY_MSG_10;シャドウ復元 HISTORY_MSG_11;トーンカーブ HISTORY_MSG_12;露出 オート HISTORY_MSG_13;露出 クリッピング HISTORY_MSG_14;Lab 明るさ HISTORY_MSG_15;Lab コントラスト HISTORY_MSG_16;輝度 黒レベル -HISTORY_MSG_17;輝度 ハイライト圧縮 -HISTORY_MSG_18;輝度 シャドウ圧縮 -HISTORY_MSG_19;Lab 輝度カーブ +HISTORY_MSG_17;輝度 ハイライト復元 +HISTORY_MSG_18;輝度 シャドウ復元 +HISTORY_MSG_19;'L'カーブ HISTORY_MSG_1;写真を読み込みました HISTORY_MSG_20;シャープ HISTORY_MSG_21;シャープ 半径 @@ -173,7 +184,7 @@ HISTORY_MSG_43;輝度ノイズ除去 HISTORY_MSG_44;輝度ノイズ除去 半径 HISTORY_MSG_45;輝度ノイズ除去 エッジの許容度 HISTORY_MSG_46;カラー ノイズ除去 -HISTORY_MSG_47;カラー ノイズ除去 半径 +HISTORY_MSG_47;ノイズ除去 半径 HISTORY_MSG_48;カラー ノイズ除去 エッジの許容度 HISTORY_MSG_49;カラー ノイズ除去 エッジの感度 HISTORY_MSG_4;履歴ブラウジング @@ -194,9 +205,9 @@ HISTORY_MSG_62;歪曲収差補正 HISTORY_MSG_63;スナップショット選択 HISTORY_MSG_64;写真切り抜き HISTORY_MSG_65;色収差補正 -HISTORY_MSG_66;ハイライト修復 -HISTORY_MSG_67;ハイライト修復 量 -HISTORY_MSG_68;ハイライト修復 方式 +HISTORY_MSG_66;ハイライト復元 +HISTORY_MSG_67;ハイライト復元 量 +HISTORY_MSG_68;ハイライト復元 方式 HISTORY_MSG_69;作業カラースペース HISTORY_MSG_6;コントラスト HISTORY_MSG_70;出力カラースペース @@ -217,18 +228,21 @@ HISTORY_MSG_83;高画質 シャドウ/ハイライト HISTORY_MSG_84;パースペクティブ コレクション HISTORY_MSG_85;ウェーブレット係数 HISTORY_MSG_86;ウェーブレット イコライザ -HISTORY_MSG_87;インパルス ノイズ除去 -HISTORY_MSG_89;指向性ピラミッド +HISTORY_MSG_87;スポット ノイズ除去 +HISTORY_MSG_88;スポット NR 閾値 +HISTORY_MSG_89;ノイズ除去 HISTORY_MSG_8;露出補正 -HISTORY_MSG_90;指向性ピラミッド 輝度 -HISTORY_MSG_91;指向性ピラミッド 色度 -HISTORY_MSG_92;指向性ピラミッド ガンマ -HISTORY_MSG_93;指向性ピラミッド係数 -HISTORY_MSG_94;指向性ピラミッド イコライザ -HISTORY_MSG_95;Lab 彩度 -HISTORY_MSG_96;Lab aカーブ -HISTORY_MSG_97;Lab bカーブ -HISTORY_MSG_9;ハイライト補正 +HISTORY_MSG_90;NR - 輝度 +HISTORY_MSG_91;NR - 色度 +HISTORY_MSG_92;NR - ガンマ +HISTORY_MSG_93;ディテールのコントラスト係数 +HISTORY_MSG_94;ディテールのコントラスト +HISTORY_MSG_95;彩度 +HISTORY_MSG_96;'a' カーブ +HISTORY_MSG_97;'b' カーブ +HISTORY_MSG_98;デモザイク +HISTORY_MSG_99;前処理 +HISTORY_MSG_9;ハイライト復元 HISTORY_NEWSNAPSHOT;追加 HISTORY_NEWSNAPSHOTAS;ラベル HISTORY_NEWSSDIALOGLABEL;スナップのラベル: @@ -249,7 +263,7 @@ ICMPANEL_OUTPUTDLGLABEL;出力 ICC プロファイルを選択... ICMPANEL_OUTPUTPROFILE;出力プロファイル ICMPANEL_SAVEREFERENCE;プロファイリングの参照する画像を保存 ICMPANEL_WORKINGPROFILE;作業プロファイル -IMAGEAREA_DETAILVIEW;詳細 +IMAGEAREA_DETAILVIEW;ディテール IPTCPANEL_AUTHOR;作成者 IPTCPANEL_AUTHORHINT;作成者の名前、たとえば筆者、カメラマン、グラフィックス作成者(作成者). IPTCPANEL_AUTHORSPOSITION;作成者の肩書 @@ -332,6 +346,7 @@ MAIN_TAB_FILTER;フィルタ MAIN_TAB_ICM;ICM MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;メタデータ +MAIN_TAB_RAW;RAW MAIN_TAB_TAGGING;タグ付け MAIN_TAB_TRANSFORM;変形 MAIN_TOGGLE_BEFORE_AFTER;補正 前|後 @@ -377,7 +392,7 @@ PARTIALPASTE_DIALOGLABEL;処理済みプロファイルの部分ペースト PARTIALPASTE_DISTORTION;歪曲補正 PARTIALPASTE_EXIFCHANGES;exifデータを変える PARTIALPASTE_EXPOSURE;露出 -PARTIALPASTE_HLRECOVERY;ハイライト修復 +PARTIALPASTE_HLRECOVERY;ハイライト復元 PARTIALPASTE_ICMSETTINGS;ICM 設定 PARTIALPASTE_IPTCINFO;IPTC 情報 PARTIALPASTE_LABCURVE;Lab カーブ @@ -391,6 +406,7 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;シャドウ/ハイライト PARTIALPASTE_SHARPENING;シャープ化 PARTIALPASTE_VIGNETTING;周辺光量補正 PARTIALPASTE_WHITEBALANCE;ホワイトバランス +POPUPBUTTON_SELECTOPTIONHINT;右ボタンでオプション変更 PREFERENCES_ADD;追加 PREFERENCES_APPLNEXTSTARTUP;次の起動時に適応 PREFERENCES_BATCH_PROCESSING;バッチ処理 @@ -409,18 +425,17 @@ PREFERENCES_CACHESTRAT;キャッシュ運用の方針 PREFERENCES_CACHETHUMBFORM;キャッシュのサムネイル形式 PREFERENCES_CACHETHUMBHEIGHT;サムネイル縦の最大値 PREFERENCES_CACORRECTION;色収差補正を適応 -PREFERENCES_CLEARDLG_LINE1;キャッシュの削除 -PREFERENCES_CLEARDLG_LINE2;数秒掛かるかも・・ -PREFERENCES_CLEARDLG_TITLE;ちょっと待って・・ PREFERENCES_CLIPPINGIND;クリッピング領域の表示 PREFERENCES_CMETRICINTENT;レンダリング・インテント -PREFERENCES_DATEFORMAT;データフォーマット -PREFERENCES_DATEFORMATHINT;次の書式を使用することができます:\n%y : 年\n%m : 月\n%d : 日\n\n例として, ハンガリアン記法:\n%y/%m/%d +PREFERENCES_DARKFRAME;ダークフレーム +PREFERENCES_DATEFORMAT;日付の形式 +PREFERENCES_DATEFORMATHINT;次の書式文字を使用することができます:\n%y : 年\n%m : 月\n%d : 日\n\n例として, ハンガリアン記法の日付:\n%y/%m/%d PREFERENCES_DCBENHANCE;DCB拡張ステップの適応 PREFERENCES_DCBITERATIONS;DCB繰り返しの数 PREFERENCES_DEFAULTLANG;デフォルトの言語 PREFERENCES_DEFAULTTHEME;デフォルト テーマ PREFERENCES_DEMOSAICINGALGO;デモザイク処理 +PREFERENCES_DIRDARKFRAMES;ダークフレーム・ディレクトリ PREFERENCES_DIRHOME;ホーム・ディレクトリ PREFERENCES_DIRLAST;最近参照したディレクトリ PREFERENCES_DIROTHER;他 @@ -441,7 +456,7 @@ PREFERENCES_GREENEQUIL;グリーン 平衡化 PREFERENCES_GTKTHEME;GTK デフォルト PREFERENCES_HINT;ヒント PREFERENCES_HLTHRESHOLD;ハイライト・クリッピング領域のしきい値 -PREFERENCES_HOTDEADPIXFILT;ホット/デッド ピクセル・フィルターを適応 +PREFERENCES_HOTDEADPIXFILT;ホット/デッド ピクセル・フィルタを適応 PREFERENCES_ICCDIR;ICCプロファイルのディレクトリ PREFERENCES_IMPROCPARAMS;画像処理の規定値 PREFERENCES_INTENT_ABSOLUTE;絶対的な色域を維持 @@ -455,9 +470,9 @@ PREFERENCES_MULTITAB;マルチ タブモード PREFERENCES_OUTDIR;出力ディレクトリ PREFERENCES_OUTDIRFOLDER;フォルダに保存 PREFERENCES_OUTDIRFOLDERHINT;選択したフォルダに画像を保存します -PREFERENCES_OUTDIRHINT;次の書式を使用することができます:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nこれらの書式はディレクトリとrawファイルのサブパスを示します.\n\n例えば, /home/tom/image/02-09-2006/dsc0012.nef\nこの書式文字の意味は:\n%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\n同じ場所に出力画像を保存するには, このように記述します:\n%p1/%f\n\n同じ場所にサブ・ディレクトリ'converted'を作成し、その中に出力画像を保存するには, このように記述します:\n%p1/converted/%f\n\n一つ上のディレクトリ'/home/tom/'にサブ・ディレクトリ'converted'を作成し'02-09-2006'の中に保存するには, このように記述します:\n%p2/converted/%d1/%f +PREFERENCES_OUTDIRHINT;次の書式文字を使用することができます:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nこれらの書式文字は画像パス名のそれぞれ別々の部分を参照します\n\n例えば、次の画像を処理中の場合は:\n/home/tom/photos/2010-10-31/dsc0042.nef\n書式文字の意味するものは:\n%d4 = home\n%d3 = tom\n%d2 = photos\n%d1 = 2010-10-31\n%f = dsc0042\n%p1 = /home/tom/photos/2010-10-31/\n%p2 = /home/tom/photos/\n%p3 = /home/tom/\n%p4 = /home/\n\n元画像と同じ場所に出力したい場合はこのように書きます:\n%p1/%f\n\n処理画像のディレクトリ下 "converted" という名前のディレクトリに出力画像を保存したい場合このように書きます:\n%p1/converted/%f\n\n"/home/tom/photos/converted/2010-10-31" という名前のディレクトリに出力画像を保存したい場合はこのように書きます:\n%p2/converted/%d1/%f PREFERENCES_OUTDIRTEMPLATE;テンプレートを使う -PREFERENCES_OUTDIRTEMPLATEHINT;次の書式を使用することができます:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nこれらの書式はディレクトリとrawファイルのサブパスを示します.\n\n例えば, /home/tom/image/02-09-2006/dsc0012.nef\nこの書式文字の意味は:\n%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\n同じ場所に出力画像を保存するには, このように記述します:\n%p1/%f\n\n同じ場所にサブ・ディレクトリ'converted'を作成し、その中に出力画像を保存するには, このように記述します:\n%p1/converted/%f\n\n一つ上のディレクトリ'/home/tom/'にサブ・ディレクトリ'converted'を作成し'02-09-2006'の中に保存するには, このように記述します:\n%p2/converted/%d1/%f +PREFERENCES_OUTDIRTEMPLATEHINT;次の書式文字を使用することができます:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nこれらの書式文字は画像パス名のそれぞれ別々の部分を参照します\n\n例えば、次の画像を処理中の場合は:\n/home/tom/photos/2010-10-31/dsc0042.nef\n書式文字の意味するものは:\n%d4 = home\n%d3 = tom\n%d2 = photos\n%d1 = 2010-10-31\n%f = dsc0042\n%p1 = /home/tom/photos/2010-10-31/\n%p2 = /home/tom/photos/\n%p3 = /home/tom/\n%p4 = /home/\n\n元画像と同じ場所に出力したい場合はこのように書きます:\n%p1/%f\n\n処理画像のディレクトリ下 "converted" という名前のディレクトリに出力画像を保存したい場合このように書きます:\n%p1/converted/%f\n\n"/home/tom/photos/converted/2010-10-31" という名前のディレクトリに出力画像を保存したい場合はこのように書きます:\n%p2/converted/%d1/%f PREFERENCES_OVERLAY_FILENAMES;サムネイル上でファイル名を透過表示する PREFERENCES_PARSEDEXT;拡張子 PREFERENCES_PARSEDEXTADD;拡張子の追加 @@ -512,7 +527,7 @@ PROGRESSBAR_LOADJPEG;JPEGファイル読み込み中... PROGRESSBAR_LOADPNG;;PNGファイル読み込み中... PROGRESSBAR_LOADTIFF;TIFFファイル読み込み中... PROGRESSBAR_PROCESSING;画像処理中... -PROGRESSBAR_READY;準備ができました +PROGRESSBAR_READY;準備が整いました. PROGRESSBAR_SAVEJPEG;JPEGファイル保存中... PROGRESSBAR_SAVEPNG;PNGファイル保存中... PROGRESSBAR_SAVETIFF;TIFFファイル保存中... @@ -589,20 +604,20 @@ TP_CROP_Y;y TP_DETAIL_AMOUNT;量 TP_DIRPYRDENOISE_CHROMA;色度 TP_DIRPYRDENOISE_GAMMA;ガンマ -TP_DIRPYRDENOISE_LABEL;指向性ピラミッド ノイズ除去 +TP_DIRPYRDENOISE_LABEL;ノイズ除去 TP_DIRPYRDENOISE_LUMA;輝度 -TP_DIRPYREQUALIZER_LABEL;指向性ピラミッド イコライザ +TP_DIRPYREQUALIZER_LABEL;ディテールのコントラスト TP_DIRPYREQUALIZER_LUMACOARSEST;粗い TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;コントラスト- TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;コントラスト+ -TP_DIRPYREQUALIZER_LUMAFINEST;細い +TP_DIRPYREQUALIZER_LUMAFINEST;細かい TP_DIRPYREQUALIZER_LUMANEUTRAL;ニュートラル TP_DIRPYREQUALIZER_THRESHOLD;しきい値 TP_DISTORTION_AMOUNT;量 TP_DISTORTION_LABEL;歪曲収差補正 TP_EQUALIZER_CONTRAST_MINUS;コントラスト- TP_EQUALIZER_CONTRAST_PLUS;コントラスト+ -TP_EQUALIZER_FINEST;細い +TP_EQUALIZER_FINEST;細かい TP_EQUALIZER_LABEL;ウェーブレット イコライザ TP_EQUALIZER_LARGEST;粗い TP_EQUALIZER_NEUTRAL;ニュートラル @@ -610,17 +625,32 @@ TP_EXPOSURE_AUTOLEVELS;オートレベル TP_EXPOSURE_BLACKLEVEL;黒レベル TP_EXPOSURE_BRIGHTNESS;明るさ TP_EXPOSURE_CLIP;クリップ -TP_EXPOSURE_COMPRHIGHLIGHTS;ハイライト圧縮 -TP_EXPOSURE_COMPRSHADOWS;シャドウ圧縮 +TP_EXPOSURE_COMPRHIGHLIGHTS;ハイライト復元 +TP_EXPOSURE_COMPRSHADOWS;シャドウ復元 TP_EXPOSURE_CONTRAST;コントラスト TP_EXPOSURE_CURVEEDITOR;トーンカーブ TP_EXPOSURE_EXPCOMP;露出補正 TP_EXPOSURE_LABEL;露出 +TP_EXPOSURE_SATURATION;彩度 TP_HLREC_CIELAB;CIELab ブレンディング TP_HLREC_COLOR;色の波及 -TP_HLREC_LABEL;ハイライト修復 -TP_HLREC_LUMINANCE;輝度修復 +TP_HLREC_LABEL;ハイライト復元 +TP_HLREC_LUMINANCE;輝度復元 TP_HLREC_METHOD;方式: +TP_HSVEQUALIZER1;レッド +TP_HSVEQUALIZER2;イエロー +TP_HSVEQUALIZER3;ライム +TP_HSVEQUALIZER4;グリーン +TP_HSVEQUALIZER5;アクア +TP_HSVEQUALIZER6;ブルー +TP_HSVEQUALIZER7;パープル +TP_HSVEQUALIZER8;マゼンタ +TP_HSVEQUALIZER_CHANNEL;HSV チャンネル +TP_HSVEQUALIZER_HUE;色相 +TP_HSVEQUALIZER_LABEL;HSV イコライザ +TP_HSVEQUALIZER_NEUTRAL;ニュートラル +TP_HSVEQUALIZER_SAT;彩度 +TP_HSVEQUALIZER_VAL;明度 TP_ICM_FILEDLGFILTERANY;すべてのファイル TP_ICM_FILEDLGFILTERICM;ICCプロファイル ファイル TP_ICM_GAMMABEFOREINPUT;プロファイルにガンマ適応 @@ -635,7 +665,7 @@ TP_ICM_OUTPUTDLGLABEL;出力 ICC プロファイルを選択... TP_ICM_OUTPUTPROFILE;出力プロファイル TP_ICM_SAVEREFERENCE;プロファイリングの参照する画像を保存 TP_ICM_WORKINGPROFILE;作業プロファイル -TP_IMPULSEDENOISE_LABEL;インパルス ノイズ除去 +TP_IMPULSEDENOISE_LABEL;スポット ノイズ除去 TP_IMPULSEDENOISE_THRESH;しきい値 TP_LABCURVE_BRIGHTNESS;明るさ TP_LABCURVE_CONTRAST;コントラスト @@ -652,6 +682,10 @@ TP_LUMADENOISE_RADIUS;半径 TP_PERSPECTIVE_HORIZONTAL;水平 TP_PERSPECTIVE_LABEL;パースペクティブ TP_PERSPECTIVE_VERTICAL;垂直 +TP_PREPROCESS_DARKFRAME;ダークフレーム +TP_PREPROCESS_DFAUTOSELECT;自動選択 +TP_RAWPANEL_DEMOSAICING;デモザイク +TP_RAWPANEL_PREPROCESSING;前処理 TP_RESIZE_BICUBIC;バイキュービック TP_RESIZE_BICUBICSF;バイキュービック (ソフトに) TP_RESIZE_BICUBICSH;バイキュービック (シャープに) @@ -662,6 +696,7 @@ TP_RESIZE_FULLSIZE;フル 画像 サイズ: TP_RESIZE_H;H: TP_RESIZE_HEIGHT;高さ TP_RESIZE_LABEL;リサイズ +TP_RESIZE_LANCZOS;ランチョス TP_RESIZE_METHOD;方式: TP_RESIZE_NEAREST;ニアリスト TP_RESIZE_SCALE;スケール @@ -696,8 +731,12 @@ TP_SHARPENING_RLD_ITERATIONS;繰返し TP_SHARPENING_THRESHOLD;しきい値 TP_SHARPENING_USM;アンシャープマスク TP_VIGNETTING_AMOUNT;量 +TP_VIGNETTING_CENTER;中心 +TP_VIGNETTING_CENTER_X;中心 X +TP_VIGNETTING_CENTER_Y;中心 Y TP_VIGNETTING_LABEL;周辺光量補正 TP_VIGNETTING_RADIUS;半径 +TP_VIGNETTING_STRENGTH;強度 TP_WBALANCE_AUTO;オート TP_WBALANCE_CAMERA;カメラ TP_WBALANCE_CUSTOM;カスタム @@ -720,7 +759,6 @@ ZOOMPANEL_ZOOM100;100%にズーム ZOOMPANEL_ZOOMFITSCREEN;画面に合わせる ZOOMPANEL_ZOOMIN;ズームイン ZOOMPANEL_ZOOMOUT;ズームアウト -# Japanese translation of RawTherapee !!!!!!!!!!!!!!!!!!!!!!!!! @@ -728,21 +766,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト !!!!!!!!!!!!!!!!!!!!!!!!! -!CURVEEDITOR_CURVE;Curve -!CURVEEDITOR_CURVES;Curves -!FILEBROWSER_AUTODARKFRAME;Auto dark frame -!FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory -!FILEBROWSER_SELECTDARKFRAME;Select dark frame... -!MAIN_TAB_RAW;RAW -!POPUPBUTTON_SELECTOPTIONHINT;RMB to change option -!PREFERENCES_DARKFRAME;Dark frame -!PREFERENCES_DIRDARKFRAMES;Dark frames directory -!TP_PREPROCESS_DARKFRAME;Dark frame -!TP_PREPROCESS_DFAUTOSELECT;Auto selection -!TP_RAWPANEL_DEMOSAICING;Demosaicing -!TP_RAWPANEL_PREPROCESSING;Preprocessing -!TP_RESIZE_LANCZOS;Lanczos -!TP_VIGNETTING_CENTER;Center -!TP_VIGNETTING_CENTER_X;Center X -!TP_VIGNETTING_CENTER_Y;Center Y -!TP_VIGNETTING_STRENGTH;Strength +!EDITWINDOW_TITLE;Image Edit +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files +!TP_ICM_INPUTNONE;No profile diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index 41ba7804a..344b23f49 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -609,6 +609,7 @@ ZOOMBAR_SMALL;Mazs !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -627,18 +628,29 @@ ZOOMBAR_SMALL;Mazs !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -674,7 +686,7 @@ ZOOMBAR_SMALL;Mazs !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -686,7 +698,9 @@ ZOOMBAR_SMALL;Mazs !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -699,9 +713,9 @@ ZOOMBAR_SMALL;Mazs !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -714,7 +728,23 @@ ZOOMBAR_SMALL;Mazs !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index ea937931d..20ab9e56d 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -1,20 +1,33 @@ #00 Magyar +#01 RT 3.0 alpha 1 rev. 597:fb291bf74c by Dr. Gyurkó M. 'dualon' Dávid ADJUSTER_RESET_TO_DEFAULT;Alaphelyzetbe állítás -CURVEEDITOR_FILEDLGFILTERANY;Minden fájl -CURVEEDITOR_FILEDLGFILTERCURVE;Görbe fájlok +BATCH_PROCESSING;Kötegelt feldolgozás +CURVEEDITOR_CURVE;Görbe +CURVEEDITOR_CURVES;Görbék +CURVEEDITOR_CUSTOM;Egyedi +CURVEEDITOR_DARKS;Sötétek +CURVEEDITOR_FILEDLGFILTERANY;Minden állomány +CURVEEDITOR_FILEDLGFILTERCURVE;Görbék állományai +CURVEEDITOR_HIGHLIGHTS;Csúcsfények +CURVEEDITOR_LIGHTS;Középfények CURVEEDITOR_LINEAR;Lineáris CURVEEDITOR_LOADDLGLABEL;Görbe betöltése... +CURVEEDITOR_NURBS;Húrkontroll +CURVEEDITOR_PARAMETRIC;Parametrikus CURVEEDITOR_SAVEDLGLABEL;Görbe mentése... +CURVEEDITOR_SHADOWS;Árnyékok CURVEEDITOR_TOOLTIPLINEAR;Lineáris görbe visszaállítása CURVEEDITOR_TOOLTIPLOAD;Görbe betöltése CURVEEDITOR_TOOLTIPSAVE;Görbe mentése -EXIFFILTER_APERTURE;Blende +CURVEEDITOR_TYPE;Típus: +EXIFFILTER_APERTURE;Rekesz EXIFFILTER_CAMERA;Fényképezőgép -EXIFFILTER_DIALOGLABEL;Exif Szűrő +EXIFFILTER_DIALOGLABEL;EXIF szűrő EXIFFILTER_FOCALLEN;Fókusztávolság EXIFFILTER_ISO;ISO EXIFFILTER_LENS;Objektív +EXIFFILTER_METADATAFILTER;Metaadat-szűrő engedélyezése EXIFFILTER_SHUTTER;Záridő EXIFPANEL_ADDEDIT;Hozzáad/Szerkeszt EXIFPANEL_ADDEDITHINT;Új tagok hozzáadása, szerkesztése @@ -27,22 +40,26 @@ EXIFPANEL_REMOVE;Eltávolít EXIFPANEL_REMOVEHINT;A kijelölt adatok eldobása a végső fájl mentésekor EXIFPANEL_RESET;Visszaállít EXIFPANEL_RESETALL;Mindent visszaállít -EXIFPANEL_RESETALLHINT;Az összes meta-adat visszaáttítása az eredeti állapotba -EXIFPANEL_RESETHINT;A kijelölt adatok visszaáttítása az eredeti állapotba +EXIFPANEL_RESETALLHINT;Az összes metaadat visszaállítása az eredeti állapotba +EXIFPANEL_RESETHINT;A kijelölt adatok visszaállítása az eredeti állapotba EXIFPANEL_SUBDIRECTORY;Alkönyvtár -FILEBROWSER_APPLYPROFILE;Feldolgozási paraméter hozzárendelés +FILEBROWSER_ADDDELTEMPLATE;Sablon hozzáadása/törlése... +FILEBROWSER_APPLYPROFILE;Feldolgozási paraméter hozzárendelése FILEBROWSER_ARRANGEMENTHINT;Váltás az előnézeti képek függőleges/vízszintes elrendezése között FILEBROWSER_CLEARPROFILE;Feldolgozási paraméter törlése FILEBROWSER_COPYPROFILE;Feldolgozási paraméterek másolása -FILEBROWSER_DELETEDLGLABEL;Fájl törlés megerősítése +FILEBROWSER_CURRENT_NAME;Aktuális név: +FILEBROWSER_DELETEDLGLABEL;Állománytörlés megerősítése FILEBROWSER_DELETEDLGMSG;Biztosan törölni kívánja a kijelölt %1 képet? FILEBROWSER_EMPTYTRASH;Kuka ürítése -FILEBROWSER_EMPTYTRASHHINT;Véglegesen letörli a kukában lévő képeket +FILEBROWSER_EMPTYTRASHHINT;A kukában lévő képek végleges, állományrendszerből történő eltávolítása. FILEBROWSER_EXIFFILTERAPPLY;Aktív -FILEBROWSER_EXIFFILTERAPPLYHINT;Az exif szűrő ki/bekapcsolása -FILEBROWSER_EXIFFILTERLABEL;Exif Szűrő +FILEBROWSER_EXIFFILTERAPPLYHINT;Az EXIF szűrő ki-/bekapcsolása +FILEBROWSER_EXIFFILTERLABEL;EXIF szűrő FILEBROWSER_EXIFFILTERSETTINGS;Beállítások -FILEBROWSER_EXIFFILTERSETTINGSHINT;Az exif szűrő beállítása +FILEBROWSER_EXIFFILTERSETTINGSHINT;Az EXIF szűrő beállítása +FILEBROWSER_MOVETODARKFDIR;Mozgatás a 'dark frame' könyvtárba +FILEBROWSER_NEW_NAME;Új név: FILEBROWSER_PARTIALPASTEPROFILE;Részleges beillesztés FILEBROWSER_PASTEPROFILE;Feldolgozási paraméterek beillesztése FILEBROWSER_POPUPCANCELJOB;Eltávolítás a sorból @@ -66,6 +83,7 @@ FILEBROWSER_PROCESSINGSETTINGSHINT;A fájl formátum és a célkönyvtár beáll FILEBROWSER_RENAMEDLGLABEL;Fájl átnevezése FILEBROWSER_RENAMEDLGMSG;%1 új neve: FILEBROWSER_SHOWDIRHINT;A könyvtárban lévő összes kép mutatása +FILEBROWSER_SHOWEXIFINFO;EXIF info megjelenítése: i FILEBROWSER_SHOWQUEUEHINT;A feldolgozási sor tartalmának mutatása FILEBROWSER_SHOWRANK1HINT;1 csillaggal jelölt képek mutatása FILEBROWSER_SHOWRANK2HINT;2 csillaggal jelölt képek mutatása @@ -79,14 +97,19 @@ FILEBROWSER_STARTPROCESSINGHINT;A sorban álló képek feldolgozásának elindí FILEBROWSER_STOPPROCESSING;Feldolgozás leállítása FILEBROWSER_STOPPROCESSINGHINT;A sorban álló képek feldolgozásának leállítása FILEBROWSER_THUMBSIZE;Bélyegméret +FILEBROWSER_TOOLTIP_STOPPROCESSING;Új kép érkezése esetén a feldolgozás automatikus indítása. +FILEBROWSER_USETEMPLATE;Sablon használata: FILEBROWSER_ZOOMINHINT;Növelés FILEBROWSER_ZOOMOUTHINT;Csökkentés GENERAL_ABOUT;Névjegy +GENERAL_AFTER;Utána +GENERAL_BEFORE;Előtte GENERAL_CANCEL;Mégsem GENERAL_DISABLE;Kikapcsol GENERAL_DISABLED;Kikapcsolva GENERAL_ENABLE;Engedélyez GENERAL_ENABLED;Engedélyezve +GENERAL_HIGH_QUALITY;Jó minőségben GENERAL_LANDSCAPE;Fekvő GENERAL_LOAD;Betöltés GENERAL_NA;n/a @@ -94,7 +117,11 @@ GENERAL_NO;Nem GENERAL_OK;OK GENERAL_PORTRAIT;Álló GENERAL_SAVE;Mentés +GENERAL_UNCHANGED;(Változatlan) GENERAL_YES;Igen +HISTOGRAM_BUTTON_G;G +HISTOGRAM_BUTTON_L;L +HISTOGRAM_BUTTON_R; HISTOGRAM_LABEL;Hisztogram HISTOGRAM_TOOLTIP_B;Kék csatorna hisztogrammja (mutat/elrejt) HISTOGRAM_TOOLTIP_G;Zöld csatorna hisztogrammja (mutat/elrejt) @@ -105,55 +132,60 @@ HISTORY_CUSTOMCURVE;Saját görbe HISTORY_DELSNAPSHOT;Töröl HISTORY_FROMCLIPBOARD;Vágólapról HISTORY_LABEL;Előzmények -HISTORY_MSG_10;Sötét tónus tömörítés +HISTORY_MSG_100;RGB színtelítettség +HISTORY_MSG_101;HSV EQ -- Árnyalat +HISTORY_MSG_102;HSV EQ -- Telítettség +HISTORY_MSG_103;HSV EQ -- Színérték +HISTORY_MSG_104;HSV Equalizer +HISTORY_MSG_10;Sötét tónusok tömörítése HISTORY_MSG_11;Tónusgörbe HISTORY_MSG_12;Auto szint HISTORY_MSG_13;Vágás -HISTORY_MSG_14;Luminancia fényerő -HISTORY_MSG_15;Luminancia kontraszt -HISTORY_MSG_16;Luminancia fekete szint -HISTORY_MSG_17;Luminancia világos tónus tömörítés -HISTORY_MSG_18;Luminancia sötét tónus tömörítés +HISTORY_MSG_14;Luminancia, fényerő +HISTORY_MSG_15;Luminancia, kontraszt +HISTORY_MSG_16;Luminancia, fekete szint +HISTORY_MSG_17;Luminancia, világos tónusok tömörítése +HISTORY_MSG_18;Luminancia, sötét tónusok tömörítése HISTORY_MSG_19;Luminancia görbe HISTORY_MSG_1;Kép betöltve HISTORY_MSG_20;Élesítés HISTORY_MSG_21;Élesítés sugara HISTORY_MSG_22;Élesítés mértéke -HISTORY_MSG_23;Élesítés küszöb +HISTORY_MSG_23;Élesítési küszöb HISTORY_MSG_24;Csak az élek élesítése -HISTORY_MSG_25;Élesítés élferismerési sugár -HISTORY_MSG_26;Élesítés élferismerési tolerancia -HISTORY_MSG_27;Élesítés mellékhatás csökkentés -HISTORY_MSG_28;Élesítés mellékhatás csökkentés mértéke +HISTORY_MSG_25;Élesítés élferismerési sugara +HISTORY_MSG_26;Élesítés élferismerési toleranciája +HISTORY_MSG_27;Élesítési mellékhatás csökkentése +HISTORY_MSG_28;Élesítési mellékhatás-csökkentés mértéke HISTORY_MSG_29;Élesítés algoritmusa HISTORY_MSG_2;Beállítások betöltése HISTORY_MSG_30;Dekonvolúciós sugár HISTORY_MSG_31;Deconvolúció mértéke -HISTORY_MSG_32;Deconvolúció zajelnyomás -HISTORY_MSG_33;Deconvolúció iterációszám -HISTORY_MSG_34;Színtelítődés megelőzés -HISTORY_MSG_35;Telítettség korlátozó -HISTORY_MSG_36;Telítettség korlát +HISTORY_MSG_32;Deconvolúció zajelnyomása +HISTORY_MSG_33;Deconvolúció iterációszáma +HISTORY_MSG_34;Színtelítődés megelőzése +HISTORY_MSG_35;Telítettség-korlátozó +HISTORY_MSG_36;Telítettségi korlát HISTORY_MSG_37;Színtelítettség -HISTORY_MSG_38;Fehéregyensúly beállítás +HISTORY_MSG_38;Fehéregyensúly beállítása HISTORY_MSG_39;Színhőmérséklet HISTORY_MSG_3;Beállítások változtatása HISTORY_MSG_40;Fehér árnyalat HISTORY_MSG_41;Színeltolás "A" HISTORY_MSG_42;Színeltolás "B" HISTORY_MSG_43;Luminanciazaj-csökkentés -HISTORY_MSG_44;Lum. zajcsökkentés sugár -HISTORY_MSG_45;Lum. zajcsökkentés éltolerancia +HISTORY_MSG_44;Lum. zajcsökkentés sugara +HISTORY_MSG_45;Lum. zajcsökkentés éltoleranciája HISTORY_MSG_46;Színzaj-csökkentés -HISTORY_MSG_47;Színzaj-csökkentés sugár -HISTORY_MSG_48;Színzaj-csökkentés éltolerancia +HISTORY_MSG_47;Színzaj-csökkentés sugara +HISTORY_MSG_48;Színzaj-csökkentés éltoleranciája HISTORY_MSG_49;Élérzékeny színzaj-csökkentés -HISTORY_MSG_4;Előzmény böngészés +HISTORY_MSG_4;Előzményböngészés HISTORY_MSG_50;Árnyékok/Fények korrekció HISTORY_MSG_51;Fényes részek HISTORY_MSG_52;Sötét részek -HISTORY_MSG_53;Világos tonális szélesség -HISTORY_MSG_54;Sötét tonális szélesség +HISTORY_MSG_53;Világos tónustartomány +HISTORY_MSG_54;Sötét tónustartomány HISTORY_MSG_55;Lokális kontraszt HISTORY_MSG_56;Árnyékok/Fények sugár HISTORY_MSG_57;Durva forgatás @@ -162,46 +194,62 @@ HISTORY_MSG_59;Függőleges tükrözés HISTORY_MSG_5;Fényerő HISTORY_MSG_60;Forgatás HISTORY_MSG_61;Forgatás -HISTORY_MSG_62;Torzítás korrekció -HISTORY_MSG_63;Pillanatkép kiválasztás +HISTORY_MSG_62;Torzításkorrekció +HISTORY_MSG_63;Pillanatkép kiválasztása HISTORY_MSG_64;Képkivágás -HISTORY_MSG_65;Kromatikus aberráció korrigálás -HISTORY_MSG_66;Beégett részek megmentése -HISTORY_MSG_67;Beégett részek visszaállítása -HISTORY_MSG_68;Beégett részek algoritmus -HISTORY_MSG_69;Munka színprofil +HISTORY_MSG_65;Kromatikus aberráció korrekciója +HISTORY_MSG_66;Kiégett részek megmentése +HISTORY_MSG_67;Kiégett részek visszaállítása +HISTORY_MSG_68;Kiégett részek algoritmus +HISTORY_MSG_69;Feldolgozási (munka-) színprofil HISTORY_MSG_6;Kontraszt HISTORY_MSG_70;Kimeneti színprofil HISTORY_MSG_71;Bemeneti színprofil -HISTORY_MSG_72;Saroksötétedés -HISTORY_MSG_73;Szín keverő -HISTORY_MSG_74;Átméretezés szorzó -HISTORY_MSG_75;Átméretezés algoritmus -HISTORY_MSG_76;Exif Meta-adatok -HISTORY_MSG_77;IPTC Meta-adatok +HISTORY_MSG_72;Peremsötétedés +HISTORY_MSG_73;Színkeverő +HISTORY_MSG_74;Átméretezés szorzója +HISTORY_MSG_75;Átméretezés algoritmusa +HISTORY_MSG_76;EXIF Metaadatok +HISTORY_MSG_77;IPTC Metaadatok HISTORY_MSG_78;Data specified for resize -HISTORY_MSG_79;Resize width +HISTORY_MSG_79;Átméretezés szélesség szerint HISTORY_MSG_7;Fekete szint -HISTORY_MSG_80;Resize height -HISTORY_MSG_81;Resize enabled +HISTORY_MSG_80;Átméretezés magasság szerint +HISTORY_MSG_81;Átméretezés engedélyezve +HISTORY_MSG_82;Megváltozott profil +HISTORY_MSG_83;Árnyékok/csúcsfények - kiváló minőség +HISTORY_MSG_84;Perspektívakorrekció +HISTORY_MSG_85;Wavelet együtthatók +HISTORY_MSG_86;Wavelet equalizer +HISTORY_MSG_87;Salt&pepper zajcsökkentés +HISTORY_MSG_88;Salt&pepper NR küszöb +HISTORY_MSG_89;Zajcsökkentés (NR) HISTORY_MSG_8;Expozíció kompenzáció -HISTORY_MSG_9;Világos tónus tömörítés +HISTORY_MSG_90;NR - luminanciazaj +HISTORY_MSG_91;NR - színzaj +HISTORY_MSG_92;NR - gamma +HISTORY_MSG_95;Színtelítettség +HISTORY_MSG_96;'a' görbe +HISTORY_MSG_97;'b' görbe +HISTORY_MSG_98;Bayer-deinterpoláció +HISTORY_MSG_99;Előfeldolgozás +HISTORY_MSG_9;Világos tónusok tömörítése HISTORY_NEWSNAPSHOT;Új -HISTORY_NEWSNAPSHOTAS;cimkével... +HISTORY_NEWSNAPSHOTAS;címkével... HISTORY_NEWSSDIALOGLABEL;Pillanatkép cimkéje: HISTORY_NEWSSDIALOGTITLE;Új pillanatkép HISTORY_SETTO;új érték: HISTORY_SNAPSHOT;Pillanatkép HISTORY_SNAPSHOTS;Pillanatképek -ICMPANEL_FILEDLGFILTERANY;inden fájl +ICMPANEL_FILEDLGFILTERANY;Minden fájl ICMPANEL_FILEDLGFILTERICM;ICC színprofil fájl ICMPANEL_GAMMABEFOREINPUT;Gamma korrekció a bemeneti profil előtt -ICMPANEL_INPUTCAMERA;Fényképezőgép alapértelmezése +ICMPANEL_INPUTCAMERA;Fényképezőgép szerinti alapértelmezett ICMPANEL_INPUTCUSTOM;Saját ICMPANEL_INPUTDLGLABEL;Bemeneti színprofil kiválasztása... ICMPANEL_INPUTEMBEDDED;Beágyazott profil, ha van ICMPANEL_INPUTPROFILE;Bemeneti színprofil -ICMPANEL_NOICM;Nincs színmenedzsment: sRGB kimenet +ICMPANEL_NOICM;Nincs színkezelés: sRGB kimenet ICMPANEL_OUTPUTDLGLABEL;Kimeneti színprofil kiválasztása... ICMPANEL_OUTPUTPROFILE;Kimeneti színprofil ICMPANEL_SAVEREFERENCE;Referencia kép mentése profil kalibráláshoz @@ -249,38 +297,47 @@ IPTCPANEL_TITLE;Címke IPTCPANEL_TITLEHINT;A kép rövid azonosítója (Object Name) IPTCPANEL_TRANSREFERENCE;Továbbítás helye IPTCPANEL_TRANSREFERENCEHINT;A továbbítás helyének megjelölése (Original Transmission Reference) -MAIN_BUTTON_EXIT;Exit +MAIN_BUTTON_EXIT;Kilépés +MAIN_BUTTON_FULLSCREEN;Teljes képernyő MAIN_BUTTON_PREFERENCES;Beállítások -MAIN_BUTTON_QUEUE;Put to queue +MAIN_BUTTON_PUTTOQUEUE;Feldolgozási sorba helyez +MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add hozzá a kiválasztott képet a feldolgozási sorhoz Ctrl+Q +MAIN_BUTTON_QUEUE;Feldolgozási sorba helyezés MAIN_BUTTON_SAVE;Kép mentése MAIN_BUTTON_SAVEAS;másként... +MAIN_BUTTON_SAVE_TOOLTIP;Kiválasztott kép mentése Ctrl+S MAIN_BUTTON_SENDTOEDITOR;Megnyitás külső programmal -MAIN_FRAME_BATCHQUEUE;Batch Queue -MAIN_FRAME_FILEBROWSER;File Browser -MAIN_FRAME_PLACES;Places -MAIN_FRAME_PLACES_ADD;Add -MAIN_FRAME_PLACES_DEL;Del -MAIN_FRAME_RECENT;Recent Folders -MAIN_MSG_ALREADYEXISTS;Ilyen nevü fájl már létezik. +MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Kiválasztott kép szerkesztése külső programmal Ctrl+E +MAIN_BUTTON_UNFULLSCREEN;Teljes képernyő elhagyása +MAIN_FRAME_BATCHQUEUE;Kötegelt feldolgozási sor +MAIN_FRAME_FILEBROWSER;Állományböngésző +MAIN_FRAME_PLACES;Helyek +MAIN_FRAME_PLACES_ADD;Hozzáadás +MAIN_FRAME_PLACES_DEL;Törlés +MAIN_FRAME_RECENT;Legutóbbi könyvtárak +MAIN_MSG_ALREADYEXISTS;Ilyen nevű állomány már létezik! MAIN_MSG_CANNOTLOAD;A képet nem sikerült betölteni. -MAIN_MSG_CANNOTSAVE;Hiba történt a fájl mentése közben. -MAIN_MSG_CANNOTSTARTEDITOR;A meadott külső program nem indítható. -MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Állítsa be a helyes elérési útat a "Beállítások" ablakban. +MAIN_MSG_CANNOTSAVE;Hiba történt az állomány mentése közben! +MAIN_MSG_CANNOTSTARTEDITOR;A megadott külső program nem indítható. +MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Állítsa be a helyes elérési utat a "Beállítások" ablakban. +MAIN_MSG_ERRORDURINGIMAGESAVING;Hiba történt a kép mentése során! MAIN_MSG_EXITJOBSINQUEUEINFO;A sorban álló feldolgozatlan képek kilépéskor el fognak veszni. MAIN_MSG_EXITJOBSINQUEUEQUEST;Biztos, hogy ki akar lépni? Feldolgozatlan képek vannak a feldolgozási sorban. MAIN_MSG_JOBSINQUEUE;tennivaló vár a sorban +MAIN_MSG_NAVIGATOR;Navigátor +MAIN_MSG_PLACES;Helyek MAIN_MSG_QOVERWRITE;Felülírjam? MAIN_TAB_BASIC;Alap MAIN_TAB_COLOR;Színek MAIN_TAB_DETAIL;Részletek -MAIN_TAB_DEVELOP;Develop -MAIN_TAB_EXIF;Exif +MAIN_TAB_DEVELOP;Kidolgozás +MAIN_TAB_EXIF;EXIF MAIN_TAB_EXPOSURE;Expozíció -MAIN_TAB_FILTER;Filter +MAIN_TAB_FILTER;Szűrők MAIN_TAB_ICM;ICM MAIN_TAB_IPTC;IPTC -MAIN_TAB_METADATA;Meta-adatok -MAIN_TAB_TAGGING;Tagging +MAIN_TAB_METADATA;Metaadatok +MAIN_TAB_TAGGING;Címkézés MAIN_TAB_TRANSFORM;Transzformáció MAIN_TOOLTIP_HIDEFP;A fájlkezelő alsó panel elrejtése/megjelenítése (Gyorsbillentyű: F) MAIN_TOOLTIP_HIDEHP;Az előzményeket is tartalmazó bal panel elrejtése/megjelenítése (Gyorsbillentyű: H) @@ -290,6 +347,7 @@ MAIN_TOOLTIP_PREFERENCES;Beállítások megváltoztatása MAIN_TOOLTIP_QINFO;Néhány fontos információ megjelenítése a képről MAIN_TOOLTIP_SAVE;A kép mentése az alapértelmezett könyvtárba az alapértelmezett néven MAIN_TOOLTIP_SAVEAS;A kép mentése a kiválasztott könyvtárba +MAIN_TOOLTIP_TOGGLE;Előtte/utána nézet be- és kikapcsolása B PARTIALPASTE_BASICGROUP;Alapbeállítások PARTIALPASTE_CACORRECTION;Kromatikus aberráció PARTIALPASTE_COARSETRANS;90 fokonkénti forgatás/tükrözés @@ -299,49 +357,58 @@ PARTIALPASTE_COLORGROUP;Színeket érintő beállítások PARTIALPASTE_COLORMIXER;Színkeverő PARTIALPASTE_COLORSHIFT;Színeltolás PARTIALPASTE_COMPOSITIONGROUP;Kompozíciós beállítások -PARTIALPASTE_CROP;Crop +PARTIALPASTE_CROP;Vágás PARTIALPASTE_DIALOGLABEL;Feldolgozási beállítások részleges alkalmazása PARTIALPASTE_DISTORTION;Torzítás -PARTIALPASTE_EXIFCHANGES;Exif változtatások +PARTIALPASTE_EXIFCHANGES;EXIF változtatások PARTIALPASTE_EXPOSURE;Expozíció -PARTIALPASTE_HLRECOVERY;Beégett részletek megmentése +PARTIALPASTE_HLRECOVERY;Kiégett részletek megmentése PARTIALPASTE_ICMSETTINGS;ICM beállítások PARTIALPASTE_IPTCINFO;IPTC információk +PARTIALPASTE_LABCURVE;Lab görbe +PARTIALPASTE_LABCURVE;Luminanciagörbe PARTIALPASTE_LENSGROUP;Objektív optikai hibáinak javítása PARTIALPASTE_LUMACURVE;Luminancia görbe PARTIALPASTE_LUMADENOISE;Luminanciazaj-csökkentés PARTIALPASTE_LUMINANCEGROUP;Luminanciát érintő beállítások -PARTIALPASTE_METAICMGROUP;Meta-adat/Színprofil beállítások +PARTIALPASTE_METAICMGROUP;Metaadat/Színprofil beállítások PARTIALPASTE_RESIZE;Átméretezés PARTIALPASTE_ROTATION;Forgatás -PARTIALPASTE_SHADOWSHIGHLIGHTS;Árnyékos/Fényes részek +PARTIALPASTE_SHADOWSHIGHLIGHTS;Árnyékos/Világos részek PARTIALPASTE_SHARPENING;Élesítés -PARTIALPASTE_VIGNETTING;Saroksötétedés +PARTIALPASTE_VIGNETTING;Peremsötétedés PARTIALPASTE_WHITEBALANCE;Fehéregyensúly +PREFERENCES_ADD;Hozzáadás PREFERENCES_APPLNEXTSTARTUP;újraindítás után érvényes -PREFERENCES_BLINKCLIPPED;Beégett részek villogtatása +PREFERENCES_BATCH_PROCESSING;Kötegelt feldolgozás +PREFERENCES_BEHAVIOR;Viselkedés +PREFERENCES_BLINKCLIPPED;Kiégett részek villogtatása PREFERENCES_CACHECLEARALL;Teljes gyorsítótár törlése -PREFERENCES_CACHECLEARPROFILES;Feldolgozási paraméterek törlése +PREFERENCES_CACHECLEARPROFILES;Feldolg. param. törlése PREFERENCES_CACHECLEARTHUMBS;Előnézeti képek törlése -PREFERENCES_CACHEFORMAT1;Egyebi (gyorsabb és szebb) +PREFERENCES_CACHEFORMAT1;Egyedi (gyorsabb és szebb) PREFERENCES_CACHEFORMAT2;JPEG (kisebb a háttértáron) PREFERENCES_CACHEMAXENTRIES;Gyorsítótárban tárolt képek max. száma PREFERENCES_CACHEOPTS;Gyorsítótár beállítások -PREFERENCES_CACHESTRAT1;Inkább gyors mint memóriatakarékos -PREFERENCES_CACHESTRAT2;Inkább memóriatakarékos mint gyors +PREFERENCES_CACHESTRAT1;Inkább gyors, mint memóriatakarékos +PREFERENCES_CACHESTRAT2;Inkább memóriatakarékos, mint gyors PREFERENCES_CACHESTRAT;Gyorsítótár stratégia PREFERENCES_CACHETHUMBFORM;Előnézeti kép formátuma PREFERENCES_CACHETHUMBHEIGHT;Előnézeti kép maximális magassága +PREFERENCES_CACORRECTION;Színihiba (kromatikus aberráció) automatikus helyesbítése PREFERENCES_CLEARDLG_LINE1;Gyorsítótár ürítése PREFERENCES_CLEARDLG_LINE2;Ez eltarthat pár másodpercig. PREFERENCES_CLEARDLG_TITLE;Kérem várjon -PREFERENCES_CLIPPINGIND;Beégett részek jelzése +PREFERENCES_CLIPPINGIND;Kiégett és bebukott részek jelzése PREFERENCES_CMETRICINTENT;Intent PREFERENCES_DATEFORMAT;Dátumformátum PREFERENCES_DATEFORMATHINT;A következő jeleket lehet használni:\n%y : év\n%m : hónap\n%d : nap\n\nPéldául a magyar dátumformátum:\n%y/%m/%d +PREFERENCES_DCBENHANCE;DCB helyesbítő lépés alkalmazása +PREFERENCES_DCBITERATIONS;DCB iterációk száma PREFERENCES_DEFAULTLANG;Alapértelmezett nyelv PREFERENCES_DEFAULTTHEME;Alapértelmezett kinézet PREFERENCES_DEMOSAICINGALGO;Bayer interpoláció +PREFERENCES_DIRDARKFRAMES;Dark frame könyvtára PREFERENCES_DIRHOME;Saját könyvtár PREFERENCES_DIRLAST;Utoljára látogatott könyvtár PREFERENCES_DIROTHER;Más @@ -349,30 +416,36 @@ PREFERENCES_DIRSELECTDLG;Képek könyvtára induláskor... PREFERENCES_DIRSOFTWARE;Telepítés helye PREFERENCES_DMETHOD;Algoritmus PREFERENCES_EDITORCMDLINE;Egyéb parancssor +PREFERENCES_EDITORLAYOUT;Szerkesztési mód PREFERENCES_EXTERNALEDITOR;Külső képszerkesztő program PREFERENCES_FALSECOLOR;Színhiba-elnyomási lépések -PREFERENCES_FBROWSEROPTS;Fájl böngésző beállítások -PREFERENCES_FILEFORMAT;Fájl formátum -PREFERENCES_FORIMAGE;Egyéb képekre -PREFERENCES_FORRAW;RAW fájlokra +PREFERENCES_FBROWSEROPTS;Állományböngésző beállításai +PREFERENCES_FILEFORMAT;Állományformátum +PREFERENCES_FORIMAGE;Egyéb képekhez +PREFERENCES_FORRAW;RAW állományokhoz PREFERENCES_GIMPPATH;GIMP telepítési könyvtára PREFERENCES_GTKTHEME;Alap GTK kinézet PREFERENCES_HINT;Tipp -PREFERENCES_HLTHRESHOLD;Küszöbérték kiégett fényekhez +PREFERENCES_HLTHRESHOLD;Küszöbérték kiégett területekhez +PREFERENCES_HOTDEADPIXFILT;Hot/dead pixel szűrő alkalmazása PREFERENCES_ICCDIR;ICC profilok könyvtára PREFERENCES_IMPROCPARAMS;Alapértelmezett feldolgozási paraméterek -PREFERENCES_INTENT_ABSOLUTE;Absolute Colorimetric -PREFERENCES_INTENT_PERCEPTUAL;Perceptual -PREFERENCES_INTENT_RELATIVE;Relative Colorimetric -PREFERENCES_INTENT_SATURATION;Saturation +PREFERENCES_INTENT_ABSOLUTE;Abszolút kolorimetrikus +PREFERENCES_INTENT_PERCEPTUAL;Perceptuális +PREFERENCES_INTENT_RELATIVE;Relatív kolorimetrikus +PREFERENCES_INTENT_SATURATION;Színtelítettség +PREFERENCES_LINEDENOISE;Sorzaj-szűrő PREFERENCES_LIVETHUMBNAILS;Élő előnézeti képek (lassabb) PREFERENCES_MONITORICC;Monitor ICC profilja +PREFERENCES_MULTITAB;Több szerkesztőfül PREFERENCES_OUTDIR;Kimeneti alapértelmezett könyvtár PREFERENCES_OUTDIRFOLDER;Mentés ebbe a könyvtárba: -PREFERENCES_OUTDIRFOLDERHINT;Ha ezt a lehetőséget választja, az összes feldolgozott képek ebbe a könyvtárba kerül +PREFERENCES_OUTDIRFOLDERHINT;Ha ezt a lehetőséget választja, az összes feldolgozott kép ebbe a könyvtárba kerül PREFERENCES_OUTDIRHINT;A következő jeleket lehet használni:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nEzek a jelek a megnyitott kép elérési útvonalának részeire vonatkoznak.\n\nPéldául, ha a /home/tom/image/02-09-2006/dsc0012.nef képet nyitjuk meg, ezek a jelek a következőket jelentik:\n%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\nHa oda kívánja menteni a kész képet, ahol az eredeti volt, az alábbiakat kell beírni:\n%p1/%f\n\nHa a kész képet az eredeti könyvtárán belül egy "converted" alkönyvtárba kívánja menteni, az alábbiakat kell beírni:\n%p1/converted/%f\n\nHa a kész képeket a '/home/tom/converted' könyvtárba kívánja menteni az eredeti, dátumot tartalmazó alkönyvtár megtartásával, írja ezt:\n%p2/converted/%d1/%f PREFERENCES_OUTDIRTEMPLATE;Sablon használata PREFERENCES_OUTDIRTEMPLATEHINT;A következő jeleket lehet használni:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nEzek a jelek a megnyitott kép elérési útvonalának részeire vonatkoznak.\n\nPéldául, ha a /home/tom/image/02-09-2006/dsc0012.nef képet nyitjuk meg, ezek a jelek a következőket jelentik:\n%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\nHa oda kívánja menteni a kész képet, ahol az eredeti volt, az alábbiakat kell beírni:\n%p1/%f\n\nHa a kész képet az eredeti könyvtárán belül egy "converted" alkönyvtárba kívánja menteni, az alábbiakat kell beírni:\n%p1/converted/%f\n\nHa a kész képeket a '/home/tom/converted' könyvtárba kívánja menteni az eredeti, dátumot tartalmazó alkönyvtár megtartásával, írja ezt:\n%p2/converted/%d1/%f +PREFERENCES_OVERLAY_FILENAMES;Állománynevek megjelenítése az előnézeti képeken +PREFERENCES_OVERWRITEOUTPUTFILE;A már létező kimeneti állományok felülírása PREFERENCES_PARSEDEXT;Felismert kiterjesztések PREFERENCES_PARSEDEXTADD;Kiterjesztés hozzáadása PREFERENCES_PARSEDEXTADDHINT;A kiterjesztés beírása után ez a gomb felveszi a listára @@ -384,22 +457,27 @@ PREFERENCES_PROFILEPRFILE;A kép mellettit használja PREFERENCES_PROFILESAVECACHE;Feldolgozási paraméterek mentése a gyorsítótárba PREFERENCES_PROFILESAVEINPUT;Feldolgozási paraméterek mentése a kép mellé PREFERENCES_PSPATH;Adobe Photoshop telepítési könyvtára +PREFERENCES_SELECTFONT;Betűtípus kiválasztása PREFERENCES_SELECTICCDIRDLG;ICC profilok könyvtárának kiválasztása... PREFERENCES_SELECTLANG;Nyelv kiválasztása PREFERENCES_SELECTMONITORPROFDLG;Monitor ICC profiljának kiválasztása... PREFERENCES_SELECTTHEME;Kinézet kiválasztása -PREFERENCES_SHOWBASICEXIF;Fontosabb Exif információk megjelenítése +PREFERENCES_SET;Beállítás +PREFERENCES_SHOWBASICEXIF;Fontosabb EXIF információk megjelenítése PREFERENCES_SHOWDATETIME;Felvétel dátumának és idejének megjelenítése PREFERENCES_SHOWONLYRAW;Csak a RAW fájok megjelenítése -PREFERENCES_SHTHRESHOLD;Küszöbérték elveszett árnyékokhoz +PREFERENCES_SHTHRESHOLD;Küszöbérték bebukott árnyékokhoz +PREFERENCES_SINGLETAB;Egyetlen szerkesztőfül PREFERENCES_STARTUPIMDIR;Képek könyvtára induláskor PREFERENCES_TAB_BROWSER;Fájl böngésző -PREFERENCES_TAB_COLORMGR;Szín menedzsment +PREFERENCES_TAB_COLORMGR;Színkezelés PREFERENCES_TAB_GENERAL;Általános PREFERENCES_TAB_IMPROC;Képfeldolgozás -PREFERENCES_TAB_OUTPUT;Fájl mentési beállítások +PREFERENCES_TAB_OUTPUT;Állománymentési beállítások PREFERENCES_THUMBSIZE;Képek mérete a böngészőben -PROFILEPANEL_FILEDLGFILTERANY;Minden fájl +PREFERENCES_USESYSTEMTHEME;Rendszer megjelenésének használata +PREFERENCES_WORKFLOW;Munkamenet +PROFILEPANEL_FILEDLGFILTERANY;Minden állomány PROFILEPANEL_FILEDLGFILTERPP;Feldolgozási beállítások PROFILEPANEL_LABEL;Feldolgozási beállítások PROFILEPANEL_LOADDLGLABEL;Feldolgozási beállítások betöltése... @@ -413,7 +491,7 @@ PROFILEPANEL_TOOLTIPCOPY;Feldolgozási beállítások vágólapra mentése PROFILEPANEL_TOOLTIPLOAD;Feldolgozási beállítások betöltése PROFILEPANEL_TOOLTIPPASTE;Feldolgozási beállítások beillesztése a vágólapról PROFILEPANEL_TOOLTIPSAVE;Feldolgozási beállítások mentése -PROGRESSBAR_DECODING;Raw fájl dekódolása... +PROGRESSBAR_DECODING;Raw állomány dekódolása... PROGRESSBAR_DEMOSAICING;Bayer interpoláció... PROGRESSBAR_LOADING;Kép betöltése... PROGRESSBAR_LOADJPEG;JPEG fájl betöltése... @@ -426,12 +504,15 @@ PROGRESSBAR_SAVEPNG;PNG fájl mentése... PROGRESSBAR_SAVETIFF;TIFF fájl mentése... PROGRESSDLG_LOADING;Fájl betöltése... PROGRESSDLG_PROCESSING;Kép feldolgozása... +PROGRESSDLG_PROFILECHANGEDINBROWSER;A profil az állományböngészőben megváltozott. PROGRESSDLG_SAVING;Fájl mentése... QINFO_FOCALLENGTH;Fokális távolság QINFO_ISO;ISO QINFO_LENS;Objektív -QINFO_NOEXIF;Exif adat nem áll rendelkezésre. -SAVEDLG_FILEFORMAT;Fájl formátum +QINFO_NOEXIF;EXIF adat nem áll rendelkezésre. +RBATCHQUEUE_AUTOSTART;Autoindítás +SAVEDLG_AUTOSUFFIX;Utótag hozzáadása automatikusan, ha az állomány már létezik +SAVEDLG_FILEFORMAT;Állományformátum SAVEDLG_JPEGQUAL;JPEG Minőség SAVEDLG_JPGFILTER;JPEG fájlok SAVEDLG_PNGCOMPR;PNG Tömörítés @@ -442,9 +523,10 @@ SAVEDLG_PUTTOQUEUETAIL;Feldolgozási sorba helyezés az utolsó helyre SAVEDLG_SAVEIMMEDIATELY;Mentés azonnal SAVEDLG_SAVESPP;Feldolgozási paraméterek mentése a kép mellé SAVEDLG_TIFFFILTER;TIFF fájlok -TOOLBAR_TOOLTIP_CROP;Képkivágás (Gyorsbillentyű: C) +SAVEDLG_TIFFUNCOMPRESSED;Tömörítetlen TIFF +TOOLBAR_TOOLTIP_CROP;Vágás (Gyorsbillentyű: C) TOOLBAR_TOOLTIP_HAND;"Kéz" eszköz (Gyorsbillentyű: N) -TOOLBAR_TOOLTIP_STRAIGHTEN;Vizszintes/függőleges vonal kijelölése (Gyorsbillentyű: S) +TOOLBAR_TOOLTIP_STRAIGHTEN;Vízszintes/függőleges vonal kijelölése (Gyorsbillentyű: S) TOOLBAR_TOOLTIP_WB;Fehéregyensúly kijelölés (Gyorsbillentyű: W) TP_CACORRECTION_BLUE;Kék TP_CACORRECTION_LABEL;Kromatikus aberráció @@ -459,8 +541,8 @@ TP_COARSETRAF_TOOLTIP_ROTLEFT;Forgatás balra TP_COARSETRAF_TOOLTIP_ROTRIGHT;Forgatás jobbra TP_COARSETRAF_TOOLTIP_VFLIP;Függőleges tükrözés TP_COLORBOOST_ACHANNEL;"a" csatorna -TP_COLORBOOST_AMOUNT;Mennyiség -TP_COLORBOOST_AVOIDCOLORCLIP;Szín telítődés elkerülése +TP_COLORBOOST_AMOUNT;Mérték +TP_COLORBOOST_AVOIDCOLORCLIP;Színcsatorna-telítődés elkerülése TP_COLORBOOST_BCHANNEL;"b" csatorna TP_COLORBOOST_CHAB;a & b együtt TP_COLORBOOST_CHANNEL;Csatorna @@ -469,7 +551,7 @@ TP_COLORBOOST_ENABLESATLIMITER;Telítettség korlátozás TP_COLORBOOST_LABEL;Színtelítettség TP_COLORBOOST_SATLIMIT;Telítettség korlát TP_COLORDENOISE_EDGESENSITIVE;Élérzékeny -TP_COLORDENOISE_EDGETOLERANCE;Él tolerancia +TP_COLORDENOISE_EDGETOLERANCE;Éltolerancia TP_COLORDENOISE_LABEL;Színzaj-csökkentés TP_COLORDENOISE_RADIUS;Sugár TP_COLORSHIFT_BLUEYELLOW;Kék-Sárga @@ -491,23 +573,56 @@ TP_CROP_SELECTCROP; Kijelölés egérrel TP_CROP_W;Sz TP_CROP_X;x TP_CROP_Y;y +TP_DETAIL_AMOUNT;Mérték +TP_DIRPYRDENOISE_CHROMA;Színzaj +TP_DIRPYRDENOISE_GAMMA;Gamma +TP_DIRPYRDENOISE_LABEL;Zajcsökkentés +TP_DIRPYRDENOISE_LUMA;Luminancia +TP_DIRPYREQUALIZER_LABEL;Kontraszt részletek szerint +TP_DIRPYREQUALIZER_LUMACOARSEST;Durva részletek +TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Kontraszt- +TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Kontraszt+ +TP_DIRPYREQUALIZER_LUMAFINEST;Finom részletek +TP_DIRPYREQUALIZER_LUMANEUTRAL;Semleges +TP_DIRPYREQUALIZER_THRESHOLD;Küszöb TP_DISTORTION_AMOUNT;Erősség TP_DISTORTION_LABEL;Torzítás +TP_EQUALIZER_CONTRAST_MINUS;Kontraszt- +TP_EQUALIZER_CONTRAST_PLUS;Kontraszt+ +TP_EQUALIZER_FINEST;Finom részletek +TP_EQUALIZER_LABEL;Wavelet equalizer +TP_EQUALIZER_LARGEST;Durva részletek +TP_EQUALIZER_NEUTRAL;Semleges TP_EXPOSURE_AUTOLEVELS;Auto szint TP_EXPOSURE_BLACKLEVEL;Fekete szint TP_EXPOSURE_BRIGHTNESS;Fényerő TP_EXPOSURE_CLIP;Vágás -TP_EXPOSURE_COMPRHIGHLIGHTS;Világos tónus tömörítés -TP_EXPOSURE_COMPRSHADOWS;Sötét tónus tömörítés +TP_EXPOSURE_COMPRHIGHLIGHTS;Világos tónusok tömörítése +TP_EXPOSURE_COMPRSHADOWS;Sötét tónusok tömörítése TP_EXPOSURE_CONTRAST;Kontraszt TP_EXPOSURE_CURVEEDITOR;Tónusgörbe TP_EXPOSURE_EXPCOMP;Exp. Kompenzáció TP_EXPOSURE_LABEL;Expozíció +TP_EXPOSURE_SATURATION;Színtelítettség TP_HLREC_CIELAB;CIELab visszaállítás -TP_HLREC_COLOR;Szín terjesztés -TP_HLREC_LABEL;Beégett részletek megmentése +TP_HLREC_COLOR;Színterjesztés +TP_HLREC_LABEL;Kiégett részletek megmentése TP_HLREC_LUMINANCE;Luminancia TP_HLREC_METHOD;Preferencia: +TP_HSVEQUALIZER1;Vörös +TP_HSVEQUALIZER2;Sárga +TP_HSVEQUALIZER3;Lime +TP_HSVEQUALIZER4;Zöld +TP_HSVEQUALIZER5;Aqua +TP_HSVEQUALIZER6;Kék +TP_HSVEQUALIZER7;Lila +TP_HSVEQUALIZER8;Magenta +TP_HSVEQUALIZER_CHANNEL;HSV Csatorna +TP_HSVEQUALIZER_HUE;Árnyalat +TP_HSVEQUALIZER_LABEL;HSV Equalizer +TP_HSVEQUALIZER_NEUTRAL;Semleges +TP_HSVEQUALIZER_SAT;Színtelítettség +TP_HSVEQUALIZER_VAL;Színérték TP_ICM_FILEDLGFILTERANY;inden fájl TP_ICM_FILEDLGFILTERICM;ICC színprofil fájl TP_ICM_GAMMABEFOREINPUT;Gamma korrekció a bemeneti profil előtt @@ -515,50 +630,73 @@ TP_ICM_INPUTCAMERA;Fényképezőgép alapértelmezése TP_ICM_INPUTCUSTOM;Saját TP_ICM_INPUTDLGLABEL;Bemeneti színprofil kiválasztása... TP_ICM_INPUTEMBEDDED;Beágyazott profil, ha van +TP_ICM_INPUTNONE;Profil mellőzése TP_ICM_INPUTPROFILE;Bemeneti színprofil TP_ICM_LABEL;ICM -TP_ICM_NOICM;Nincs színmenedzsment: sRGB kimenet +TP_ICM_NOICM;Nincs színkezelés: sRGB kimenet TP_ICM_OUTPUTDLGLABEL;Kimeneti színprofil kiválasztása... TP_ICM_OUTPUTPROFILE;Kimeneti színprofil -TP_ICM_SAVEREFERENCE;Referencia kép mentése profil kalibráláshoz -TP_ICM_WORKINGPROFILE;Munka színprofil +TP_ICM_SAVEREFERENCE;Referenciakép mentése profilkalibráláshoz +TP_ICM_WORKINGPROFILE;Feldolgozási színprofil +TP_IMPULSEDENOISE_LABEL;Pontzaj-csökkentés +TP_IMPULSEDENOISE_THRESH;Küszöb +TP_LABCURVE_BRIGHTNESS;Világosság +TP_LABCURVE_CONTRAST;Kontraszt +TP_LABCURVE_CURVEEDITOR;Luminanciagörbe +TP_LABCURVE_LABEL;Lab görbék +TP_LABCURVE_SATURATION;Színtelítettség +TP_LENSGEOM_AUTOCROP;Automatikus vágás +TP_LENSGEOM_FILL;Automatikus kitöltés +TP_LENSGEOM_LABEL;Objektív / Geometria TP_LUMACURVE_BLACKLEVEL;Fekete szint TP_LUMACURVE_BRIGHTNESS;Fényerő -TP_LUMACURVE_COMPRHIGHLIGHTS;Világos tónus tömörítés -TP_LUMACURVE_COMPRSHADOWS;Sötét tónus tömörítés +TP_LUMACURVE_COMPRHIGHLIGHTS;Világos tónusok tömörítése +TP_LUMACURVE_COMPRSHADOWS;Sötét tónusok tömörítése TP_LUMACURVE_CONTRAST;Kontraszt -TP_LUMACURVE_CURVEEDITOR;Fényesség görbe +TP_LUMACURVE_CURVEEDITOR;Luminanciagörbe TP_LUMACURVE_LABEL;Luminancia -TP_LUMADENOISE_EDGETOLERANCE;Él tolerancia +TP_LUMADENOISE_EDGETOLERANCE;Éltolerancia TP_LUMADENOISE_LABEL;Luminanciazaj-csökkentés TP_LUMADENOISE_RADIUS;Sugár +TP_PERSPECTIVE_HORIZONTAL;Vízszintes +TP_PERSPECTIVE_LABEL;Perspektíva +TP_PERSPECTIVE_VERTICAL;Függőleges +TP_PREPROCESS_DARKFRAME;Dark frame +TP_PREPROCESS_DFAUTOSELECT;Auto selection +TP_RAWPANEL_DEMOSAICING;Deinterpoláció +TP_RAWPANEL_PREPROCESSING;Előfeldolgozás TP_RESIZE_BICUBIC;Bicubic TP_RESIZE_BICUBICSF;Bicubic (lágyabb) TP_RESIZE_BICUBICSH;Bicubic (keményebb) TP_RESIZE_BILINEAR;Bilineáris +TP_RESIZE_DOWNSCALEB;Downscale (Jobb minőség) +TP_RESIZE_DOWNSCALEF;Downscale (Gyorsabb) TP_RESIZE_FULLSIZE;Képméret: TP_RESIZE_H;M: +TP_RESIZE_HEIGHT;Magasság TP_RESIZE_LABEL;Átméretezés +TP_RESIZE_LANCZOS;Lanczos TP_RESIZE_METHOD;Algoritmus: TP_RESIZE_NEAREST;Legközelebbi szomszéd TP_RESIZE_SCALE;Szorzó TP_RESIZE_W;Sz: -TP_ROTATE_AUTOCROP;Autómatikus kivágás +TP_RESIZE_WIDTH;Szélesség +TP_ROTATE_AUTOCROP;Automatikus kivágás TP_ROTATE_DEGREE;Fok TP_ROTATE_FILL;Kitöltés TP_ROTATE_LABEL;Forgatás -TP_ROTATE_SELECTLINE; Vizszintes vonal kijelölése -TP_SHADOWSHLIGHTS_HIGHLIGHTS;Fényes részek -TP_SHADOWSHLIGHTS_HLTONALW;Tonális szélesség -TP_SHADOWSHLIGHTS_LABEL;Árnyékos/Fényes részek +TP_ROTATE_SELECTLINE; Vízszintes vonal kijelölése +TP_SHADOWSHLIGHTS_HIGHLIGHTS;Csúcsfények +TP_SHADOWSHLIGHTS_HLTONALW;Csúcsfények tónustartománya +TP_SHADOWSHLIGHTS_LABEL;Árnyékok/Csúcsfények TP_SHADOWSHLIGHTS_LOCALCONTR;Lokális kontraszt TP_SHADOWSHLIGHTS_RADIUS;Sugár -TP_SHADOWSHLIGHTS_SHADOWS;Sötét részek -TP_SHADOWSHLIGHTS_SHTONALW;Tonális szélesség +TP_SHADOWSHLIGHTS_SHADOWS;Árnyékok +TP_SHADOWSHLIGHTS_SHTONALW;Árnyékok tónustartománya TP_SHARPENING_AMOUNT;Erősség TP_SHARPENING_EDRADIUS;Sugár -TP_SHARPENING_EDTOLERANCE;Él tolerancia -TP_SHARPENING_HALOCONTROL;Mellékhatás csökkentés +TP_SHARPENING_EDTOLERANCE;Éltolerancia +TP_SHARPENING_HALOCONTROL;Mellékhatás-csökkentés TP_SHARPENING_HCAMOUNT;Mértéke TP_SHARPENING_LABEL;Élesítés TP_SHARPENING_METHOD;Algoritmus @@ -570,9 +708,13 @@ TP_SHARPENING_RLD_DAMPING;Zajelnyomás TP_SHARPENING_RLD_ITERATIONS;Iterációszám TP_SHARPENING_THRESHOLD;Küszöb TP_SHARPENING_USM;Unsharp Mask -TP_VIGNETTING_AMOUNT;Erősség -TP_VIGNETTING_LABEL;Saroksötétedés +TP_VIGNETTING_AMOUNT;Mérték +TP_VIGNETTING_CENTER;Középpont +TP_VIGNETTING_CENTER_X;Középpont X +TP_VIGNETTING_CENTER_Y;Középpont Y +TP_VIGNETTING_LABEL;Peremsötétedés TP_VIGNETTING_RADIUS;Sugár +TP_VIGNETTING_STRENGTH;Erősség TP_WBALANCE_AUTO;Automatikus TP_WBALANCE_CAMERA;Tárolt TP_WBALANCE_CUSTOM;Egyedi @@ -588,7 +730,13 @@ ZOOMBAR_LARGE;Nagy ZOOMBAR_NORMAL;Normál ZOOMBAR_PREVIEW;Előnézet ZOOMBAR_SCALE;Kicsinyítés -ZOOMBAR_SMALL;Kicsi +ZOOMBAR_SMALL;KicsiHISTOGRAM_BUTTON_B;B +ZOOMPANEL_100;(100%) +ZOOMPANEL_NEWCROPWINDOW;(Új) lupe megnyitása +ZOOMPANEL_ZOOM100;Nagyítás 100%-ra 1 +ZOOMPANEL_ZOOMFITSCREEN;Képernyő méretéhez igazítás F +ZOOMPANEL_ZOOMIN;Nagyítás + +ZOOMPANEL_ZOOMOUT;Kicsinyítés - !!!!!!!!!!!!!!!!!!!!!!!!! @@ -597,59 +745,14 @@ ZOOMBAR_SMALL;Kicsi !BATCHQUEUE_AUTOSTART;Auto start -!BATCH_PROCESSING;Batch processing -!CURVEEDITOR_CURVE;Curve -!CURVEEDITOR_CURVES;Curves -!CURVEEDITOR_CUSTOM;Custom -!CURVEEDITOR_DARKS;Darks -!CURVEEDITOR_HIGHLIGHTS;Highlights -!CURVEEDITOR_LIGHTS;Lights -!CURVEEDITOR_NURBS;Control cage -!CURVEEDITOR_PARAMETRIC;Parametric -!CURVEEDITOR_SHADOWS;Shadows -!CURVEEDITOR_TYPE;Type: -!EXIFFILTER_METADATAFILTER;Enable Metadata Filters -!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... +!EDITWINDOW_TITLE;Image Edit !FILEBROWSER_AUTODARKFRAME;Auto dark frame -!FILEBROWSER_CURRENT_NAME;Current name: -!FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory -!FILEBROWSER_NEW_NAME;New name: !FILEBROWSER_SELECTDARKFRAME;Select dark frame... -!FILEBROWSER_SHOWEXIFINFO;Show EXIF info i -!FILEBROWSER_TOOLTIP_STOPPROCESSING;Start processing automatically when a new job arrives -!FILEBROWSER_USETEMPLATE;Use template: -!GENERAL_AFTER;After -!GENERAL_BEFORE;Before -!GENERAL_HIGH_QUALITY;High Quality -!GENERAL_UNCHANGED;(Unchanged) !HISTOGRAM_BUTTON_B;B -!HISTOGRAM_BUTTON_G;G -!HISTOGRAM_BUTTON_L;L -!HISTOGRAM_BUTTON_R;R -!HISTORY_MSG_82;Profile Changed -!HISTORY_MSG_83;High quality shadows/highlights -!HISTORY_MSG_84;Perspective correction -!HISTORY_MSG_85;Wavelet coefficients -!HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels -!MAIN_BUTTON_FULLSCREEN;Fullscreen -!MAIN_BUTTON_PUTTOQUEUE;Put to queue -!MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image Ctrl+S -!MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor Ctrl+E -!MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen -!MAIN_MSG_ERRORDURINGIMAGESAVING;Error during image saving -!MAIN_MSG_NAVIGATOR;Navigator -!MAIN_MSG_PLACES;Places !MAIN_TAB_RAW;RAW !MAIN_TOGGLE_BEFORE_AFTER;B|A -!MAIN_TOOLTIP_TOGGLE;Toggle before/after view B !NAVIGATOR_B_NA;B = n/a !NAVIGATOR_B_VALUE;B = %1 !NAVIGATOR_G_NA;G = n/a @@ -669,80 +772,9 @@ ZOOMBAR_SMALL;Kicsi !NAVIGATOR_V_NA;V = n/a !NAVIGATOR_V_VALUE;V = %1 !NAVIGATOR_XY_NA;x = n/a, y = n/a -!PARTIALPASTE_LABCURVE;Lab curve -!PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option -!PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing -!PREFERENCES_BEHAVIOR;Behavior -!PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame -!PREFERENCES_DCBENHANCE;Apply DCB enhancement step -!PREFERENCES_DCBITERATIONS;Number of DCB iterations -!PREFERENCES_DIRDARKFRAMES;Dark frames directory -!PREFERENCES_EDITORLAYOUT;Editor Layout !PREFERENCES_GREENEQUIL;Green equilibration -!PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter -!PREFERENCES_LINEDENOISE;Line noise filter -!PREFERENCES_MULTITAB;Multiple tabs mode -!PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_PROPERTY;Property -!PREFERENCES_SELECTFONT;Select font -!PREFERENCES_SET;SET -!PREFERENCES_SINGLETAB;Single tab mode -!PREFERENCES_USESYSTEMTHEME; Use System Theme -!PREFERENCES_WORKFLOW;Workflow -!PROGRESSDLG_PROFILECHANGEDINBROWSER;Profile changed in browser -!SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists -!SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF -!TP_DETAIL_AMOUNT;Amount -!TP_DIRPYRDENOISE_CHROMA;Chrominance -!TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction -!TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer -!TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest -!TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- -!TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ -!TP_DIRPYREQUALIZER_LUMAFINEST;Finest -!TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutral -!TP_DIRPYREQUALIZER_THRESHOLD;Threshold -!TP_EQUALIZER_CONTRAST_MINUS;Contrast- -!TP_EQUALIZER_CONTRAST_PLUS;Contrast+ -!TP_EQUALIZER_FINEST;finest -!TP_EQUALIZER_LABEL;Wavelet equalizer -!TP_EQUALIZER_LARGEST;coarsest -!TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction -!TP_IMPULSEDENOISE_THRESH;Threshold -!TP_LABCURVE_BRIGHTNESS;Brightness -!TP_LABCURVE_CONTRAST;Contrast -!TP_LABCURVE_CURVEEDITOR;Luminance Curve -!TP_LABCURVE_LABEL;Lab Curves -!TP_LABCURVE_SATURATION;Saturation -!TP_LENSGEOM_AUTOCROP;Auto Crop -!TP_LENSGEOM_FILL;Auto Fill -!TP_LENSGEOM_LABEL;Lens / Geometry -!TP_PERSPECTIVE_HORIZONTAL;Horizontal -!TP_PERSPECTIVE_LABEL;Perspective -!TP_PERSPECTIVE_VERTICAL;Vertical -!TP_PREPROCESS_DARKFRAME;Dark frame -!TP_PREPROCESS_DFAUTOSELECT;Auto selection -!TP_RAWPANEL_DEMOSAICING;Demosaicing -!TP_RAWPANEL_PREPROCESSING;Preprocessing -!TP_RESIZE_DOWNSCALEB;Downscale (Better) -!TP_RESIZE_DOWNSCALEF;Downscale (Faster) -!TP_RESIZE_HEIGHT;Height -!TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: -!TP_RESIZE_WIDTH;Width -!TP_VIGNETTING_CENTER;Center -!TP_VIGNETTING_CENTER_X;Center X -!TP_VIGNETTING_CENTER_Y;Center Y -!TP_VIGNETTING_STRENGTH;Strength -!ZOOMPANEL_100;(100%) -!ZOOMPANEL_NEWCROPWINDOW;Open (new) detail window -!ZOOMPANEL_ZOOM100;Zoom to 100% 1 -!ZOOMPANEL_ZOOMFITSCREEN;Fit to screen F -!ZOOMPANEL_ZOOMIN;Zoom In + -!ZOOMPANEL_ZOOMOUT;Zoom Out - diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 6b81f8306..0b48d5580 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -668,6 +668,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit !CURVEEDITOR_CURVE;Curve !CURVEEDITOR_CURVES;Curves !CURVEEDITOR_NURBS;Control cage +!EDITWINDOW_TITLE;Image Edit !FILEBROWSER_AUTODARKFRAME;Auto dark frame !FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory !FILEBROWSER_SELECTDARKFRAME;Select dark frame... @@ -675,18 +676,29 @@ ZOOMPANEL_ZOOMOUT;Zoom uit !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q !MAIN_BUTTON_SAVE_TOOLTIP;Save current image Ctrl+S !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor Ctrl+E @@ -708,6 +720,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SINGLETAB;Single tab mode !PREFERENCES_USESYSTEMTHEME; Use System Theme @@ -715,9 +729,9 @@ ZOOMPANEL_ZOOMOUT;Zoom uit !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -730,7 +744,23 @@ ZOOMPANEL_ZOOMOUT;Zoom uit !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index 5de41baaa..8a5f37b0f 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -610,6 +610,7 @@ ZOOMBAR_SMALL;Liten !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -628,18 +629,29 @@ ZOOMBAR_SMALL;Liten !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -675,7 +687,7 @@ ZOOMBAR_SMALL;Liten !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -687,7 +699,9 @@ ZOOMBAR_SMALL;Liten !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -700,9 +714,9 @@ ZOOMBAR_SMALL;Liten !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -715,7 +729,23 @@ ZOOMBAR_SMALL;Liten !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index 4a52e37c7..a72136496 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -615,6 +615,7 @@ ZOOMBAR_SMALL;Mała !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -633,18 +634,29 @@ ZOOMBAR_SMALL;Mała !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -680,7 +692,7 @@ ZOOMBAR_SMALL;Mała !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -692,7 +704,9 @@ ZOOMBAR_SMALL;Mała !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -704,9 +718,9 @@ ZOOMBAR_SMALL;Mała !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -719,7 +733,23 @@ ZOOMBAR_SMALL;Mała !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index ea1e465a3..2ab190588 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -613,6 +613,7 @@ ZOOMBAR_SMALL;Mala !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -631,18 +632,29 @@ ZOOMBAR_SMALL;Mala !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -678,7 +690,7 @@ ZOOMBAR_SMALL;Mala !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -690,7 +702,9 @@ ZOOMBAR_SMALL;Mala !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -703,9 +717,9 @@ ZOOMBAR_SMALL;Mala !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -718,7 +732,23 @@ ZOOMBAR_SMALL;Mala !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 432e10f42..1ce0afa69 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -610,6 +610,7 @@ ZOOMBAR_SMALL;Pequeno !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -628,18 +629,29 @@ ZOOMBAR_SMALL;Pequeno !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -675,7 +687,7 @@ ZOOMBAR_SMALL;Pequeno !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -687,7 +699,9 @@ ZOOMBAR_SMALL;Pequeno !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -700,9 +714,9 @@ ZOOMBAR_SMALL;Pequeno !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -715,7 +729,23 @@ ZOOMBAR_SMALL;Pequeno !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index 369720b3d..5dfd43987 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -730,8 +730,20 @@ ZOOMPANEL_ZOOMOUT;Удалить - !CURVEEDITOR_CURVE;Curve !CURVEEDITOR_CURVES;Curves -!HISTORY_MSG_93;Contrast by detail levels parameter +!EDITWINDOW_TITLE;Image Edit +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_TAB_RAW;RAW !NAVIGATOR_B_NA;B = n/a !NAVIGATOR_B_VALUE;B = %1 @@ -753,3 +765,21 @@ ZOOMPANEL_ZOOMOUT;Удалить - !NAVIGATOR_V_VALUE;V = %1 !NAVIGATOR_XY_NA;x = n/a, y = n/a !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index 6e2ab5807..54c77f941 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -1,10 +1,12 @@ # Serbian translation #00 Serbian (Cyrilic) -#01 by gpopac 2010-09-21 +#01 by gpopac 2010-11-16 ADJUSTER_RESET_TO_DEFAULT;Врати на подразумевано BATCHQUEUE_AUTOSTART;Сам започни BATCH_PROCESSING;обрада +CURVEEDITOR_CURVE;Кривуља +CURVEEDITOR_CURVES;Кривуље CURVEEDITOR_CUSTOM;Произвољно CURVEEDITOR_DARKS;Тамно CURVEEDITOR_FILEDLGFILTERANY;Све датотеке @@ -46,6 +48,7 @@ EXIFPANEL_SUBDIRECTORY;Поддиректоријум FILEBROWSER_ADDDELTEMPLATE;Додај/уклони шаблоне... FILEBROWSER_APPLYPROFILE;Примени профил FILEBROWSER_ARRANGEMENTHINT;Размењује вертикални и хоризонтални распоред умањених приказа +FILEBROWSER_AUTODARKFRAME;Сам одреди тамни кадар FILEBROWSER_CLEARPROFILE;Обриши профил FILEBROWSER_COPYPROFILE;Умножи профил FILEBROWSER_CURRENT_NAME;Тренутно име: @@ -58,6 +61,7 @@ FILEBROWSER_EXIFFILTERAPPLYHINT;Укључује/искључује exif фил FILEBROWSER_EXIFFILTERLABEL;Exif филтер FILEBROWSER_EXIFFILTERSETTINGS;Подеси FILEBROWSER_EXIFFILTERSETTINGSHINT;Мења подешавања exif филтера +FILEBROWSER_MOVETODARKFDIR;Пребаци у фасциклу са тамним кадровима FILEBROWSER_NEW_NAME;Ново име: FILEBROWSER_PARTIALPASTEPROFILE;Делимично убаци FILEBROWSER_PASTEPROFILE;Убаци профил @@ -81,6 +85,7 @@ FILEBROWSER_PROCESSINGSETTINGS;Подешавања FILEBROWSER_PROCESSINGSETTINGSHINT;Поставља формат датотеке и излазни директоријум FILEBROWSER_RENAMEDLGLABEL;Преименуј датотеку FILEBROWSER_RENAMEDLGMSG;Преименуј датотеку „%1“ у: +FILEBROWSER_SELECTDARKFRAME;Изабери тамни кадар... FILEBROWSER_SHOWDIRHINT;Приказује све слике из директоријума FILEBROWSER_SHOWEXIFINFO;Приказује EXIF податке и FILEBROWSER_SHOWQUEUEHINT;Приказује слике заказане за обраду @@ -118,6 +123,7 @@ GENERAL_PORTRAIT;Усправно GENERAL_SAVE;Сачувај GENERAL_UNCHANGED;(неизмењено) GENERAL_YES;Да +HISTOGRAM_BUTTON_B;П HISTOGRAM_BUTTON_G;З HISTOGRAM_BUTTON_L;С HISTOGRAM_BUTTON_R;Ц @@ -131,6 +137,11 @@ HISTORY_CUSTOMCURVE;Произвољна крива HISTORY_DELSNAPSHOT;Уклони HISTORY_FROMCLIPBOARD;Из оставе HISTORY_LABEL;Историјат +HISTORY_MSG_100;РГБ засићеност +HISTORY_MSG_101;ХСВ EQ — Нијанса +HISTORY_MSG_102;ХСВ EQ — Засићеност +HISTORY_MSG_103;ХСВ EQ — Вреднсот +HISTORY_MSG_104;Уједначење ХСВ HISTORY_MSG_10;Сабијање сенки HISTORY_MSG_11;Крива нијанси HISTORY_MSG_12;Ауто експозиција @@ -213,7 +224,22 @@ HISTORY_MSG_81;Укључена промена величина HISTORY_MSG_82;Профил је измењен HISTORY_MSG_83;Квалитетно светлост/сенке HISTORY_MSG_84;Исправљање перспективе +HISTORY_MSG_85;Талоасни коефицијенти +HISTORY_MSG_86;Таласно уједначење +HISTORY_MSG_87;Уклањање шума „бибер и со“ +HISTORY_MSG_88;Праг уклањања шума за „бибер и со“ +HISTORY_MSG_89;Уклањање шума HISTORY_MSG_8;Компензација експозиције +HISTORY_MSG_90;Шум — осветљеност +HISTORY_MSG_91;Шум — боје +HISTORY_MSG_92;Шум — гама +HISTORY_MSG_93;Контраст детањном вредношћу нивоа +HISTORY_MSG_94;Детањни ниво контрастa +HISTORY_MSG_95;Засићеност +HISTORY_MSG_96;„а“ крива +HISTORY_MSG_97;„б“ крива +HISTORY_MSG_98;Растављам мозаик +HISTORY_MSG_99;Обрађујем HISTORY_MSG_9;Сабијање светлог HISTORY_NEWSNAPSHOT;Додај HISTORY_NEWSNAPSHOTAS;Као... @@ -318,6 +344,7 @@ MAIN_TAB_FILTER;Филтер MAIN_TAB_ICM;ИЦМ MAIN_TAB_IPTC;ИПТЦ MAIN_TAB_METADATA;Метаподаци +MAIN_TAB_RAW;RAW MAIN_TAB_TAGGING;Ознаке MAIN_TAB_TRANSFORM;Исправке MAIN_TOGGLE_BEFORE_AFTER;Б|А @@ -336,6 +363,12 @@ NAVIGATOR_G_NA;З = ○ NAVIGATOR_G_VALUE;З = %1 NAVIGATOR_H_NA;Х = ○ NAVIGATOR_H_VALUE;Х = %1 +NAVIGATOR_LAB_A_NA;А = ○ +NAVIGATOR_LAB_A_VALUE;А = %1 +NAVIGATOR_LAB_B_NA;Б = ○ +NAVIGATOR_LAB_B_VALUE;Б = %1 +NAVIGATOR_LAB_L_NA;Л = ○ +NAVIGATOR_LAB_L_VALUE;Л = %1 NAVIGATOR_R_NA;Ц = ○ NAVIGATOR_R_VALUE;Ц = %1 NAVIGATOR_S_NA;С = ○ @@ -360,6 +393,8 @@ PARTIALPASTE_EXPOSURE;Експозиција PARTIALPASTE_HLRECOVERY;Чуање светлих делова PARTIALPASTE_ICMSETTINGS;ИЦМ подешавања PARTIALPASTE_IPTCINFO;ИПТЦ подави +PARTIALPASTE_LABCURVE;Лаб крива +PARTIALPASTE_LABCURVE;Крива светлости PARTIALPASTE_LENSGROUP;Подешавања објектива PARTIALPASTE_LUMACURVE;Крива луминасе PARTIALPASTE_LUMADENOISE;Уклањање светлосног шума @@ -371,6 +406,7 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;Сенке/Светлост PARTIALPASTE_SHARPENING;Оштрење PARTIALPASTE_VIGNETTING;Исправљање вињетарења PARTIALPASTE_WHITEBALANCE;Баланс беле +POPUPBUTTON_SELECTOPTIONHINT;РМБ за измену опције PREFERENCES_ADD;Додај PREFERENCES_APPLNEXTSTARTUP;примењује се након поновног покретања PREFERENCES_BATCH_PROCESSING;Обрада закзаног @@ -394,6 +430,7 @@ PREFERENCES_CLEARDLG_LINE2;Ово може да потраје неколико PREFERENCES_CLEARDLG_TITLE;Сачекајте PREFERENCES_CLIPPINGIND;Показивачи одсечених делова PREFERENCES_CMETRICINTENT;Колориметријска намера +PREFERENCES_DARKFRAME;Тамни кадар PREFERENCES_DATEFORMAT;Формат датума PREFERENCES_DATEFORMATHINT;Можете задати следеће формате:\n%y :година\n%m : месец\n%d : дан\n\nУ Србији се највише користи:\n%d.%m.%y PREFERENCES_DCBENHANCE;Примени ДЦБ побољшање @@ -401,6 +438,7 @@ PREFERENCES_DCBITERATIONS;Број ДЦБ пролаза PREFERENCES_DEFAULTLANG;Језик програма PREFERENCES_DEFAULTTHEME;Тема програма PREFERENCES_DEMOSAICINGALGO;Алгоритам за склапање +PREFERENCES_DIRDARKFRAMES;Директоријум тамног кадра PREFERENCES_DIRHOME;Лични директоријум PREFERENCES_DIRLAST;Последњи директоријум PREFERENCES_DIROTHER;Неки други @@ -408,6 +446,7 @@ PREFERENCES_DIRSELECTDLG;Бира одређени директоријум са PREFERENCES_DIRSOFTWARE;Директоријум са инсталацијом PREFERENCES_DMETHOD;Начин PREFERENCES_EDITORCMDLINE;Произвољна наредба +PREFERENCES_EDITORLAYOUT;Размештај програма PREFERENCES_EXTERNALEDITOR;Спољни уређивач PREFERENCES_FALSECOLOR;Кораци за пригушивање лажне боје PREFERENCES_FBROWSEROPTS;Опције разгледача датотеке @@ -429,6 +468,7 @@ PREFERENCES_INTENT_SATURATION;Засићени приказ PREFERENCES_LINEDENOISE;Линијски филтер шума PREFERENCES_LIVETHUMBNAILS;„Живи“ прикази (спорије) PREFERENCES_MONITORICC;Профил монитора +PREFERENCES_MULTITAB;Режим у више листова PREFERENCES_OUTDIR;Излазни директоријум PREFERENCES_OUTDIRFOLDER;Сачувај у фасциклу PREFERENCES_OUTDIRFOLDERHINT;Ставља сачуване слике у @@ -448,6 +488,7 @@ PREFERENCES_PROFILESAVECACHE;Сачувај рапаметре обраде у PREFERENCES_PROFILESAVEINPUT;Сачувај парамтре обраде поред улазне датотеке PREFERENCES_PROPERTY;Особина PREFERENCES_PSPATH;Директоријум са инсталираним Адобе Фотошопом +PREFERENCES_SELECTFONT;Изаберите фонт PREFERENCES_SELECTICCDIRDLG;Изаберите директоријум са ИЦЦ профилима... PREFERENCES_SELECTLANG;Језик PREFERENCES_SELECTMONITORPROFDLG;Изаберите ИЦЦ профил екрана... @@ -457,6 +498,7 @@ PREFERENCES_SHOWBASICEXIF;Прикажи основне Exif податке PREFERENCES_SHOWDATETIME;Прикажи датум и време PREFERENCES_SHOWONLYRAW;Прикажи само RAW датотеке PREFERENCES_SHTHRESHOLD;Праг за одсечене тамне делове +PREFERENCES_SINGLETAB;Режим у једном листу PREFERENCES_STARTUPIMDIR;Директоријум по покретању PREFERENCES_TAB_BROWSER;Преглед датотека PREFERENCES_TAB_COLORMGR;Управљање бојама @@ -464,6 +506,8 @@ PREFERENCES_TAB_GENERAL;Опште PREFERENCES_TAB_IMPROC;Обрада сликe PREFERENCES_TAB_OUTPUT;Опције на излазу PREFERENCES_THUMBSIZE;Величина умањеног приказа +PREFERENCES_USESYSTEMTHEME; Користи системску тему +PREFERENCES_WORKFLOW;Ток обраде PROFILEPANEL_FILEDLGFILTERANY;Све датотеке PROFILEPANEL_FILEDLGFILTERPP;Профили за обраду PROFILEPANEL_LABEL;Профили обраде @@ -564,6 +608,13 @@ TP_DIRPYRDENOISE_CHROMA;Боја TP_DIRPYRDENOISE_GAMMA;Гама TP_DIRPYRDENOISE_LABEL;Дирекционо пирамидно уклањање шума TP_DIRPYRDENOISE_LUMA;Луминанса +TP_DIRPYREQUALIZER_LABEL;Детаљни ниво контраста +TP_DIRPYREQUALIZER_LUMACOARSEST;грубо +TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Контраст- +TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Контраст+ +TP_DIRPYREQUALIZER_LUMAFINEST;фино +TP_DIRPYREQUALIZER_LUMANEUTRAL;Неутрално +TP_DIRPYREQUALIZER_THRESHOLD;Праг TP_DISTORTION_AMOUNT;Количина TP_DISTORTION_LABEL;Изобличења TP_EQUALIZER_CONTRAST_MINUS;Контраст - @@ -582,11 +633,26 @@ TP_EXPOSURE_CONTRAST;Контраст TP_EXPOSURE_CURVEEDITOR;Крива нијанси TP_EXPOSURE_EXPCOMP;Компензација TP_EXPOSURE_LABEL;Експозиција +TP_EXPOSURE_SATURATION;Засићеност TP_HLREC_CIELAB;ЦиеЛаб стапање TP_HLREC_COLOR;Пропагинација боје TP_HLREC_LABEL;Чупање светлих делова TP_HLREC_LUMINANCE;Извлачење луминансе TP_HLREC_METHOD;Начин: +TP_HSVEQUALIZER1;Црвена +TP_HSVEQUALIZER2;Жута +TP_HSVEQUALIZER3;Лимун +TP_HSVEQUALIZER4;Зелена +TP_HSVEQUALIZER5;Водена +TP_HSVEQUALIZER6;Плава +TP_HSVEQUALIZER7;Љубичаста +TP_HSVEQUALIZER8;Магнета +TP_HSVEQUALIZER_CHANNEL;ХСВ канал +TP_HSVEQUALIZER_HUE;Нијанса +TP_HSVEQUALIZER_LABEL;Уједначење ХСВ канала +TP_HSVEQUALIZER_NEUTRAL;Неутрално +TP_HSVEQUALIZER_SAT;Засићеност +TP_HSVEQUALIZER_VAL;Вредност TP_ICM_FILEDLGFILTERANY;Било која датотека TP_ICM_FILEDLGFILTERICM;ИЦЦ профили TP_ICM_GAMMABEFOREINPUT;Профил за примену Гаме @@ -603,6 +669,11 @@ TP_ICM_SAVEREFERENCE;Сачувај слику као референцу за п TP_ICM_WORKINGPROFILE;Радни профил TP_IMPULSEDENOISE_LABEL;Импулсно уклањање шума TP_IMPULSEDENOISE_THRESH;Праг +TP_LABCURVE_BRIGHTNESS;Осветљеност +TP_LABCURVE_CONTRAST;Контраст +TP_LABCURVE_CURVEEDITOR;Крива светлости +TP_LABCURVE_LABEL;Лаб крива +TP_LABCURVE_SATURATION;Засићеност TP_LENSGEOM_AUTOCROP;Сам исеци TP_LENSGEOM_FILL;Сам попуни TP_LENSGEOM_LABEL;Објектив и геометрија @@ -619,6 +690,10 @@ TP_LUMADENOISE_RADIUS;Полупречник TP_PERSPECTIVE_HORIZONTAL;Хоризонтална TP_PERSPECTIVE_LABEL;Перспектива TP_PERSPECTIVE_VERTICAL;Вертикална +TP_PREPROCESS_DARKFRAME;Тамни кадар +TP_PREPROCESS_DFAUTOSELECT;Сам изабери +TP_RAWPANEL_DEMOSAICING;Расклапање мозаика +TP_RAWPANEL_PREPROCESSING;Предобрада TP_RESIZE_BICUBIC;Бикубично TP_RESIZE_BICUBICSF;Бикубично (мекше) TP_RESIZE_BICUBICSH;Бикубично (оштрије) @@ -629,6 +704,7 @@ TP_RESIZE_FULLSIZE;Стварна величина слике: TP_RESIZE_H;В: TP_RESIZE_HEIGHT;Висину TP_RESIZE_LABEL;Величина слике +TP_RESIZE_LANCZOS;Ланхоз TP_RESIZE_METHOD;Начин: TP_RESIZE_NEAREST;Најближе TP_RESIZE_SCALE;Умањење @@ -663,8 +739,12 @@ TP_SHARPENING_RLD_ITERATIONS;Понављања TP_SHARPENING_THRESHOLD;Праг TP_SHARPENING_USM;Оштрина маске TP_VIGNETTING_AMOUNT;Количина +TP_VIGNETTING_CENTER;Центар +TP_VIGNETTING_CENTER_X;Центар X +TP_VIGNETTING_CENTER_Y;Центар Y TP_VIGNETTING_LABEL;Вињетарење TP_VIGNETTING_RADIUS;Полупречник +TP_VIGNETTING_STRENGTH;Јачина TP_WBALANCE_AUTO;Сам одреди TP_WBALANCE_CAMERA;Из апарата TP_WBALANCE_CUSTOM;Произвољно @@ -695,57 +775,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !!!!!!!!!!!!!!!!!!!!!!!!! -!CURVEEDITOR_CURVE;Curve -!CURVEEDITOR_CURVES;Curves -!FILEBROWSER_AUTODARKFRAME;Auto dark frame -!FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory -!FILEBROWSER_SELECTDARKFRAME;Select dark frame... -!HISTOGRAM_BUTTON_B;B -!HISTORY_MSG_85;Wavelet coefficients -!HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter -!HISTORY_MSG_94;Contrast by detail levels -!MAIN_TAB_RAW;RAW -!NAVIGATOR_LAB_A_NA;A = n/a -!NAVIGATOR_LAB_A_VALUE;A = %1 -!NAVIGATOR_LAB_B_NA;B = n/a -!NAVIGATOR_LAB_B_VALUE;B = %1 -!NAVIGATOR_LAB_L_NA;L = n/a -!NAVIGATOR_LAB_L_VALUE;L = %1 -!PARTIALPASTE_LABCURVE;Lab curve -!PARTIALPASTE_LABCURVE;Luminance curve -!POPUPBUTTON_SELECTOPTIONHINT;RMB to change option -!PREFERENCES_DARKFRAME;Dark frame -!PREFERENCES_DIRDARKFRAMES;Dark frames directory -!PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_MULTITAB;Multiple tabs mode -!PREFERENCES_SELECTFONT;Select font -!PREFERENCES_SINGLETAB;Single tab mode -!PREFERENCES_USESYSTEMTHEME; Use System Theme -!PREFERENCES_WORKFLOW;Workflow -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer -!TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest -!TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- -!TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ -!TP_DIRPYREQUALIZER_LUMAFINEST;Finest -!TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutral -!TP_DIRPYREQUALIZER_THRESHOLD;Threshold -!TP_LABCURVE_BRIGHTNESS;Brightness -!TP_LABCURVE_CONTRAST;Contrast -!TP_LABCURVE_CURVEEDITOR;Luminance Curve -!TP_LABCURVE_LABEL;Lab Curves -!TP_LABCURVE_SATURATION;Saturation -!TP_PREPROCESS_DARKFRAME;Dark frame -!TP_PREPROCESS_DFAUTOSELECT;Auto selection -!TP_RAWPANEL_DEMOSAICING;Demosaicing -!TP_RAWPANEL_PREPROCESSING;Preprocessing -!TP_RESIZE_LANCZOS;Lanczos -!TP_VIGNETTING_CENTER;Center -!TP_VIGNETTING_CENTER_X;Center X -!TP_VIGNETTING_CENTER_Y;Center Y -!TP_VIGNETTING_STRENGTH;Strength +!EDITWINDOW_TITLE;Image Edit +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files +!TP_ICM_INPUTNONE;No profile diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index 14129959c..5a6fa2124 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -1,10 +1,12 @@ # Serbian translation #00 Serbian (Cyrilic) -#01 by gpopac 2010-09-21 +#01 by gpopac 2010-11-16 ADJUSTER_RESET_TO_DEFAULT;Vrati na podrazumevano BATCHQUEUE_AUTOSTART;Sam započni BATCH_PROCESSING;obrada +CURVEEDITOR_CURVE;Krivulja +CURVEEDITOR_CURVES;Krivulje CURVEEDITOR_CUSTOM;Proizvoljno CURVEEDITOR_DARKS;Tamno CURVEEDITOR_FILEDLGFILTERANY;Sve datoteke @@ -46,6 +48,7 @@ EXIFPANEL_SUBDIRECTORY;Poddirektorijum FILEBROWSER_ADDDELTEMPLATE;Dodaj/ukloni šablone... FILEBROWSER_APPLYPROFILE;Primeni profil FILEBROWSER_ARRANGEMENTHINT;Razmenjuje vertikalni i horizontalni raspored umanjenih prikaza +FILEBROWSER_AUTODARKFRAME;Sam odredi tamni kadar FILEBROWSER_CLEARPROFILE;Obriši profil FILEBROWSER_COPYPROFILE;Umnoži profil FILEBROWSER_CURRENT_NAME;Trenutno ime: @@ -58,6 +61,7 @@ FILEBROWSER_EXIFFILTERAPPLYHINT;Uključuje/isključuje exif filter u razgledaču FILEBROWSER_EXIFFILTERLABEL;Exif filter FILEBROWSER_EXIFFILTERSETTINGS;Podesi FILEBROWSER_EXIFFILTERSETTINGSHINT;Menja podešavanja exif filtera +FILEBROWSER_MOVETODARKFDIR;Prebaci u fasciklu sa tamnim kadrovima FILEBROWSER_NEW_NAME;Novo ime: FILEBROWSER_PARTIALPASTEPROFILE;Delimično ubaci FILEBROWSER_PASTEPROFILE;Ubaci profil @@ -81,6 +85,7 @@ FILEBROWSER_PROCESSINGSETTINGS;Podešavanja FILEBROWSER_PROCESSINGSETTINGSHINT;Postavlja format datoteke i izlazni direktorijum FILEBROWSER_RENAMEDLGLABEL;Preimenuj datoteku FILEBROWSER_RENAMEDLGMSG;Preimenuj datoteku „%1“ u: +FILEBROWSER_SELECTDARKFRAME;Izaberi tamni kadar... FILEBROWSER_SHOWDIRHINT;Prikazuje sve slike iz direktorijuma FILEBROWSER_SHOWEXIFINFO;Prikazuje EXIF podatke i FILEBROWSER_SHOWQUEUEHINT;Prikazuje slike zakazane za obradu @@ -118,6 +123,7 @@ GENERAL_PORTRAIT;Uspravno GENERAL_SAVE;Sačuvaj GENERAL_UNCHANGED;(neizmenjeno) GENERAL_YES;Da +HISTOGRAM_BUTTON_B;P HISTOGRAM_BUTTON_G;Z HISTOGRAM_BUTTON_L;S HISTOGRAM_BUTTON_R;C @@ -131,6 +137,11 @@ HISTORY_CUSTOMCURVE;Proizvoljna kriva HISTORY_DELSNAPSHOT;Ukloni HISTORY_FROMCLIPBOARD;Iz ostave HISTORY_LABEL;Istorijat +HISTORY_MSG_100;RGB zasićenost +HISTORY_MSG_101;HSV EQ — Nijansa +HISTORY_MSG_102;HSV EQ — Zasićenost +HISTORY_MSG_103;HSV EQ — Vrednsot +HISTORY_MSG_104;Ujednačenje HSV HISTORY_MSG_10;Sabijanje senki HISTORY_MSG_11;Kriva nijansi HISTORY_MSG_12;Auto ekspozicija @@ -213,7 +224,22 @@ HISTORY_MSG_81;Uključena promena veličina HISTORY_MSG_82;Profil je izmenjen HISTORY_MSG_83;Kvalitetno svetlost/senke HISTORY_MSG_84;Ispravljanje perspektive +HISTORY_MSG_85;Taloasni koeficijenti +HISTORY_MSG_86;Talasno ujednačenje +HISTORY_MSG_87;Uklanjanje šuma „biber i so“ +HISTORY_MSG_88;Prag uklanjanja šuma za „biber i so“ +HISTORY_MSG_89;Uklanjanje šuma HISTORY_MSG_8;Kompenzacija ekspozicije +HISTORY_MSG_90;Šum — osvetljenost +HISTORY_MSG_91;Šum — boje +HISTORY_MSG_92;Šum — gama +HISTORY_MSG_93;Kontrast detanjnom vrednošću nivoa +HISTORY_MSG_94;Detanjni nivo kontrasta +HISTORY_MSG_95;Zasićenost +HISTORY_MSG_96;„a“ kriva +HISTORY_MSG_97;„b“ kriva +HISTORY_MSG_98;Rastavljam mozaik +HISTORY_MSG_99;Obrađujem HISTORY_MSG_9;Sabijanje svetlog HISTORY_NEWSNAPSHOT;Dodaj HISTORY_NEWSNAPSHOTAS;Kao... @@ -318,6 +344,7 @@ MAIN_TAB_FILTER;Filter MAIN_TAB_ICM;ICM MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;Metapodaci +MAIN_TAB_RAW;RAW MAIN_TAB_TAGGING;Oznake MAIN_TAB_TRANSFORM;Ispravke MAIN_TOGGLE_BEFORE_AFTER;B|A @@ -336,6 +363,12 @@ NAVIGATOR_G_NA;Z = ○ NAVIGATOR_G_VALUE;Z = %1 NAVIGATOR_H_NA;H = ○ NAVIGATOR_H_VALUE;H = %1 +NAVIGATOR_LAB_A_NA;A = ○ +NAVIGATOR_LAB_A_VALUE;A = %1 +NAVIGATOR_LAB_B_NA;B = ○ +NAVIGATOR_LAB_B_VALUE;B = %1 +NAVIGATOR_LAB_L_NA;L = ○ +NAVIGATOR_LAB_L_VALUE;L = %1 NAVIGATOR_R_NA;C = ○ NAVIGATOR_R_VALUE;C = %1 NAVIGATOR_S_NA;S = ○ @@ -360,6 +393,8 @@ PARTIALPASTE_EXPOSURE;Ekspozicija PARTIALPASTE_HLRECOVERY;Čuanje svetlih delova PARTIALPASTE_ICMSETTINGS;ICM podešavanja PARTIALPASTE_IPTCINFO;IPTC podavi +PARTIALPASTE_LABCURVE;Kriva svetlosti +PARTIALPASTE_LABCURVE;Lab kriva PARTIALPASTE_LENSGROUP;Podešavanja objektiva PARTIALPASTE_LUMACURVE;Kriva luminase PARTIALPASTE_LUMADENOISE;Uklanjanje svetlosnog šuma @@ -371,6 +406,7 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;Senke/Svetlost PARTIALPASTE_SHARPENING;Oštrenje PARTIALPASTE_VIGNETTING;Ispravljanje vinjetarenja PARTIALPASTE_WHITEBALANCE;Balans bele +POPUPBUTTON_SELECTOPTIONHINT;RMB za izmenu opcije PREFERENCES_ADD;Dodaj PREFERENCES_APPLNEXTSTARTUP;primenjuje se nakon ponovnog pokretanja PREFERENCES_BATCH_PROCESSING;Obrada zakzanog @@ -394,6 +430,7 @@ PREFERENCES_CLEARDLG_LINE2;Ovo može da potraje nekoliko sekundi. PREFERENCES_CLEARDLG_TITLE;Sačekajte PREFERENCES_CLIPPINGIND;Pokazivači odsečenih delova PREFERENCES_CMETRICINTENT;Kolorimetrijska namera +PREFERENCES_DARKFRAME;Tamni kadar PREFERENCES_DATEFORMAT;Format datuma PREFERENCES_DATEFORMATHINT;Možete zadati sledeće formate:\n%y :godina\n%m : mesec\n%d : dan\n\nU Srbiji se najviše koristi:\n%d.%m.%y PREFERENCES_DCBENHANCE;Primeni DCB poboljšanje @@ -401,6 +438,7 @@ PREFERENCES_DCBITERATIONS;Broj DCB prolaza PREFERENCES_DEFAULTLANG;Jezik programa PREFERENCES_DEFAULTTHEME;Tema programa PREFERENCES_DEMOSAICINGALGO;Algoritam za sklapanje +PREFERENCES_DIRDARKFRAMES;Direktorijum tamnog kadra PREFERENCES_DIRHOME;Lični direktorijum PREFERENCES_DIRLAST;Poslednji direktorijum PREFERENCES_DIROTHER;Neki drugi @@ -408,6 +446,7 @@ PREFERENCES_DIRSELECTDLG;Bira određeni direktorijum sa slikama... PREFERENCES_DIRSOFTWARE;Direktorijum sa instalacijom PREFERENCES_DMETHOD;Način PREFERENCES_EDITORCMDLINE;Proizvoljna naredba +PREFERENCES_EDITORLAYOUT;Razmeštaj programa PREFERENCES_EXTERNALEDITOR;Spoljni uređivač PREFERENCES_FALSECOLOR;Koraci za prigušivanje lažne boje PREFERENCES_FBROWSEROPTS;Opcije razgledača datoteke @@ -429,6 +468,7 @@ PREFERENCES_INTENT_SATURATION;Zasićeni prikaz PREFERENCES_LINEDENOISE;Linijski filter šuma PREFERENCES_LIVETHUMBNAILS;„Živi“ prikazi (sporije) PREFERENCES_MONITORICC;Profil monitora +PREFERENCES_MULTITAB;Režim u više listova PREFERENCES_OUTDIR;Izlazni direktorijum PREFERENCES_OUTDIRFOLDER;Sačuvaj u fasciklu PREFERENCES_OUTDIRFOLDERHINT;Stavlja sačuvane slike u @@ -448,6 +488,7 @@ PREFERENCES_PROFILESAVECACHE;Sačuvaj rapametre obrade u ostavu PREFERENCES_PROFILESAVEINPUT;Sačuvaj paramtre obrade pored ulazne datoteke PREFERENCES_PROPERTY;Osobina PREFERENCES_PSPATH;Direktorijum sa instaliranim Adobe Fotošopom +PREFERENCES_SELECTFONT;Izaberite font PREFERENCES_SELECTICCDIRDLG;Izaberite direktorijum sa ICC profilima... PREFERENCES_SELECTLANG;Jezik PREFERENCES_SELECTMONITORPROFDLG;Izaberite ICC profil ekrana... @@ -457,6 +498,7 @@ PREFERENCES_SHOWBASICEXIF;Prikaži osnovne Exif podatke PREFERENCES_SHOWDATETIME;Prikaži datum i vreme PREFERENCES_SHOWONLYRAW;Prikaži samo RAW datoteke PREFERENCES_SHTHRESHOLD;Prag za odsečene tamne delove +PREFERENCES_SINGLETAB;Režim u jednom listu PREFERENCES_STARTUPIMDIR;Direktorijum po pokretanju PREFERENCES_TAB_BROWSER;Pregled datoteka PREFERENCES_TAB_COLORMGR;Upravljanje bojama @@ -464,6 +506,8 @@ PREFERENCES_TAB_GENERAL;Opšte PREFERENCES_TAB_IMPROC;Obrada slike PREFERENCES_TAB_OUTPUT;Opcije na izlazu PREFERENCES_THUMBSIZE;Veličina umanjenog prikaza +PREFERENCES_USESYSTEMTHEME; Koristi sistemsku temu +PREFERENCES_WORKFLOW;Tok obrade PROFILEPANEL_FILEDLGFILTERANY;Sve datoteke PROFILEPANEL_FILEDLGFILTERPP;Profili za obradu PROFILEPANEL_LABEL;Profili obrade @@ -564,6 +608,13 @@ TP_DIRPYRDENOISE_CHROMA;Boja TP_DIRPYRDENOISE_GAMMA;Gama TP_DIRPYRDENOISE_LABEL;Direkciono piramidno uklanjanje šuma TP_DIRPYRDENOISE_LUMA;Luminansa +TP_DIRPYREQUALIZER_LABEL;Detaljni nivo kontrasta +TP_DIRPYREQUALIZER_LUMACOARSEST;grubo +TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Kontrast- +TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Kontrast+ +TP_DIRPYREQUALIZER_LUMAFINEST;fino +TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutralno +TP_DIRPYREQUALIZER_THRESHOLD;Prag TP_DISTORTION_AMOUNT;Količina TP_DISTORTION_LABEL;Izobličenja TP_EQUALIZER_CONTRAST_MINUS;Kontrast - @@ -582,11 +633,26 @@ TP_EXPOSURE_CONTRAST;Kontrast TP_EXPOSURE_CURVEEDITOR;Kriva nijansi TP_EXPOSURE_EXPCOMP;Kompenzacija TP_EXPOSURE_LABEL;Ekspozicija +TP_EXPOSURE_SATURATION;Zasićenost TP_HLREC_CIELAB;CieLab stapanje TP_HLREC_COLOR;Propaginacija boje TP_HLREC_LABEL;Čupanje svetlih delova TP_HLREC_LUMINANCE;Izvlačenje luminanse TP_HLREC_METHOD;Način: +TP_HSVEQUALIZER1;Crvena +TP_HSVEQUALIZER2;Žuta +TP_HSVEQUALIZER3;Limun +TP_HSVEQUALIZER4;Zelena +TP_HSVEQUALIZER5;Vodena +TP_HSVEQUALIZER6;Plava +TP_HSVEQUALIZER7;Ljubičasta +TP_HSVEQUALIZER8;Magneta +TP_HSVEQUALIZER_CHANNEL;HSV kanal +TP_HSVEQUALIZER_HUE;Nijansa +TP_HSVEQUALIZER_LABEL;Ujednačenje HSV kanala +TP_HSVEQUALIZER_NEUTRAL;Neutralno +TP_HSVEQUALIZER_SAT;Zasićenost +TP_HSVEQUALIZER_VAL;Vrednost TP_ICM_FILEDLGFILTERANY;Bilo koja datoteka TP_ICM_FILEDLGFILTERICM;ICC profili TP_ICM_GAMMABEFOREINPUT;Profil za primenu Game @@ -603,6 +669,11 @@ TP_ICM_SAVEREFERENCE;Sačuvaj sliku kao referencu za profil TP_ICM_WORKINGPROFILE;Radni profil TP_IMPULSEDENOISE_LABEL;Impulsno uklanjanje šuma TP_IMPULSEDENOISE_THRESH;Prag +TP_LABCURVE_BRIGHTNESS;Osvetljenost +TP_LABCURVE_CONTRAST;Kontrast +TP_LABCURVE_CURVEEDITOR;Kriva svetlosti +TP_LABCURVE_LABEL;Lab kriva +TP_LABCURVE_SATURATION;Zasićenost TP_LENSGEOM_AUTOCROP;Sam iseci TP_LENSGEOM_FILL;Sam popuni TP_LENSGEOM_LABEL;Objektiv i geometrija @@ -619,6 +690,10 @@ TP_LUMADENOISE_RADIUS;Poluprečnik TP_PERSPECTIVE_HORIZONTAL;Horizontalna TP_PERSPECTIVE_LABEL;Perspektiva TP_PERSPECTIVE_VERTICAL;Vertikalna +TP_PREPROCESS_DARKFRAME;Tamni kadar +TP_PREPROCESS_DFAUTOSELECT;Sam izaberi +TP_RAWPANEL_DEMOSAICING;Rasklapanje mozaika +TP_RAWPANEL_PREPROCESSING;Predobrada TP_RESIZE_BICUBIC;Bikubično TP_RESIZE_BICUBICSF;Bikubično (mekše) TP_RESIZE_BICUBICSH;Bikubično (oštrije) @@ -629,6 +704,7 @@ TP_RESIZE_FULLSIZE;Stvarna veličina slike: TP_RESIZE_H;V: TP_RESIZE_HEIGHT;Visinu TP_RESIZE_LABEL;Veličina slike +TP_RESIZE_LANCZOS;Lanhoz TP_RESIZE_METHOD;Način: TP_RESIZE_NEAREST;Najbliže TP_RESIZE_SCALE;Umanjenje @@ -663,8 +739,12 @@ TP_SHARPENING_RLD_ITERATIONS;Ponavljanja TP_SHARPENING_THRESHOLD;Prag TP_SHARPENING_USM;Oštrina maske TP_VIGNETTING_AMOUNT;Količina +TP_VIGNETTING_CENTER;Centar +TP_VIGNETTING_CENTER_X;Centar X +TP_VIGNETTING_CENTER_Y;Centar Y TP_VIGNETTING_LABEL;Vinjetarenje TP_VIGNETTING_RADIUS;Poluprečnik +TP_VIGNETTING_STRENGTH;Jačina TP_WBALANCE_AUTO;Sam odredi TP_WBALANCE_CAMERA;Iz aparata TP_WBALANCE_CUSTOM;Proizvoljno @@ -695,57 +775,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !!!!!!!!!!!!!!!!!!!!!!!!! -!CURVEEDITOR_CURVE;Curve -!CURVEEDITOR_CURVES;Curves -!FILEBROWSER_AUTODARKFRAME;Auto dark frame -!FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory -!FILEBROWSER_SELECTDARKFRAME;Select dark frame... -!HISTOGRAM_BUTTON_B;B -!HISTORY_MSG_85;Wavelet coefficients -!HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter -!HISTORY_MSG_94;Contrast by detail levels -!MAIN_TAB_RAW;RAW -!NAVIGATOR_LAB_A_NA;A = n/a -!NAVIGATOR_LAB_A_VALUE;A = %1 -!NAVIGATOR_LAB_B_NA;B = n/a -!NAVIGATOR_LAB_B_VALUE;B = %1 -!NAVIGATOR_LAB_L_NA;L = n/a -!NAVIGATOR_LAB_L_VALUE;L = %1 -!PARTIALPASTE_LABCURVE;Lab curve -!PARTIALPASTE_LABCURVE;Luminance curve -!POPUPBUTTON_SELECTOPTIONHINT;RMB to change option -!PREFERENCES_DARKFRAME;Dark frame -!PREFERENCES_DIRDARKFRAMES;Dark frames directory -!PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_MULTITAB;Multiple tabs mode -!PREFERENCES_SELECTFONT;Select font -!PREFERENCES_SINGLETAB;Single tab mode -!PREFERENCES_USESYSTEMTHEME; Use System Theme -!PREFERENCES_WORKFLOW;Workflow -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer -!TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest -!TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- -!TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ -!TP_DIRPYREQUALIZER_LUMAFINEST;Finest -!TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutral -!TP_DIRPYREQUALIZER_THRESHOLD;Threshold -!TP_LABCURVE_BRIGHTNESS;Brightness -!TP_LABCURVE_CONTRAST;Contrast -!TP_LABCURVE_CURVEEDITOR;Luminance Curve -!TP_LABCURVE_LABEL;Lab Curves -!TP_LABCURVE_SATURATION;Saturation -!TP_PREPROCESS_DARKFRAME;Dark frame -!TP_PREPROCESS_DFAUTOSELECT;Auto selection -!TP_RAWPANEL_DEMOSAICING;Demosaicing -!TP_RAWPANEL_PREPROCESSING;Preprocessing -!TP_RESIZE_LANCZOS;Lanczos -!TP_VIGNETTING_CENTER;Center -!TP_VIGNETTING_CENTER_X;Center X -!TP_VIGNETTING_CENTER_Y;Center Y -!TP_VIGNETTING_STRENGTH;Strength +!EDITWINDOW_TITLE;Image Edit +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files +!TP_ICM_INPUTNONE;No profile diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 926ca6792..cf663feda 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -726,11 +726,23 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !CURVEEDITOR_CURVE;Curve !CURVEEDITOR_CURVES;Curves +!EDITWINDOW_TITLE;Image Edit !FILEBROWSER_AUTODARKFRAME;Auto dark frame !FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory !FILEBROWSER_SELECTDARKFRAME;Select dark frame... -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_TAB_RAW;RAW !NAVIGATOR_LAB_A_NA;A = n/a !NAVIGATOR_LAB_A_VALUE;A = %1 @@ -741,6 +753,24 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_DARKFRAME;Dark frame !PREFERENCES_DIRDARKFRAMES;Dark frames directory +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile !TP_PREPROCESS_DARKFRAME;Dark frame !TP_PREPROCESS_DFAUTOSELECT;Auto selection !TP_RAWPANEL_DEMOSAICING;Demosaicing diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index fa17831e2..14aaa204e 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -611,6 +611,7 @@ ZOOMBAR_SMALL;Pieni !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -629,18 +630,29 @@ ZOOMBAR_SMALL;Pieni !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -676,7 +688,7 @@ ZOOMBAR_SMALL;Pieni !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -688,7 +700,9 @@ ZOOMBAR_SMALL;Pieni !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -700,9 +714,9 @@ ZOOMBAR_SMALL;Pieni !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -715,7 +729,23 @@ ZOOMBAR_SMALL;Pieni !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index 2de3d2142..e7c3cf324 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -2,18 +2,21 @@ #00 Swedish #01 Translated by Emil Ericsson #02 2008-01-22 -#03 2010-10-12, 2010-10-18, 2010-10-24, 2010-11-01, 2010-11-04 update by Johan Andersson +#03 2010-10-12, 2010-10-18, 2010-10-24, 2010-11-01, 2010-11-04, 2010-11-07, 2010-11-11, 2010-11-13 update by Johan Andersson ADJUSTER_RESET_TO_DEFAULT;Återställ till standard BATCHQUEUE_AUTOSTART;Autostart BATCH_PROCESSING;Batchbehandling +CURVEEDITOR_CURVE;Kurva +CURVEEDITOR_CURVES;Kurvor CURVEEDITOR_CUSTOM;Egen -CURVEEDITOR_DARKS;Svärta +CURVEEDITOR_DARKS;Mörka partier CURVEEDITOR_FILEDLGFILTERANY;Vilka filer som helst CURVEEDITOR_FILEDLGFILTERCURVE;Kurvfiler CURVEEDITOR_HIGHLIGHTS;Högdagrar -CURVEEDITOR_LIGHTS;Högdagrar +CURVEEDITOR_LIGHTS;Ljusa partier CURVEEDITOR_LINEAR;Linjär CURVEEDITOR_LOADDLGLABEL;Ladda kurva... +CURVEEDITOR_NURBS;Kontrollerad justering CURVEEDITOR_PARAMETRIC;Parametisk CURVEEDITOR_SAVEDLGLABEL;Spara kurva... CURVEEDITOR_SHADOWS;Skuggor @@ -23,7 +26,7 @@ CURVEEDITOR_TOOLTIPSAVE;Spara nuvarande kurva CURVEEDITOR_TYPE;Typ: EXIFFILTER_APERTURE;Bländare EXIFFILTER_CAMERA;Kamera -EXIFFILTER_DIALOGLABEL;EXIFfilter +EXIFFILTER_DIALOGLABEL;EXIF-filter EXIFFILTER_FOCALLEN;Brännvidd EXIFFILTER_ISO;ISO EXIFFILTER_LENS;Objektiv @@ -135,6 +138,11 @@ HISTORY_CUSTOMCURVE;Egen kurva HISTORY_DELSNAPSHOT;Ta bort HISTORY_FROMCLIPBOARD;Från klippbordet HISTORY_LABEL;Historia +HISTORY_MSG_100;Mättnad, RGB +HISTORY_MSG_101;HSV EQ - Nyans +HISTORY_MSG_102;HSV EQ - Mättnad +HISTORY_MSG_103;HSV EQ - Värde +HISTORY_MSG_104;HSV Equalizer HISTORY_MSG_10;Skuggkomprimering HISTORY_MSG_11;Tonkurva HISTORY_MSG_12;Autoexponering @@ -174,7 +182,7 @@ HISTORY_MSG_42;Färgskiftning "B" HISTORY_MSG_43;Reducering av luminansbrus HISTORY_MSG_44;Borttagningsradie för luminansbrusreducering HISTORY_MSG_45;Kanttolerans för luminansbrusreducering -HISTORY_MSG_46;Färgbrusborttagning +HISTORY_MSG_46;Färgbrusreducering HISTORY_MSG_47;Radie för färgbrusreducering HISTORY_MSG_48;Kanttolerans för färgbrusreducering HISTORY_MSG_49;Kantkänslighet för färgbrusreducering @@ -217,10 +225,22 @@ HISTORY_MSG_81;Storleksförändring aktiverad HISTORY_MSG_82;Profilen har ändrats HISTORY_MSG_83;Högkvalitet Skuggor/högdager HISTORY_MSG_84;Korrigering av perspektiv -HISTORY_MSG_85;Wavelet koefficienter -HISTORY_MSG_86;Wavelet equalizer +HISTORY_MSG_85;Waveletkoefficienter +HISTORY_MSG_86;Waveletequalizer HISTORY_MSG_87;Brusreducering mha av stegsvar +HISTORY_MSG_88;Tröskelvärde för punktbrusreducering +HISTORY_MSG_89;Brusreducering HISTORY_MSG_8;Exponeringskomprimering +HISTORY_MSG_90;Brusreducering - luminans +HISTORY_MSG_91;Brusreducering - krominans +HISTORY_MSG_92;Brusreducering - gamma +HISTORY_MSG_93;Kontrast genom detaljnivåvärden +HISTORY_MSG_94;Kontrast genom detaljnivåer +HISTORY_MSG_95;Mättnad +HISTORY_MSG_96;'a'-kurvan +HISTORY_MSG_97;'b'-kurvan +HISTORY_MSG_98;Demozaicing +HISTORY_MSG_99;Förbehandling HISTORY_MSG_9;Högdagerkomprimering HISTORY_NEWSNAPSHOT;Nytt HISTORY_NEWSNAPSHOTAS;Som... @@ -250,6 +270,7 @@ IPTCPANEL_AUTHORSPOSITIONHINT;Titeln på upphovsmannen/männen (byline) IPTCPANEL_CAPTIONHINT;En beskrivning av informationen IPTCPANEL_CAPTIONWRITERHINT;Namnet på den person som är involverad i att skapa eller redigera eller korrigera bilden IPTCPANEL_CATEGORY;Kategori +IPTCPANEL_CATEGORYHINT;Identifierar bildens titel enligt tillhandahållaren. IPTCPANEL_CITY;Stad IPTCPANEL_CITYHINT;Staden där bilden togs IPTCPANEL_COPYHINT;Kopiera IPTC-inställningarna till klippbordet @@ -279,6 +300,7 @@ IPTCPANEL_SOURCEHINT;Den ursprungliga ägaren av innehållet. IPTCPANEL_SUPPCATEGORIES;Övriga kategorier IPTCPANEL_SUPPCATEGORIESHINT;Ytterligare beskrivning av bilden IPTCPANEL_TITLE;Titel +IPTCPANEL_TITLEHINT;En kortfattad bildreferens IPTCPANEL_TRANSREFERENCE;Överföringsreferens IPTCPANEL_TRANSREFERENCEHINT;En kod som representerar platsen för överföring MAIN_BUTTON_EXIT;Avsluta @@ -383,6 +405,7 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;Skuggor/Högdagrar PARTIALPASTE_SHARPENING;Skärpa PARTIALPASTE_VIGNETTING;Reducera vinjettering PARTIALPASTE_WHITEBALANCE;Vitbalans +POPUPBUTTON_SELECTOPTIONHINT;Högerklicka för att ändra PREFERENCES_ADD;Lägg till PREFERENCES_APPLNEXTSTARTUP;Ändras vid nästa uppstart PREFERENCES_BATCH_PROCESSING;Batchbehandling @@ -582,7 +605,9 @@ TP_CROP_Y;y TP_DETAIL_AMOUNT;Mängd TP_DIRPYRDENOISE_CHROMA;Krominans TP_DIRPYRDENOISE_GAMMA;Gamma +TP_DIRPYRDENOISE_LABEL;Brusreducering TP_DIRPYRDENOISE_LUMA;Luminans +TP_DIRPYREQUALIZER_LABEL;Kontrast genom detaljnivåer TP_DIRPYREQUALIZER_LUMACOARSEST;Grovast TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Minska kontrasten TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Öka kontrasten @@ -607,11 +632,26 @@ TP_EXPOSURE_CONTRAST;Kontrast TP_EXPOSURE_CURVEEDITOR;Tonkurva TP_EXPOSURE_EXPCOMP;Exponeringskompensation TP_EXPOSURE_LABEL;Exponering +TP_EXPOSURE_SATURATION;Mättnad TP_HLREC_CIELAB;CIELab mix TP_HLREC_COLOR;Färgspridning TP_HLREC_LABEL;Högdagerförbättring TP_HLREC_LUMINANCE;Bättring av luminans TP_HLREC_METHOD;Metod: +TP_HSVEQUALIZER1;Röd +TP_HSVEQUALIZER2;Orange +TP_HSVEQUALIZER3;Gul +TP_HSVEQUALIZER4;Grön +TP_HSVEQUALIZER5;Vatten +TP_HSVEQUALIZER6;Blå +TP_HSVEQUALIZER7;Lila +TP_HSVEQUALIZER8;Magenta +TP_HSVEQUALIZER_CHANNEL;HSV-kanal +TP_HSVEQUALIZER_HUE;Nyans +TP_HSVEQUALIZER_LABEL;HSV-equalizer +TP_HSVEQUALIZER_NEUTRAL;Neutral +TP_HSVEQUALIZER_SAT;Mättnad +TP_HSVEQUALIZER_VAL;Värde TP_ICM_FILEDLGFILTERANY;Vilka filer som helst TP_ICM_FILEDLGFILTERICM;ICC profilfiler TP_ICM_GAMMABEFOREINPUT;Profilapplicerad gamma @@ -734,18 +774,8 @@ ZOOMPANEL_ZOOMOUT;Förminska. Kortkommando: - !!!!!!!!!!!!!!!!!!!!!!!!! -!CURVEEDITOR_CURVE;Curve -!CURVEEDITOR_CURVES;Curves -!CURVEEDITOR_NURBS;Control cage -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter -!HISTORY_MSG_94;Contrast by detail levels -!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider (Category). -!IPTCPANEL_TITLEHINT;A shorthand reference for the image (Object Name). -!POPUPBUTTON_SELECTOPTIONHINT;RMB to change option +!EDITWINDOW_TITLE;Image Edit !PREFERENCES_GREENEQUIL;Green equilibration -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files +!TP_ICM_INPUTNONE;No profile diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index b2cecf14b..ee55a6ea4 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -611,6 +611,7 @@ ZOOMBAR_SMALL;Küçük !CURVEEDITOR_PARAMETRIC;Parametric !CURVEEDITOR_SHADOWS;Shadows !CURVEEDITOR_TYPE;Type: +!EDITWINDOW_TITLE;Image Edit !EXIFFILTER_METADATAFILTER;Enable Metadata Filters !FILEBROWSER_ADDDELTEMPLATE;Add/Del templates... !FILEBROWSER_AUTODARKFRAME;Auto dark frame @@ -629,18 +630,29 @@ ZOOMBAR_SMALL;Küçük !HISTOGRAM_BUTTON_G;G !HISTOGRAM_BUTTON_L;L !HISTOGRAM_BUTTON_R;R +!HISTORY_MSG_100;RGB saturation +!HISTORY_MSG_101;HSV EQ -- Hue +!HISTORY_MSG_102;HSV EQ -- Saturation +!HISTORY_MSG_103;HSV EQ -- Value +!HISTORY_MSG_104;HSV Equalizer !HISTORY_MSG_82;Profile Changed !HISTORY_MSG_83;High quality shadows/highlights !HISTORY_MSG_84;Perspective correction !HISTORY_MSG_85;Wavelet coefficients !HISTORY_MSG_86;Wavelet equalizer -!HISTORY_MSG_87;Impulse noise reduction -!HISTORY_MSG_89;Directional pyramid -!HISTORY_MSG_90;Directional pyramid luminance -!HISTORY_MSG_91;Directional pyramid chominance -!HISTORY_MSG_92;Directional pyramid gamma -!HISTORY_MSG_93;Contrast by detail levels parameter +!HISTORY_MSG_87;Salt&pepper noise reduction +!HISTORY_MSG_88;Salt&pepper NR threshold +!HISTORY_MSG_89;Noise reduction +!HISTORY_MSG_90;NR - luminance +!HISTORY_MSG_91;NR - chrominance +!HISTORY_MSG_92;NR - gamma +!HISTORY_MSG_93;Contrast by detail levels value !HISTORY_MSG_94;Contrast by detail levels +!HISTORY_MSG_95;Saturation +!HISTORY_MSG_96;'a' curve +!HISTORY_MSG_97;'b' curve +!HISTORY_MSG_98;Demozaicing +!HISTORY_MSG_99;Preprocessing !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_PUTTOQUEUE;Put to queue !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add current image to processing queue Ctrl+Q @@ -676,7 +688,7 @@ ZOOMBAR_SMALL;Küçük !PARTIALPASTE_LABCURVE;Luminance curve !POPUPBUTTON_SELECTOPTIONHINT;RMB to change option !PREFERENCES_ADD;ADD -!PREFERENCES_BATCH_PROCESSING;batch processing +!PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHAVIOR;Behavior !PREFERENCES_CACORRECTION;Apply CA auto correction !PREFERENCES_DARKFRAME;Dark frame @@ -688,7 +700,9 @@ ZOOMBAR_SMALL;Küçük !PREFERENCES_HOTDEADPIXFILT;Apply hot/dead pixel filter !PREFERENCES_LINEDENOISE;Line noise filter !PREFERENCES_MULTITAB;Multiple tabs mode +!PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PROPERTY;Property !PREFERENCES_SELECTFONT;Select font !PREFERENCES_SET;SET @@ -700,9 +714,9 @@ ZOOMBAR_SMALL;Küçük !TP_DETAIL_AMOUNT;Amount !TP_DIRPYRDENOISE_CHROMA;Chrominance !TP_DIRPYRDENOISE_GAMMA;Gamma -!TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +!TP_DIRPYRDENOISE_LABEL;Noise reduction !TP_DIRPYRDENOISE_LUMA;Luminance -!TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +!TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels !TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest !TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- !TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -715,7 +729,23 @@ ZOOMBAR_SMALL;Küçük !TP_EQUALIZER_LABEL;Wavelet equalizer !TP_EQUALIZER_LARGEST;coarsest !TP_EQUALIZER_NEUTRAL;Neutral -!TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +!TP_EXPOSURE_SATURATION;Saturation +!TP_HSVEQUALIZER1;Red +!TP_HSVEQUALIZER2;Yellow +!TP_HSVEQUALIZER3;Lime +!TP_HSVEQUALIZER4;Green +!TP_HSVEQUALIZER5;Aqua +!TP_HSVEQUALIZER6;Blue +!TP_HSVEQUALIZER7;Purple +!TP_HSVEQUALIZER8;Magenta +!TP_HSVEQUALIZER_CHANNEL;HSV Channel +!TP_HSVEQUALIZER_HUE;Hue +!TP_HSVEQUALIZER_LABEL;HSV Equalizer +!TP_HSVEQUALIZER_NEUTRAL;Neutral +!TP_HSVEQUALIZER_SAT;Saturation +!TP_HSVEQUALIZER_VAL;Value +!TP_ICM_INPUTNONE;No profile +!TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold !TP_LABCURVE_BRIGHTNESS;Brightness !TP_LABCURVE_CONTRAST;Contrast diff --git a/rtdata/languages/default b/rtdata/languages/default index 338c9371b..a1a1fe3c1 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -21,6 +21,7 @@ CURVEEDITOR_TOOLTIPLINEAR;Reset curve to linear CURVEEDITOR_TOOLTIPLOAD;Load a curve from file CURVEEDITOR_TOOLTIPSAVE;Save current curve CURVEEDITOR_TYPE;Type: +EDITWINDOW_TITLE;Image Edit EXIFFILTER_APERTURE;Aperture EXIFFILTER_CAMERA;Camera EXIFFILTER_DIALOGLABEL;Exif Filter @@ -135,6 +136,11 @@ HISTORY_CUSTOMCURVE;Custom Curve HISTORY_DELSNAPSHOT;Del HISTORY_FROMCLIPBOARD;From clipboard HISTORY_LABEL;History +HISTORY_MSG_100;RGB saturation +HISTORY_MSG_101;HSV EQ -- Hue +HISTORY_MSG_102;HSV EQ -- Saturation +HISTORY_MSG_103;HSV EQ -- Value +HISTORY_MSG_104;HSV Equalizer HISTORY_MSG_10;Shadow Compression HISTORY_MSG_11;Tone Curve HISTORY_MSG_12;Auto Exposure @@ -144,7 +150,7 @@ HISTORY_MSG_15;Luminance Contrast HISTORY_MSG_16;Luminance Black HISTORY_MSG_17;Luminance Highlight Compr. HISTORY_MSG_18;Luminance Shadow Compr. -HISTORY_MSG_19;Luminance Curve +HISTORY_MSG_19;'L' Curve HISTORY_MSG_1;Photo Loaded HISTORY_MSG_20;Sharpening HISTORY_MSG_21;Sharpening Radius @@ -219,14 +225,20 @@ HISTORY_MSG_83;High quality shadows/highlights HISTORY_MSG_84;Perspective correction HISTORY_MSG_85;Wavelet coefficients HISTORY_MSG_86;Wavelet equalizer -HISTORY_MSG_87;Impulse noise reduction -HISTORY_MSG_89;Directional pyramid +HISTORY_MSG_87;Salt&pepper noise reduction +HISTORY_MSG_88;Salt&pepper NR threshold +HISTORY_MSG_89;Noise reduction HISTORY_MSG_8;Exposure Compensation -HISTORY_MSG_90;Directional pyramid luminance -HISTORY_MSG_91;Directional pyramid chominance -HISTORY_MSG_92;Directional pyramid gamma -HISTORY_MSG_93;Contrast by detail levels parameter +HISTORY_MSG_90;NR - luminance +HISTORY_MSG_91;NR - chrominance +HISTORY_MSG_92;NR - gamma +HISTORY_MSG_93;Contrast by detail levels value HISTORY_MSG_94;Contrast by detail levels +HISTORY_MSG_95;Saturation +HISTORY_MSG_96;'a' curve +HISTORY_MSG_97;'b' curve +HISTORY_MSG_98;Demozaicing +HISTORY_MSG_99;Preprocessing HISTORY_MSG_9;Highlight Compression HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOTAS;As... @@ -395,7 +407,7 @@ PARTIALPASTE_WHITEBALANCE;White balance POPUPBUTTON_SELECTOPTIONHINT;RMB to change option PREFERENCES_ADD;ADD PREFERENCES_APPLNEXTSTARTUP;restart required -PREFERENCES_BATCH_PROCESSING;batch processing +PREFERENCES_BATCH_PROCESSING;Batch Processing PREFERENCES_BEHAVIOR;Behavior PREFERENCES_BLINKCLIPPED;Blink clipped areas PREFERENCES_CACHECLEARALL;Clear All @@ -411,6 +423,8 @@ PREFERENCES_CACHESTRAT;Cache Strategy PREFERENCES_CACHETHUMBFORM;Cache Thumbnail Format PREFERENCES_CACHETHUMBHEIGHT;Maximal Thumbnail Height PREFERENCES_CACORRECTION;Apply CA auto correction +PREFERENCES_CARED;Red CA manual correction +PREFERENCES_CABLUE;Blue CA manual correction PREFERENCES_CLIPPINGIND;Clipping indication PREFERENCES_CMETRICINTENT;Colorimetric Intent PREFERENCES_DARKFRAME;Dark frame @@ -452,6 +466,7 @@ PREFERENCES_LINEDENOISE;Line noise filter PREFERENCES_LIVETHUMBNAILS;Live Thumbnails (slower) PREFERENCES_MONITORICC;Monitor Profile PREFERENCES_MULTITAB;Multiple tabs mode +PREFERENCES_MULTITABDUALMON;Multiple tabs mode, if available on second monitor PREFERENCES_OUTDIR;Output Directory PREFERENCES_OUTDIRFOLDER;Save to folder PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the selected folder @@ -459,6 +474,7 @@ PREFERENCES_OUTDIRHINT;You can use the following formatting strings:\n%f, PREFERENCES_OUTDIRTEMPLATE;Use Template PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nThese formatting strings refer to the different parts of the photo's pathname.\n\nFor example, if the photo being processed has the following pathname:\n/home/tom/photos/2010-10-31/dsc0042.nef\nthe meaning of the formatting strings are:\n%d4 = home\n%d3 = tom\n%d2 = photos\n%d1 = 2010-10-31\n%f = dsc0042\n%p1 = /home/tom/photos/2010-10-31/\n%p2 = /home/tom/photos/\n%p3 = /home/tom/\n%p4 = /home/\n\nIf you want to save the output image where the original is, write:\n%p1/%f\n\nIf you want to save the output image in a directory named "converted" located in the directory of the opened image, write:\n%p1/converted/%f\n\nIf you want to save the output image in a directory named "/home/tom/photos/converted/2010-10-31", write:\n%p2/converted/%d1/%f PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails +PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files PREFERENCES_PARSEDEXT;Parsed Extensions PREFERENCES_PARSEDEXTADD;Add Extension PREFERENCES_PARSEDEXTADDHINT;Type an extension and press this button to append list @@ -586,12 +602,15 @@ TP_CROP_SELECTCROP; Select Crop TP_CROP_W;W TP_CROP_X;x TP_CROP_Y;y +TP_DEFRINGE_LABEL;Defringe +TP_DEFRINGE_RADIUS;Radius +TP_DEFRINGE_THRESHOLD;Threshold TP_DETAIL_AMOUNT;Amount TP_DIRPYRDENOISE_CHROMA;Chrominance TP_DIRPYRDENOISE_GAMMA;Gamma -TP_DIRPYRDENOISE_LABEL;Directional pyramid noise reduction +TP_DIRPYRDENOISE_LABEL;Noise reduction TP_DIRPYRDENOISE_LUMA;Luminance -TP_DIRPYREQUALIZER_LABEL;Directional pyramid equalizer +TP_DIRPYREQUALIZER_LABEL;Contrast by detail levels TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ @@ -616,11 +635,26 @@ TP_EXPOSURE_CONTRAST;Contrast TP_EXPOSURE_CURVEEDITOR;Tone Curve TP_EXPOSURE_EXPCOMP;Exp. Comp. TP_EXPOSURE_LABEL;Exposure +TP_EXPOSURE_SATURATION;Saturation TP_HLREC_CIELAB;CIELab Blending TP_HLREC_COLOR;Color Propagation TP_HLREC_LABEL;Highlight Reconstruction TP_HLREC_LUMINANCE;Luminance Recovery TP_HLREC_METHOD;Method: +TP_HSVEQUALIZER1;Red +TP_HSVEQUALIZER2;Yellow +TP_HSVEQUALIZER3;Lime +TP_HSVEQUALIZER4;Green +TP_HSVEQUALIZER5;Aqua +TP_HSVEQUALIZER6;Blue +TP_HSVEQUALIZER7;Purple +TP_HSVEQUALIZER8;Magenta +TP_HSVEQUALIZER_CHANNEL;HSV Channel +TP_HSVEQUALIZER_HUE;Hue +TP_HSVEQUALIZER_LABEL;HSV Equalizer +TP_HSVEQUALIZER_NEUTRAL;Neutral +TP_HSVEQUALIZER_SAT;Saturation +TP_HSVEQUALIZER_VAL;Value TP_ICM_FILEDLGFILTERANY;Any files TP_ICM_FILEDLGFILTERICM;ICC Profile Files TP_ICM_GAMMABEFOREINPUT;Profile applies Gamma @@ -628,6 +662,7 @@ TP_ICM_INPUTCAMERA;Camera default TP_ICM_INPUTCUSTOM;Custom TP_ICM_INPUTDLGLABEL;Select Input ICC Profile... TP_ICM_INPUTEMBEDDED;Use Embedded, if possible +TP_ICM_INPUTNONE;No profile TP_ICM_INPUTPROFILE;Input Profile TP_ICM_LABEL;ICM TP_ICM_NOICM;No ICM: sRGB output @@ -635,7 +670,7 @@ TP_ICM_OUTPUTDLGLABEL;Select Output ICC Profile... TP_ICM_OUTPUTPROFILE;Output Profile TP_ICM_SAVEREFERENCE;Save reference image for profiling TP_ICM_WORKINGPROFILE;Working Profile -TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction +TP_IMPULSEDENOISE_LABEL;Spot Noise Reduction TP_IMPULSEDENOISE_THRESH;Threshold TP_LABCURVE_BRIGHTNESS;Brightness TP_LABCURVE_CONTRAST;Contrast @@ -676,12 +711,12 @@ TP_ROTATE_DEGREE;Degree TP_ROTATE_LABEL;Rotate TP_ROTATE_SELECTLINE; Select Straight Line TP_SHADOWSHLIGHTS_HIGHLIGHTS;Highlights -TP_SHADOWSHLIGHTS_HLTONALW;Tonal Width +TP_SHADOWSHLIGHTS_HLTONALW;Tonal Width for Highlights TP_SHADOWSHLIGHTS_LABEL;Shadows/Highlights TP_SHADOWSHLIGHTS_LOCALCONTR;Local Contrast TP_SHADOWSHLIGHTS_RADIUS;Radius TP_SHADOWSHLIGHTS_SHADOWS;Shadows -TP_SHADOWSHLIGHTS_SHTONALW;Tonal Width +TP_SHADOWSHLIGHTS_SHTONALW;Tonal Width for Shadows TP_SHARPENING_AMOUNT;Amount TP_SHARPENING_EDRADIUS;Radius TP_SHARPENING_EDTOLERANCE;Edge tolerance diff --git a/rtdata/options/options.lin b/rtdata/options/options.lin index 02016e9e4..9ece4c775 100644 --- a/rtdata/options/options.lin +++ b/rtdata/options/options.lin @@ -72,6 +72,10 @@ SaveParamsWithFile=false SaveParamsToCache=true LoadParamsFromLocation=0 +# if this is set to a path of a custom program, it will receive the EXIFs as parameters and must generate a PP3 preset file for the given RAW/JPG +# Parameters: +CustomProfileBuilder= + [GUI] WindowWidth=900 WindowHeight=560 diff --git a/rtdata/options/options.osx b/rtdata/options/options.osx index f05215ae6..c7dde9d11 100644 --- a/rtdata/options/options.osx +++ b/rtdata/options/options.osx @@ -72,6 +72,10 @@ SaveParamsWithFile=false SaveParamsToCache=true LoadParamsFromLocation=0 +# if this is set to a path of a custom program, it will receive the EXIFs as parameters and must generate a PP3 preset file for the given RAW/JPG +# Parameters: +CustomProfileBuilder= + [GUI] WindowWidth=900 WindowHeight=560 diff --git a/rtdata/options/options.win b/rtdata/options/options.win index 8834ed124..f7571d6c6 100644 --- a/rtdata/options/options.win +++ b/rtdata/options/options.win @@ -72,6 +72,11 @@ SaveParamsWithFile=false SaveParamsToCache=true LoadParamsFromLocation=0 +# if this is set to a path of a custom program, it will receive the EXIFs as parameters and must generate a PP3 preset file for the given RAW/JPG +# Parameters: +CustomProfileBuilder= + + [GUI] WindowWidth=900 WindowHeight=560 diff --git a/rtdata/profiles/crisp.pp3 b/rtdata/profiles/crisp.pp3 index 77c88a570..f80eecc70 100644 --- a/rtdata/profiles/crisp.pp3 +++ b/rtdata/profiles/crisp.pp3 @@ -1,6 +1,6 @@ [Version] -Version=484 +Version=20101111 [Exposure] Auto=true @@ -8,10 +8,11 @@ Clip=0.001 Compensation=0 Brightness=0 Contrast=12 +Saturation=0 Black=0 HighlightCompr=70 ShadowCompr=50 -Curve=1;0;0;1;1; +Curve=0; [Channel Mixer] Red=100;0;0; @@ -21,10 +22,10 @@ Blue=0;0;100; [Luminance Curve] Brightness=0 Contrast=0 -Black=0 -HighlightCompr=0 -ShadowCompr=0 -Curve=1;0;0;1;1; +Saturation=0 +LCurve=0; +aCurve=0; +bCurve=0; [Sharpening] Enabled=true @@ -43,21 +44,30 @@ DeconvDamping=20 DeconvIterations=30 [Color Boost] -ChannelA=12 -ChannelB=12 +Amount=12 AvoidColorClipping=false SaturationLimiter=false SaturationLimit=75 [White Balance] Setting=Camera -Temperature=6504 +Temperature=5200 Green=1.0 [Color Shift] ChannelA=0 ChannelB=0 +[Impulse Denoising] +Enabled=false +Threshold=50 + +[Directional Pyramid Denoising] +Enabled=false +Luma=10 +Chroma=10 +Gamma=2 + [Luminance Denoising] Enabled=false Radius=2.5 @@ -65,12 +75,11 @@ EdgeTolerance=1500 [Chrominance Denoising] Enabled=false -EdgeSensitive=false -Radius=2 -EdgeTolerance=3500 +Amount=20 [Shadows & Highlights] Enabled=false +HighQuality=false Highlights=10 HighlightTonalWidth=80 Shadows=10 @@ -82,9 +91,9 @@ Radius=30 Enabled=false X=0 Y=0 -W=10000 -H=10000 -FixedRatio=true +W=4276 +H=2836 +FixedRatio=false Ratio=3:2 Orientation=Landscape Guide=None @@ -94,12 +103,19 @@ Rotate=0 HorizontalFlip=false VerticalFlip=false +[Common Properties for Transformations] +AutoFill=true + [Rotation] Degree=0 -Fill=1 [Distortion] Amount=0 +UseLensFun=false + +[Perspective] +Horizontal=0 +Vertical=0 [CACorrection] Red=0 @@ -108,17 +124,55 @@ Blue=0 [Vignetting Correction] Amount=0 Radius=50 +Strength=1 +CenterX=0 +CenterY=0 [HLRecovery] Enabled=true Method=Luminance [Resize] +Enabled=false Scale=1 Method=Bicubic +DataSpecified=0 +Width=4276 +Height=2836 [Color Management] InputProfile=(camera) ApplyGammaBeforeInputProfile=false WorkingProfile=sRGB OutputProfile=No ICM: sRGB output + +[Equalizer] +Enabled=false +C0=0 +C1=0 +C2=0 +C3=0 +C4=0 +C5=0 +C6=0 +C7=0 + +[Directional Pyramid Equalizer] +Enabled=false +Mult0=1 +Mult1=1 +Mult2=1 +Mult3=1 +Mult4=0 + +[RAW] +DarkFrame= +DarkFrameAuto=false +CA=false +HotDeadPixels=false +LineDenoise=0 +GreenEqThreshold=0 +CcSteps=1 +Method=amaze +DCBIterations=2 +DCBEnhance=false diff --git a/rtdata/profiles/default.pp3 b/rtdata/profiles/default.pp3 index 3302d68c8..94d6a1631 100644 --- a/rtdata/profiles/default.pp3 +++ b/rtdata/profiles/default.pp3 @@ -1,6 +1,6 @@ [Version] -Version=484 +Version=20101111 [Exposure] Auto=true @@ -8,10 +8,11 @@ Clip=0.001 Compensation=0 Brightness=0 Contrast=0 +Saturation=0 Black=0 HighlightCompr=70 ShadowCompr=50 -Curve=1;0;0;1;1; +Curve=0; [Channel Mixer] Red=100;0;0; @@ -21,10 +22,10 @@ Blue=0;0;100; [Luminance Curve] Brightness=0 Contrast=0 -Black=0 -HighlightCompr=0 -ShadowCompr=0 -Curve=1;0;0;1;1; +Saturation=0 +LCurve=0; +aCurve=0; +bCurve=0; [Sharpening] Enabled=true @@ -43,21 +44,30 @@ DeconvDamping=20 DeconvIterations=30 [Color Boost] -ChannelA=0 -ChannelB=0 +Amount=0 AvoidColorClipping=false SaturationLimiter=false SaturationLimit=75 [White Balance] Setting=Camera -Temperature=6504 +Temperature=5200 Green=1.0 [Color Shift] ChannelA=0 ChannelB=0 +[Impulse Denoising] +Enabled=false +Threshold=50 + +[Directional Pyramid Denoising] +Enabled=false +Luma=10 +Chroma=10 +Gamma=2 + [Luminance Denoising] Enabled=false Radius=2.5 @@ -65,12 +75,11 @@ EdgeTolerance=1500 [Chrominance Denoising] Enabled=false -EdgeSensitive=false -Radius=2 -EdgeTolerance=3500 +Amount=20 [Shadows & Highlights] Enabled=false +HighQuality=false Highlights=10 HighlightTonalWidth=80 Shadows=10 @@ -82,9 +91,9 @@ Radius=30 Enabled=false X=0 Y=0 -W=10000 -H=10000 -FixedRatio=true +W=4276 +H=2836 +FixedRatio=false Ratio=3:2 Orientation=Landscape Guide=None @@ -94,12 +103,19 @@ Rotate=0 HorizontalFlip=false VerticalFlip=false +[Common Properties for Transformations] +AutoFill=true + [Rotation] Degree=0 -Fill=1 [Distortion] Amount=0 +UseLensFun=false + +[Perspective] +Horizontal=0 +Vertical=0 [CACorrection] Red=0 @@ -108,14 +124,21 @@ Blue=0 [Vignetting Correction] Amount=0 Radius=50 +Strength=1 +CenterX=0 +CenterY=0 [HLRecovery] -Enabled=true -Method=Luminance +Enabled=false +Method=CIELab blending [Resize] +Enabled=false Scale=1 Method=Bicubic +DataSpecified=0 +Width=4276 +Height=2836 [Color Management] InputProfile=(camera) @@ -123,3 +146,33 @@ ApplyGammaBeforeInputProfile=false WorkingProfile=sRGB OutputProfile=No ICM: sRGB output +[Equalizer] +Enabled=false +C0=0 +C1=0 +C2=0 +C3=0 +C4=0 +C5=0 +C6=0 +C7=0 + +[Directional Pyramid Equalizer] +Enabled=false +Mult0=1 +Mult1=1 +Mult2=1 +Mult3=1 +Mult4=0 + +[RAW] +DarkFrame= +DarkFrameAuto=false +CA=false +HotDeadPixels=false +LineDenoise=0 +GreenEqThreshold=0 +CcSteps=1 +Method=amaze +DCBIterations=2 +DCBEnhance=false diff --git a/rtdata/profiles/neutral.pp3 b/rtdata/profiles/neutral.pp3 index feb2eb414..e2b413353 100644 --- a/rtdata/profiles/neutral.pp3 +++ b/rtdata/profiles/neutral.pp3 @@ -1,5 +1,5 @@ [Version] -Version=20101019 +Version=20101111 [Exposure] Auto=false @@ -163,8 +163,8 @@ Mult1=1 Mult2=1 Mult3=1 Mult4=0 - -[RAW] + +[RAW] DarkFrame= DarkFrameAuto=false CA=false diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 69f4f14b6..097fdac90 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -103,7 +103,7 @@ void RawImageSource::CA_correct_RT() { #define PIX_SORT(a,b) { if ((a)>(b)) {temp=(a);(a)=(b);(b)=temp;} } #define SQR(x) ((x)*(x)) - const float clip_pt = ri->defgain; + const float clip_pt = initialGain; // local variables int width=W, height=H; diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 181f05037..a16fbd9a5 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -7,13 +7,14 @@ link_directories (${CMAKE_CURRENT_SOURCE_DIR}/../rtexif ${EXTRA_LIBDIR} ${GTHREA ${GOBJECT_LIBRARY_DIRS} ${GLIB2_LIBRARY_DIRS} ${GLIBMM_LIBRARY_DIRS} ${IPTCDATA_LIBRARY_DIRS} ${LCMS_LIBRARY_DIRS}) -set (RTENGINESOURCEFILES colortemp.cc curves.cc dcraw.cc iccstore.cc dfmanager.cc +set (RTENGINESOURCEFILES colortemp.cc curves.cc dcraw.cc iccstore.cc dfmanager.cc rawimage.cc image8.cc image16.cc imagedata.cc imageio.cc improcfun.cc init.cc dcrop.cc loadinitial.cc procparams.cc rawimagesource.cc shmap.cc simpleprocess.cc refreshmap.cc stdimagesource.cc myfile.cc iccjpeg.c hlmultipliers.cc improccoordinator.cc processingjob.cc rtthumbnail.cc utils.cc labimage.cc slicer.cc iplab2rgb.cc ipsharpen.cc iptransform.cc ipresize.cc jpeg_memsrc.c + PF_correct_RT.cc wavelet_dec.cc ipequalizer.cc dirpyrLab_denoise.cc dirpyrLab_equalizer.cc dirpyr_equalizer.cc) add_library (rtengine ${RTENGINESOURCEFILES}) diff --git a/rtengine/PF_correct_RT.cc b/rtengine/PF_correct_RT.cc new file mode 100644 index 000000000..68efeb83f --- /dev/null +++ b/rtengine/PF_correct_RT.cc @@ -0,0 +1,137 @@ +//////////////////////////////////////////////////////////////// +// +// Chromatic Aberration Auto-correction +// +// copyright (c) 2008-2010 Emil Martinec +// +// +// code dated: November 24, 2010 +// +// PF_correct_RT.cc 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. +// +// This program 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 this program. If not, see . +// +//////////////////////////////////////////////////////////////// +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +//#include +//#include +#include +//#include +#include + +#ifdef _OPENMP +#include +#endif + +#define SQR(x) ((x)*(x)) + +namespace rtengine { + +void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst, double radius, int thresh, bool edges) { + + float threshsqr = SQR(thresh); + int halfwin = ceil(2*radius)+1; + +#define SQR(x) ((x)*(x)) + + // local variables + int width=src->W, height=src->H; + //temporary array to store chromaticity + int (*fringe); + fringe = (int (*)) calloc ((height)*(width), sizeof *fringe); + + LabImage * tmp1; + tmp1 = new LabImage(width, height); + +#ifdef _OPENMP +#pragma omp parallel +#endif + { + AlignedBuffer* buffer = new AlignedBuffer (MAX(src->W,src->H)); + gaussHorizontal (src->a, tmp1->a, buffer, src->W, src->H, radius, multiThread); + gaussHorizontal (src->b, tmp1->b, buffer, src->W, src->H, radius, multiThread); + gaussVertical (tmp1->a, tmp1->a, buffer, src->W, src->H, radius, multiThread); + gaussVertical (tmp1->b, tmp1->b, buffer, src->W, src->H, radius, multiThread); + + gaussHorizontal (src->L, tmp1->L, buffer, src->W, src->H, radius, multiThread); + gaussVertical (tmp1->L, tmp1->L, buffer, src->W, src->H, radius, multiThread); + + delete buffer; + } + +//#ifdef _OPENMP +//#pragma omp parallel for +//#endif + float chromave=0; + for(int i = 0; i < height; i++ ) { + for(int j = 0; j < width; j++) { + float chroma = SQR(src->a[i][j]-tmp1->a[i][j])+SQR(src->b[i][j]-tmp1->b[i][j]); + chromave += chroma; + fringe[i*width+j]=chroma; + } + } + chromave /= (height*width); + +#ifdef _OPENMP +#pragma omp parallel for +#endif + + for(int i = 0; i < height; i++ ) { + for(int j = 0; j < width; j++) { + tmp1->a[i][j] = src->a[i][j]; + tmp1->b[i][j] = src->b[i][j]; + //test for pixel darker than some fraction of neighborhood ave, near an edge, more saturated than average + /*if (100*tmp1->L[i][j]>50*src->L[i][j] && \*/ + /*1000*abs(tmp1->L[i][j]-src->L[i][j])>thresh*(tmp1->L[i][j]+src->L[i][j]) && \*/ + if (33*fringe[i*width+j]>thresh*chromave) { + float atot=0; + float btot=0; + float norm=0; + float wt; + for (int i1=MAX(0,i-halfwin+1); i1a[i1][j1]; + btot += wt*src->b[i1][j1]; + norm += wt; + } + tmp1->a[i][j] = (int)(atot/norm); + tmp1->b[i][j] = (int)(btot/norm); + }//end of ab channel averaging + } + } + +#ifdef _OPENMP +#pragma omp parallel for +#endif + + for(int i = 0; i < height; i++ ) { + for(int j = 0; j < width; j++) { + dst->L[i][j] = src->L[i][j]; + dst->a[i][j] = tmp1->a[i][j]; + dst->b[i][j] = tmp1->b[i][j]; + } + } + + delete tmp1; + free(fringe); + +//#undef SQR + +} + +} + diff --git a/rtengine/alignedbuffer.h b/rtengine/alignedbuffer.h index 33a4cdaa1..eb8b53b0a 100644 --- a/rtengine/alignedbuffer.h +++ b/rtengine/alignedbuffer.h @@ -19,6 +19,8 @@ #ifndef _ALIGNEDBUFFER_ #define _ALIGNEDBUFFER_ +#include + template class AlignedBuffer { private: diff --git a/rtengine/amaze_demosaic_RT.cc b/rtengine/amaze_demosaic_RT.cc index 450e27078..d7248e7fa 100644 --- a/rtengine/amaze_demosaic_RT.cc +++ b/rtengine/amaze_demosaic_RT.cc @@ -38,7 +38,7 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { int width=winw, height=winh; - const float clip_pt = 1/ri->defgain; + const float clip_pt = 1/initialGain; #define TS 512 // Tile size; the image is processed in square tiles to lower memory requirements and facilitate multi-threading diff --git a/rtengine/cfa_linedn_RT.cc b/rtengine/cfa_linedn_RT.cc index 8f7449cd0..59cba81b8 100644 --- a/rtengine/cfa_linedn_RT.cc +++ b/rtengine/cfa_linedn_RT.cc @@ -64,7 +64,7 @@ void RawImageSource::CLASS cfa_linedn(float noise) int ex, ey; int verbose=1; - const float clip_pt = 0.8*ri->defgain; + const float clip_pt = 0.8*initialGain* 65535.0; float eps=1e-5; //tolerance to avoid dividing by zero diff --git a/rtengine/common.h b/rtengine/common.h deleted file mode 100644 index 760a2144f..000000000 --- a/rtengine/common.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 . - */ -#ifndef _COMMON_ -#define _COMMON_ - -#define ISRED(image,row,col) \ - ((image->filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==0) -#define ISGREEN(image,row,col) \ - ((image->filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==1) -#define ISBLUE(image,row,col) \ - ((image->filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==2) - -#define FISRED(filter,row,col) \ - ((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==0 || !filter) -#define FISGREEN(filter,row,col) \ - ((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==1 || !filter) -#define FISBLUE(filter,row,col) \ - ((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==2 || !filter) - -#define CMAXVAL 65535 - -#include -#include - -namespace rtengine { - -struct badPix -{ - int x; - int y; - badPix( int xc, int yc ):x(xc),y(yc){} -}; - -struct RawImage { - - Glib::ustring fname; // complete filename - int width; // with of the image as reported by dcraw - int height; // height of the image as reported by dcraw - - unsigned filters; // sequence of Bayer filter colors: 2bit for each of 2x8 pixels grid indicate 0=Red,1=Green1,2=Blue,(3=green2) - int colors; // Number of colors of bayer filter (3 or 4) - - int black_point; // Black offset taken from dslr info by dcraw - int cblack[4]; // Black for each color. - unsigned short white[8][8]; // square of white registered by camera - float cam_mul[4]; // Camera color multiplier taken from exif by dcraw - float pre_mul[4]; - int maximum; // White (maximum) point taken from dslr info - int rotate_deg; // 0,90,180,270 degree of rotation: info taken by dcraw from exif - int fuji_width; - - double defgain; - double iso_speed; - double shutter; - double aperture; - double focal_len; - time_t timestamp; - char *make, *model; - - int exifbase, prefilters, ciff_base, ciff_len; - int thumbLength; - int thumbOffset; - int thumbType; - int thumbWidth; - int thumbHeight; - - unsigned short* allocation; - unsigned short** data; // holds pixel values, data[i][j] corresponds to the ith row and jth column - - float coeff[3][3]; - float icoeff[3][3]; - - int profile_len; - char* profile_data; // Embedded ICC color profile - - RawImage( const Glib::ustring name):allocation(NULL),data(NULL),profile_data(NULL),fname(name) - { - } - ~RawImage() - { - if(allocation){ delete [] allocation; allocation=NULL;} - if(data){ delete [] data; data=NULL;} - if(profile_data){ delete [] profile_data; profile_data=NULL;} - } - - int loadRaw (bool loadData=true); - - void allocData() - { - if (filters) { - if (!allocation) { - allocation = new unsigned short[height * width]; - data = new unsigned short*[height]; - for (int i = 0; i < height; i++) - data[i] = allocation + i * width; - } - }else{ - if (!allocation) { - allocation = new unsigned short[3 * height * width]; - data = new unsigned short*[height]; - for (int i = 0; i < height; i++) - data[i] = allocation + 3 * i * width; - } - } - if(profile_len) - profile_data = new char[profile_len]; - } - -}; - -} - -#endif diff --git a/rtengine/curves.cc b/rtengine/curves.cc index f03d76752..5224a9606 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -586,8 +586,8 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, double shcompr, double br, double contr, double defmul, double gamma_, bool igamma, const std::vector& curvePoints, unsigned int* histogram, int* hlCurve, int* shCurve, int* outCurve, unsigned int* outBeforeCCurveHistogram, int skip) { + /* + void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, double shcompr, double br, double contr, double defmul, double gamma_, bool igamma, const std::vector& curvePoints, unsigned int* histogram, float* hlCurve, float* shCurve, int* outCurve, unsigned int* outBeforeCCurveHistogram, int skip) { double def_mul = pow (2.0, defmul); @@ -622,47 +622,6 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // tone curve base. a: slope (from exp.comp.), b: black, def_mul: max. x value (can be>1), hr,sr: highlight,shadow recovery - /* - std::vector basecurvePoints; - basecurvePoints.push_back((double)((CurveType)NURBS)); - float blackx = MIN(1,black/(a*def_mul)); - float whitex = 1/(a*def_mul);//point in x at which line of slope a*def_mul starting at (0,0) reaches y=1 - float toneslope=(1-0)/(shoulderx-toex); - toey = 0.01 + 0.3*(MAX(0,shcompr/100.0-0.25)); - toex = blackx + toey/toneslope; - if (whitex<1) {//a>1; positive EC - //move shoulder down if there is highlight rolloff - shouldery = 1-(0.3)*(MAX(0,hlcompr/100.0-0.25)); - shoulderx = whitex - (1-shouldery)/toneslope; - } else {//a<1; negative EC - //if (shoulderx>1) { - shoulderx = 1; - shouldery = a*def_mul; - } - - basecurvePoints.push_back(MAX(0,blackx*(1-shcompr/25.0))); //black point. Value in [0 ; 1] range - basecurvePoints.push_back(0); //black point. Value in [0 ; 1] range - - basecurvePoints.push_back(toex); //toe point - basecurvePoints.push_back(toey); //value at toe point - - if (toex<1) { - //add a point along the line between the toe point and shoulder point - basecurvePoints.push_back(0.4*toex+0.6*shoulderx); //mid point - basecurvePoints.push_back(0.4*toey+0.6*shouldery); //value at mid point - - basecurvePoints.push_back(shoulderx); //shoulder point - basecurvePoints.push_back(shouldery); //value at shoulder point - if (shoulderx<1) { - basecurvePoints.push_back(MIN(0.99,whitex+0.01+(1-whitex-0.01)*(hlcompr/70.0)); // lead into white point - basecurvePoints.push_back(1); // value near white point - basecurvePoints.push_back(1); // white point - basecurvePoints.push_back(1); // value at white point - } - } - Curve* basecurve = NULL; - basecurve = new Curve (basecurvePoints, CURVES_MIN_POLY_POINTS/skip); // Actually, CURVES_MIN_POLY_POINTS = 1000, - */ //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% std::vector brightcurvePoints; @@ -691,7 +650,7 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou brightcurve = new Curve (brightcurvePoints, CURVES_MIN_POLY_POINTS/skip); // Actually, CURVES_MIN_POLY_POINTS = 1000, //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - for (int i=0; i<=0xffff; i+= i<0xffff-skip ? skip : 1 ) { + for (int i=0; i<=0xffff; i++) { // change to [0,1] range double val = (double)i / 65535.0; @@ -702,21 +661,24 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou // apply base curve, thus, exposure compensation and black point with shadow and highlight protection val = basecurve (val*def_mul, a, 0, def_mul, hlcompr/100.0, 0); //val = basecurve (val*def_mul, a, black, def_mul, hlcompr/100.0, 1.5*shcompr/100.0); - //val = basecurvenew->getVal (val); - hlCurve[i] = (int) (65535.0 * CLIPD(val)); + hlCurve[i] = (65535.0 * CLIPD(val)); //%%%%%%%%%%%%%%%%%%%%%%%%%% // change to [0,1] range val = (double)i / 65535.0; - val = basecurve (val, 1, black, def_mul, 1, 1.5*shcompr/100.0); + val = basecurve (val, 1, black, 1, 0, 1.5*shcompr/100.0); - shCurve[i] = (int) (65535.0 * CLIPD(val)); + shCurve[i] = (65535.0 * CLIPD(val)); + } //%%%%%%%%%%%%%%%%%%%%%%%%%% + for (int i=0; i<=0xffff; i+= i<0xffff-skip ? skip : 1 ) { + // change to [0,1] range - val = (double)i / 65535.0; + double val = (double)i / 65535.0; + float val0 = val; // gamma correction if (gamma_>0) @@ -729,7 +691,7 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou // apply custom/parametric/NURBS curve, if any if (tcurve) { if (outBeforeCCurveHistogram) { - double hval = val; + float hval = shCurve[(int)(hlCurve[i])]*(float)val/(65535*val0); //if (needigamma) // hval = igamma2 (hval); int hi = (int)(255.0*CLIPD(hval)); @@ -746,8 +708,6 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou dcurve[i] = CLIPD(val); } delete tcurve; - - //delete basecurvenew; // ...when you don't need it anymore delete brightcurve; // if skip>1, let apply linear interpolation in the skipped points of the curve @@ -757,8 +717,6 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou prev+=skip; continue; } - hlCurve[i] = ( hlCurve[prev] * (skip - i%skip) + hlCurve[prev+skip] * (i%skip) ) / skip; - shCurve[i] = ( shCurve[prev] * (skip - i%skip) + shCurve[prev+skip] * (i%skip) ) / skip; dcurve[i] = ( dcurve[prev] * (skip - i%skip) + dcurve[prev+skip] * (i%skip) ) / skip; } @@ -768,29 +726,26 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou double avg = 0; //double sqavg = 0; for (int i=0; i<=0xffff; i++) { - avg += dcurve[i] * histogram[i]; + avg += dcurve[(int)shCurve[(int)hlCurve[i]]] * histogram[i]; //sqavg += dcurve[i]*dcurve[i] * histogram[i]; sum += histogram[i]; } avg /= sum; //sqavg /= sum; //double stddev = sqrt(sqavg-avg*avg); - float contrslope = (50)/(50-0.25*contr); + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% std::vector contrastcurvePoints; contrastcurvePoints.push_back((double)((CurveType)NURBS)); contrastcurvePoints.push_back(0); //black point. Value in [0 ; 1] range contrastcurvePoints.push_back(0); //black point. Value in [0 ; 1] range - - contrastcurvePoints.push_back(avg*(1-1/contrslope)); //toe point - contrastcurvePoints.push_back(0); //value at toe point - contrastcurvePoints.push_back(avg); //mid point - contrastcurvePoints.push_back(avg); //value at mid point + contrastcurvePoints.push_back(avg-avg*(0.6-contr/250.0)); //toe point + contrastcurvePoints.push_back(avg-avg*(0.6+contr/250.0)); //value at toe point - contrastcurvePoints.push_back(avg+(1-avg)/contrslope); // shoulder point - contrastcurvePoints.push_back(1); // value at shoulder point + contrastcurvePoints.push_back(avg+(1-avg)*(0.6-contr/250.0)); //shoulder point + contrastcurvePoints.push_back(avg+(1-avg)*(0.6+contr/250.0)); //value at shoulder point contrastcurvePoints.push_back(1); // white point contrastcurvePoints.push_back(1); // value at white point @@ -807,15 +762,199 @@ void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, dou val = igamma2 (val); outCurve[i] = (int) (65535.0 * CLIPD(val)); } + delete contrastcurve; } else for (int i=0; i<=0xffff; i++) outCurve[i] = (int) (65535.0 * dcurve[i]); delete [] dcurve; } - + */ //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, double shcompr, double br, double contr, double defmul, double gamma_, bool igamma, const std::vector& curvePoints, unsigned int* histogram, float* hlCurve, float* shCurve, int* outCurve, unsigned int* outBeforeCCurveHistogram, int skip) { + + double def_mul = pow (2.0, defmul); + + //printf ("def_mul= %f ecomp= %f black= %f hlcompr= %f shcompr= %f br= %f contr= %f defmul= %f gamma= %f, skip= %d \n",def_mul,ecomp,black,hlcompr,shcompr,br,contr,defmul,gamma_,skip); + + // compute parameters of the gamma curve + double start = exp(gamma_*log( -0.099 / ((1.0/gamma_-1.0)*1.099 ))); + double slope = 1.099 * pow (start, 1.0/gamma_-1) - 0.099/start; + double mul = 1.099; + double add = 0.099; + + // a: slope of the curve, black: starting point at the x axis + double a = pow (2.0, ecomp); + + // curve without contrast + double* dcurve = new double[65536]; + + // check if contrast curve is needed + bool needcontrast = contr>0.00001 || contr<-0.00001; + + // check if inverse gamma is needed at the end + bool needigamma = igamma && gamma_>0; + + // create a curve if needed + Curve* tcurve = NULL; + if (curvePoints.size()>0 && curvePoints[0]!=0) + tcurve = new Curve (curvePoints, CURVES_MIN_POLY_POINTS/skip); + + // clear array that stores histogram valid before applying the custom curve + if (outBeforeCCurveHistogram) + memset (outBeforeCCurveHistogram, 0, 256*sizeof(int)); + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + // tone curve base. a: slope (from exp.comp.), b: black, def_mul: max. x value (can be>1), hr,sr: highlight,shadow recovery + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + std::vector brightcurvePoints; + brightcurvePoints.push_back((double)((CurveType)NURBS)); + + brightcurvePoints.push_back(0); //black point. Value in [0 ; 1] range + brightcurvePoints.push_back(0); //black point. Value in [0 ; 1] range + + if(br>0) { + brightcurvePoints.push_back(0.1); //toe point + brightcurvePoints.push_back(0.1+br/150.0); //value at toe point + + brightcurvePoints.push_back(0.7); //shoulder point + brightcurvePoints.push_back(MIN(1.0,0.7+br/300.0)); //value at shoulder point + } else { + brightcurvePoints.push_back(0.1-br/150.0); //toe point + brightcurvePoints.push_back(0.1); //value at toe point + + brightcurvePoints.push_back(MIN(1.0,0.7-br/300.0)); //shoulder point + brightcurvePoints.push_back(0.7); //value at shoulder point + } + brightcurvePoints.push_back(1); // white point + brightcurvePoints.push_back(1); // value at white point + + Curve* brightcurve = NULL; + brightcurve = new Curve (brightcurvePoints, CURVES_MIN_POLY_POINTS/skip); // Actually, CURVES_MIN_POLY_POINTS = 1000, + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + for (int i=0; i<=0xffff; i++) { + + // change to [0,1] range + double val = (double)i / 65535.0; + + // apply default multiplier (that is >1 if highlight recovery is on) + // val *= def_mul; + + // apply base curve, thus, exposure compensation and black point with shadow and highlight protection + val = basecurve (val*def_mul, a, 0, def_mul, hlcompr/100.0, 0); + //val = basecurve (val*def_mul, a, black, def_mul, hlcompr/100.0, 1.5*shcompr/100.0); + + hlCurve[i] = (65535.0 * CLIPD(val)); + + //%%%%%%%%%%%%%%%%%%%%%%%%%% + // change to [0,1] range + val = (double)i / 65535.0; + + val = basecurve (val, 1, black, 1, 0, 1.5*shcompr/100.0); + + shCurve[i] = (65535.0 * CLIPD(val)); + + //%%%%%%%%%%%%%%%%%%%%%%%%%% + // change to [0,1] range + val = (double)i / 65535.0; + + // gamma correction + if (gamma_>0) + val = gamma (val, gamma_, start, slope, mul, add); + + // apply brightness curve + //val = brightness (val, br/100.0); + val = brightcurve->getVal (val); + + // store result in a temporary array + dcurve[i] = CLIPD(val); + } + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + if (needcontrast) { + // compute mean luminance of the image with the curve applied + int sum = 0; + double avg = 0; + //double sqavg = 0; + for (int i=0; i<=0xffff; i++) { + avg += dcurve[(int)shCurve[(int)hlCurve[i]]] * histogram[i]; + //sqavg += dcurve[i]*dcurve[i] * histogram[i]; + sum += histogram[i]; + } + avg /= sum; + //sqavg /= sum; + //double stddev = sqrt(sqavg-avg*avg); + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + std::vector contrastcurvePoints; + contrastcurvePoints.push_back((double)((CurveType)NURBS)); + + contrastcurvePoints.push_back(0); //black point. Value in [0 ; 1] range + contrastcurvePoints.push_back(0); //black point. Value in [0 ; 1] range + + contrastcurvePoints.push_back(avg-avg*(0.6-contr/250.0)); //toe point + contrastcurvePoints.push_back(avg-avg*(0.6+contr/250.0)); //value at toe point + + contrastcurvePoints.push_back(avg+(1-avg)*(0.6-contr/250.0)); //shoulder point + contrastcurvePoints.push_back(avg+(1-avg)*(0.6+contr/250.0)); //value at shoulder point + + contrastcurvePoints.push_back(1); // white point + contrastcurvePoints.push_back(1); // value at white point + + Curve* contrastcurve = NULL; + contrastcurve = new Curve (contrastcurvePoints, CURVES_MIN_POLY_POINTS/skip); // Actually, CURVES_MIN_POLY_POINTS = 1000, + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + // apply contrast enhancement + for (int i=0; i<=0xffff; i++) { + //double val = centercontrast (dcurve[i], contr_b, avg); + dcurve[i] = contrastcurve->getVal (dcurve[i]); + } + delete contrastcurve; + } + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + for (int i=0; i<=0xffff; i++) { + float val; + + // apply custom/parametric/NURBS curve, if any + if (tcurve) { + if (outBeforeCCurveHistogram) { + float hval = dcurve[(int)shCurve[(int)(hlCurve[i])]]; + //if (needigamma) + // hval = igamma2 (hval); + int hi = (int)(255.0*CLIPD(hval)); + outBeforeCCurveHistogram[hi]+=histogram[i] ; + } + val = tcurve->getVal (dcurve[i]); + } else { + val = (dcurve[i]); + } + + // if inverse gamma is needed, do it (standard sRGB inverse gamma is applied) + if (needigamma) + val = igamma2 (val); + + outCurve[i] = (int) (65535.0 * val + 0.5); + } + + + delete [] dcurve; + delete tcurve; + delete brightcurve; + if (outBeforeCCurveHistogram) { + //for (int i=0; i<256; i++) printf("i= %d bchist= %d \n",i,outBeforeCCurveHistogram[i]); + } + + } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/rtengine/curves.h b/rtengine/curves.h index 79aafa319..c0290a7a9 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -27,6 +27,8 @@ #define CURVES_MIN_POLY_POINTS 1000 +#define SQR(x) ((x)*(x)) + namespace rtengine { class CurveFactory { @@ -82,17 +84,35 @@ class CurveFactory { if (xx1 || sr<0.001) + return 1-(1-x)*m; + else + return y1+m*(x-x1)-(1-m)*SQR(SQR(1-x/x1)); + } // tone curve base. a: slope (from exp.comp.), b: black, D: max. x value (can be>1), hr,sr: highlight,shadow recovery static inline double basecurve (double x, double a, double b, double D, double hr, double sr) { - double m = a>1 ? b+0.25*(1-b)/a : b+(1-b)/4; - double y = a>1 ? 0.25 : 0.25*a; - double slope = a/(1-b); - if (x<=m) - return b==0 ? x*a : clower (x/m, slope*m/y, sr) * y; - else if (a>1) - return y+(1.0-y)*cupper2((x-m)/(1-m), slope*(1-m)/(1.0-y), hr); - else - return y+(x-m)*slope; + if (b<0) { + double m = 0.5; + double slope = 1+b; + double y = -b+m*slope; + if (x>m) + return y + (x - m)*slope; + else + return y*clower2(x/m, slope*m/y, 2.0-sr); + } else { + double slope = a/(1-b); + double m = a*D>1 ? b/a+(0.25)/slope : b+(1-b)/4; + double y = a*D>1 ? 0.25 : (m-b/a)*slope; + if (x<=m) + return b==0 ? x*slope : clower (x/m, slope*m/y, sr) * y; + else if (a*D>1) + return y+(1.0-y)*cupper2((x-m)/(D-m), slope*(D-m)/(1.0-y), hr); + else + return y+(x-m)*slope; + } } // brightness curve at point x, only positive amount it supported static inline double brightnessbase (double x, double amount) { @@ -137,7 +157,7 @@ class CurveFactory { public: // static void updateCurve3 (int* curve, int* ohistogram, const std::vector& cpoints, double defmul, double ecomp, int black, double hlcompr, double shcompr, double br, double contr, double gamma_, bool igamma, int skip=1); - static void complexCurve (double ecomp, double black, double hlcompr, double shcompr, double br, double contr, double defmul, double gamma_, bool igamma, const std::vector& curvePoints, unsigned int* histogram, int* hlCurve, int* shCurve, int* outCurve, unsigned int* outBeforeCCurveHistogram, int skip=1); + static void complexCurve (double ecomp, double black, double hlcompr, double shcompr, double br, double contr, double defmul, double gamma_, bool igamma, const std::vector& curvePoints, unsigned int* histogram, float* hlCurve, float* shCurve, int* outCurve, unsigned int* outBeforeCCurveHistogram, int skip=1); static void complexsgnCurve (double satclip, double satcompr, double saturation, double colormult, const std::vector& curvePoints, int* outCurve, int skip=1); }; diff --git a/rtengine/dcraw.c b/rtengine/dcraw.c index 9d2619674..db8830c80 100644 --- a/rtengine/dcraw.c +++ b/rtengine/dcraw.c @@ -19,11 +19,11 @@ *If you have not modified dcraw.c in any way, a link to my homepage qualifies as "full source code". - $Revision: 1.437 $ - $Date: 2010/06/27 00:23:33 $ + $Revision: 1.439 $ + $Date: 2010/11/10 19:00:00 $ */ -#define VERSION "9.03" +#define VERSION "9.05" #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -1073,14 +1073,16 @@ void CLASS adobe_dng_load_raw_nc() void CLASS pentax_load_raw() { - ushort bit[2][13], huff[4097]; - int row, col, diff, c, i; + ushort bit[2][15], huff[4097]; + int dep, row, col, diff, c, i; ushort vpred[2][2] = {{0,0},{0,0}}, hpred[2]; fseek (ifp, meta_offset, SEEK_SET); - FORC(13) bit[0][c] = get2(); - FORC(13) bit[1][c] = fgetc(ifp); - FORC(13) + dep = (get2() + 12) & 15; + fseek (ifp, 12, SEEK_CUR); + FORC(dep) bit[0][c] = get2(); + FORC(dep) bit[1][c] = fgetc(ifp); + FORC(dep) for (i=bit[0][c]; i <= ((bit[0][c]+(4096 >> bit[1][c])-1) & 4095); ) huff[++i] = bit[1][c] << 8 | c; huff[0] = 12; @@ -1091,9 +1093,10 @@ void CLASS pentax_load_raw() diff = ljpeg_diff (huff); if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; - if ((unsigned) (row-top_margin) < height && col < width) - BAYER(row-top_margin,col) = hpred[col & 1]; - if (hpred[col & 1] >> 12) derror(); + if ((unsigned) (row-top_margin) < height && + (unsigned) (col-left_margin) < width) + BAYER(row-top_margin,col-left_margin) = hpred[col & 1]; + if (hpred[col & 1] >> tiff_bps) derror(); } } @@ -1801,14 +1804,16 @@ void CLASS nokia_load_raw() { uchar *data, *dp; ushort *pixel, *pix; - int dwide, row, c; + int rev, dwide, row, c; + rev = 3 * (order == 0x4949); dwide = raw_width * 5 / 4; data = (uchar *) malloc (dwide + raw_width*2); merror (data, "nokia_load_raw()"); pixel = (ushort *) (data + dwide); for (row=0; row < raw_height; row++) { - if (fread (data, 1, dwide, ifp) < dwide) derror(); + if (fread (data+dwide, 1, dwide, ifp) < dwide) derror(); + FORC(dwide) data[c] = data[dwide+(c ^ rev)]; for (dp=data, pix=pixel; pix < pixel+raw_width; dp+=5, pix+=4) FORC4 pix[c] = (dp[c] << 2) | (dp[4] >> (c << 1) & 3); if (row < top_margin) @@ -4445,6 +4450,12 @@ void CLASS parse_makernote (int base, int uptag) cam_mul[0] = getreal(type); cam_mul[2] = getreal(type); } + if (tag == 0xd && type == 7 && get2() == 0xaaaa) { + fread (buf97, 1, sizeof buf97, ifp); + i = (uchar *) memmem (buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; + if (i < 70 && buf97[i] < 3) + flip = "065"[buf97[i]]-'0'; + } if (tag == 0x10 && type == 4) unique_id = get4(); if (tag == 0x11 && is_raw && !strncmp(make,"NIKON",5)) { @@ -4508,6 +4519,13 @@ void CLASS parse_makernote (int base, int uptag) fread (buf97, 324, 1, ifp); } } + if (tag == 0xa1 && type == 7) { + type = order; + order = 0x4949; + fseek (ifp, 140, SEEK_CUR); + FORC3 cam_mul[c] = get4(); + order = type; + } if (tag == 0xa4 && type == 3) { fseek (ifp, wbi*48, SEEK_CUR); FORC3 cam_mul[c] = get2(); @@ -4528,8 +4546,8 @@ void CLASS parse_makernote (int base, int uptag) FORC4 cblack[c ^ c >> 1] = get2(); if (tag == 0x201 && len == 4) goto get2_rggb; - if (tag == 0x220 && len == 53) - meta_offset = ftell(ifp) + 14; + if (tag == 0x220 && type == 7) + meta_offset = ftell(ifp); if (tag == 0x401 && type == 4 && len == 4) FORC4 cblack[c ^ c >> 1] = get4(); if (tag == 0xe01) { /* Nikon Capture Note */ @@ -4630,7 +4648,7 @@ void CLASS parse_exif (int base) unsigned kodak, entries, tag, type, len, save, c; double expo; - kodak = !strncmp(make,"EASTMAN",7); + kodak = !strncmp(make,"EASTMAN",7) && tiff_nifds < 3; entries = get2(); while (entries--) { tiff_get (base, &tag, &type, &len, &save); @@ -4804,6 +4822,7 @@ void CLASS parse_kodak_ifd (int base) } void CLASS parse_minolta (int base); +int CLASS parse_tiff (int base); int CLASS parse_tiff_ifd (int base) { @@ -4830,6 +4849,13 @@ int CLASS parse_tiff_ifd (int base) while (entries--) { tiff_get (base, &tag, &type, &len, &save); switch (tag) { + case 5: width = get2(); break; + case 6: height = get2(); break; + case 7: width += get2(); break; + case 9: filters = get2(); break; + case 14: case 15: case 16: + maximum = get2(); + break; case 17: case 18: if (type == 3 && len == 1) cam_mul[(tag-17)*2] = get2() / 256.0; @@ -4884,7 +4910,7 @@ int CLASS parse_tiff_ifd (int base) load_raw = &CLASS panasonic_load_raw; load_flags = 0x2008; case 273: /* StripOffset */ - case 513: + case 513: /* JpegIFOffset */ case 61447: tiff_ifd[ifd].offset = get4()+base; if (!tiff_ifd[ifd].bps) { @@ -4897,6 +4923,9 @@ int CLASS parse_tiff_ifd (int base) tiff_ifd[ifd].samples = jh.clrs; if (!(jh.sraw || (jh.clrs & 1))) tiff_ifd[ifd].width *= jh.clrs; + i = order; + parse_tiff (tiff_ifd[ifd].offset + 12); + order = i; } } break; @@ -5251,21 +5280,26 @@ guess_cfa_pc: return 0; } -void CLASS parse_tiff (int base) +int CLASS parse_tiff (int base) { - int doff, max_samp=0, raw=-1, thm=-1, i; - struct jhead jh; + int doff; fseek (ifp, base, SEEK_SET); order = get2(); - if (order != 0x4949 && order != 0x4d4d) return; + if (order != 0x4949 && order != 0x4d4d) return 0; get2(); - memset (tiff_ifd, 0, sizeof tiff_ifd); - tiff_nifds = 0; while ((doff = get4())) { fseek (ifp, doff+base, SEEK_SET); if (parse_tiff_ifd (base)) break; } + return 1; +} + +void CLASS apply_tiff() +{ + int max_samp=0, raw=-1, thm=-1, i; + struct jhead jh; + thumb_misc = 16; if (thumb_offset) { fseek (ifp, thumb_offset, SEEK_SET); @@ -5292,8 +5326,8 @@ void CLASS parse_tiff (int base) raw = i; } } - fuji_width *= (raw_width+1)/2; - if (tiff_ifd[0].flip) tiff_flip = tiff_ifd[0].flip; + for (i=tiff_nifds; i--; ) + if (tiff_ifd[i].flip) tiff_flip = tiff_ifd[i].flip; if (raw >= 0 && !load_raw) switch (tiff_compress) { case 0: case 1: @@ -5791,7 +5825,7 @@ int CLASS parse_jpeg (int offset) hlen = get4(); if (get4() == 0x48454150) /* "HEAP" */ parse_ciff (save+hlen, len-hlen); - parse_tiff (save+6); + if (parse_tiff (save+6)) apply_tiff(); fseek (ifp, save+len, SEEK_SET); } return 1; @@ -6040,6 +6074,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 6071,-747,-856,-7653,15365,2441,-2025,2553,7315 } }, { "Canon EOS 50D", 0, 0x3d93, { 4920,616,-593,-6493,13964,2784,-1774,3178,7005 } }, + { "Canon EOS 60D", 0, 0x2ff7, + { 6719,-994,-925,-4408,12426,2211,-887,2129,6051 } }, { "Canon EOS 300D", 0, 0xfa0, { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, { "Canon EOS 350D", 0, 0xfff, @@ -6073,7 +6109,7 @@ void CLASS adobe_coeff (const char *make, const char *model) { "Canon EOS", 0, 0, { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, { "Canon PowerShot A530", 0, 0, - { 0 } }, /* don't want the A5 matrix */ + { 0 } }, /* don't want the A5 matrix */ { "Canon PowerShot A50", 0, 0, { -5300,9846,1776,3436,684,3939,-5540,9879,6200,-1404,11175,217 } }, { "Canon PowerShot A5", 0, 0, @@ -6082,6 +6118,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 11093,-3906,-1028,-5047,12492,2879,-1003,1750,5561 } }, { "Canon PowerShot G11", 0, 0, { 12177,-4817,-1069,-1612,9864,2049,-98,850,4471 } }, + { "Canon PowerShot G12", 0, 0, + { 0 } }, { "Canon PowerShot G1", 0, 0, { -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } }, { "Canon PowerShot G2", 0, 0, @@ -6194,8 +6232,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 21461,-10807,-1441,-2332,10599,1999,289,875,7703 } }, { "FUJIFILM IS Pro", 0, 0, { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } }, - { "FUJIFILM FinePix HS10 HS11", 0, 0xf68, /* DJC */ - { 12164,-3169,-1662,-1020,10358,662,-224,2108,3106 } }, + { "FUJIFILM FinePix HS10 HS11", 0, 0xf68, + { 12440,-3954,-1183,-1123,9674,1708,-83,1614,4086 } }, { "Imacon Ixpress", 0, 0, /* DJC */ { 7025,-1415,-704,-5188,13765,1424,-1248,2742,6038 } }, { "KODAK NC2000", 0, 0, @@ -6318,6 +6356,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, { "NIKON D60", 0, 0, { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } }, + { "NIKON D7000", 0, 0, /* DJC */ + { 6629,-2254,-2,-3468,9387,4081,-760,2102,7574 } }, { "NIKON D700", 0, 0, { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } }, { "NIKON D70", 0, 0, @@ -6334,6 +6374,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 13142,-4152,-1596,-4655,12374,2282,-1769,2696,6711} }, { "NIKON E2500", 0, 0, { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, + { "NIKON E3200", 0, 0, /* DJC */ + { 9846,-2085,-1019,-3278,11109,2170,-774,2134,5745 } }, { "NIKON E4300", 0, 0, /* copied from Minolta DiMAGE Z2 */ { 11280,-3564,-1370,-4655,12374,2282,-1423,2168,5396 } }, { "NIKON E4500", 0, 0, @@ -6390,6 +6432,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 8785,-2529,-1033,-7639,15624,2112,-1783,2300,7817 } }, { "OLYMPUS E-520", 0, 0xfd2, { 8344,-2322,-1020,-7596,15635,2048,-1748,2269,7287 } }, + { "OLYMPUS E-5", 0, 0, /* DJC */ + { 10033,-4067,-600,-3784,10494,3291,-923,2594,7744 } }, { "OLYMPUS E-600", 0, 0xfaf, { 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } }, { "OLYMPUS E-620", 0, 0xfaf, @@ -6438,43 +6482,67 @@ void CLASS adobe_coeff (const char *make, const char *model) { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } }, { "PENTAX K-x", 0, 0, { 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } }, + { "PENTAX K-r", 0, 0, /* Pentax DNG */ + { 21746,-6684,-1521,-10014,26601,6573,-1920,3062,19415 } }, + { "PENTAX K-5", 0, 0, /* Pentax DNG */ + { 19331,-5842,-2589,-9103,28027,4285,-2216,3884,14767 } }, { "PENTAX K-7", 0, 0, { 9142,-2947,-678,-8648,16967,1663,-2224,2898,8615 } }, - { "Panasonic DMC-FZ8", 0, 0xf7f, + { "PENTAX 645D", 0, 0x3e00, + { 10646,-3593,-1158,-3329,11699,1831,-667,2874,6287 } }, + { "Panasonic DMC-FZ8", 0, 0, { 8986,-2755,-802,-6341,13575,3077,-1476,2144,6379 } }, { "Panasonic DMC-FZ18", 0, 0, { 9932,-3060,-935,-5809,13331,2753,-1267,2155,5575 } }, - { "Panasonic DMC-FZ28", 15, 0xfff, + { "Panasonic DMC-FZ28", 15, 0, { 10109,-3488,-993,-5412,12812,2916,-1305,2140,5543 } }, - { "Panasonic DMC-FZ30", 0, 0xf94, + { "Panasonic DMC-FZ30", 0, 0, { 10976,-4029,-1141,-7918,15491,2600,-1670,2071,8246 } }, - { "Panasonic DMC-FZ35", 147, 0xfff, + { "Panasonic DMC-FZ3", 143, 0, { 9938,-2780,-890,-4604,12393,2480,-1117,2304,4620 } }, - { "Panasonic DMC-FZ50", 0, 0xfff, /* aka "LEICA V-LUX1" */ + { "Panasonic DMC-FZ40", 143, 0, + { 13639,-5535,-1371,-1698,9633,2430,316,1152,4108 } }, + { "Panasonic DMC-FZ50", 0, 0, { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, - { "Panasonic DMC-L10", 15, 0xf96, + { "LEICA V-LUX1", 0, 0, + { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, + { "Panasonic DMC-L10", 15, 0, { 8025,-1942,-1050,-7920,15904,2100,-2456,3005,7039 } }, - { "Panasonic DMC-L1", 0, 0x3dff, /* aka "LEICA DIGILUX 3" */ + { "Panasonic DMC-L1", 0, 0, { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, - { "Panasonic DMC-LC1", 0, 0, /* aka "LEICA DIGILUX 2" */ + { "LEICA DIGILUX 3", 0, 0, + { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, + { "Panasonic DMC-LC1", 0, 0, { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, - { "Panasonic DMC-LX1", 0, 0x3dfc, /* aka "LEICA D-LUX2" */ + { "LEICA DIGILUX 2", 0, 0, + { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, + { "Panasonic DMC-LX1", 0, 0, { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, - { "Panasonic DMC-LX2", 0, 0, /* aka "LEICA D-LUX3" */ + { "LEICA D-LUX2", 0, 0, + { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, + { "Panasonic DMC-LX2", 0, 0, { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, - { "Panasonic DMC-LX3", 15, 0xfff, /* aka "LEICA D-LUX4" */ + { "LEICA D-LUX3", 0, 0, + { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, + { "Panasonic DMC-LX3", 15, 0, { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, - { "Panasonic DMC-FX150", 15, 0xfff, + { "LEICA D-LUX4", 15, 0, + { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, + { "Panasonic DMC-LX5", 143, 0, + { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, + { "Panasonic DMC-FZ100", 143, 0, + { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } }, + { "Panasonic DMC-FX150", 15, 0, { 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } }, { "Panasonic DMC-G10", 0, 0, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, - { "Panasonic DMC-G1", 15, 0xfff, + { "Panasonic DMC-G1", 15, 0, { 8199,-2065,-1056,-8124,16156,2033,-2458,3022,7220 } }, - { "Panasonic DMC-G2", 15, 0xf3c, + { "Panasonic DMC-G2", 15, 0, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, - { "Panasonic DMC-GF1", 15, 0xf92, + { "Panasonic DMC-GF1", 15, 0, { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, - { "Panasonic DMC-GH1", 15, 0xf92, + { "Panasonic DMC-GH1", 15, 0, { 6299,-1466,-532,-6535,13852,2969,-2331,3112,5984 } }, { "Phase One H 20", 0, 0, /* DJC */ { 1313,1855,-109,-6715,15908,808,-327,1840,6020 } }, @@ -6486,9 +6554,15 @@ void CLASS adobe_coeff (const char *make, const char *model) { 5053,-24,-117,-5684,14076,1702,-2619,4492,5849 } }, { "Phase One P65", 0, 0, { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } }, + { "SAMSUNG EX1", 0, 0x3e00, + { 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } }, + { "SAMSUNG NX10", 20, 0xea6, + { 10332,-3234,-1168,-6111,14639,1520,-1352,2647,8331 } }, + { "SAMSUNG WB2000", 0, 0xfff, + { 0 } }, { "SAMSUNG GX-1", 0, 0, { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, - { "SAMSUNG S85", 0, 0, /* DJC */ + { "SAMSUNG S85", 0, 0xffff, /* DJC */ { 11885,-3968,-1473,-4214,12299,1916,-835,1655,5549 } }, { "Sinar", 0, 0, /* DJC */ { 16442,-2956,-2422,-2877,12128,750,-1136,6066,4559 } }, @@ -6523,7 +6597,13 @@ void CLASS adobe_coeff (const char *make, const char *model) { "SONY NEX-3", 138, 0, /* DJC */ { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } }, { "SONY NEX-5", 116, 0, /* DJC */ - { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } } + { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } }, + { "SONY NEX", 128, 0, /* Adobe's matrix */ + { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } }, + { "SONY SLT-A33", 128, 0, + { 6069,-1221,-366,-5221,12779,2734,-1024,2066,6834 } }, + { "SONY SLT-A55", 128, 0, + { 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } } }; double cam_xyz[4][3]; char name[130]; @@ -6616,6 +6696,30 @@ void CLASS identify() char head[32], *cp; int hlen, flen, fsize, zero_fsize=1, i, c, is_canon; struct jhead jh; + short pana[][6] = { + { 3130, 1743, 4, 0, -6, 0 }, + { 3130, 2055, 4, 0, -6, 0 }, + { 3130, 2319, 4, 0, -6, 0 }, + { 3170, 2103, 18, 0,-42, 20 }, + { 3170, 2367, 18, 13,-42,-21 }, + { 3177, 2367, 0, 0, -1, 0 }, + { 3304, 2458, 0, 0, -1, 0 }, + { 3330, 2463, 9, 0, -5, 0 }, + { 3330, 2479, 9, 0,-17, 4 }, + { 3370, 1899, 15, 0,-44, 20 }, + { 3370, 2235, 15, 0,-44, 20 }, + { 3370, 2511, 15, 10,-44,-21 }, + { 3690, 2751, 3, 0, -8, -3 }, + { 3710, 2751, 0, 0, -3, 0 }, + { 3724, 2450, 0, 0, 0, -2 }, + { 3770, 2487, 17, 0,-44, 19 }, + { 3770, 2799, 17, 15,-44,-19 }, + { 3880, 2170, 6, 0, -6, 0 }, + { 4060, 3018, 0, 0, 0, -2 }, + { 4290, 2391, 3, 0, -8, -1 }, + { 4330, 2439, 17, 15,-44,-19 }, + { 4508, 2962, 0, 0, -3, -4 }, + { 4508, 3330, 0, 0, -3, -6 } }; static const struct { int fsize; char make[12], model[19], withjpeg; @@ -6653,13 +6757,14 @@ void CLASS identify() { 6573120, "Canon", "PowerShot A610" ,0 }, { 9219600, "Canon", "PowerShot A620" ,0 }, { 9243240, "Canon", "PowerShot A470" ,0 }, - { 10341600, "Canon", "PowerShot A720" ,0 }, + { 10341600, "Canon", "PowerShot A720 IS",0 }, { 10383120, "Canon", "PowerShot A630" ,0 }, { 12945240, "Canon", "PowerShot A640" ,0 }, { 15636240, "Canon", "PowerShot A650" ,0 }, { 5298000, "Canon", "PowerShot SD300" ,0 }, { 7710960, "Canon", "PowerShot S3 IS" ,0 }, { 15467760, "Canon", "PowerShot SX110 IS",0 }, + { 15534576, "Canon", "PowerShot SX120 IS",0 }, { 18653760, "Canon", "PowerShot SX20 IS",0 }, { 5939200, "OLYMPUS", "C770UZ" ,0 }, { 1581060, "NIKON", "E900" ,1 }, /* or E900s,E910 */ @@ -6711,6 +6816,8 @@ void CLASS identify() maximum = height = width = top_margin = left_margin = 0; cdesc[0] = desc[0] = artist[0] = make[0] = model[0] = model2[0] = 0; iso_speed = shutter = aperture = focal_len = unique_id = 0; + tiff_nifds = 0; + memset (tiff_ifd, 0, sizeof tiff_ifd); memset (gpsdata, 0, sizeof gpsdata); memset (cblack, 0, sizeof cblack); memset (white, 0, sizeof white); @@ -6741,14 +6848,12 @@ void CLASS identify() if ((cp = (char *) memmem (head, 32, "MMMM", 4)) || (cp = (char *) memmem (head, 32, "IIII", 4))) { parse_phase_one (cp-head); - if (cp-head) parse_tiff(0); + if (cp-head && parse_tiff(0)) apply_tiff(); } else if (order == 0x4949 || order == 0x4d4d) { if (!memcmp (head+6,"HEAPCCDR",8)) { data_offset = hlen; parse_ciff (hlen, flen - hlen); - } else { - parse_tiff(0); - } + } else if (parse_tiff(0)) apply_tiff(); } else if (!memcmp (head,"\xff\xd8\xff\xe1",4) && !memcmp (head+6,"Exif",4)) { fseek (ifp, 4, SEEK_SET); @@ -6788,6 +6893,7 @@ void CLASS identify() fseek (ifp, 100, SEEK_SET); parse_tiff (data_offset = get4()); parse_tiff (thumb_offset+12); + apply_tiff(); } else if (!memcmp (head,"RIFF",4)) { fseek (ifp, 0, SEEK_SET); parse_riff(); @@ -6802,6 +6908,18 @@ void CLASS identify() raw_height = get2(); load_raw = &CLASS nokia_load_raw; filters = 0x61616161; + } else if (!memcmp (head,"NOKIARAW",8)) { + strcpy (make, "NOKIA"); + strcpy (model, "X2"); + order = 0x4949; + fseek (ifp, 300, SEEK_SET); + data_offset = get4(); + i = get4(); + width = get2(); + height = get2(); + data_offset += i - width * 5 / 4 * height; + load_raw = &CLASS nokia_load_raw; + filters = 0x61616161; } else if (!memcmp (head,"DSC-Image",9)) parse_rollei(); else if (!memcmp (head,"PWAD",4)) @@ -6847,17 +6965,24 @@ void CLASS identify() if (!height) height = raw_height; if (!width) width = raw_width; if (fuji_width) { + fuji_width = (raw_width+1)/2; width = height + fuji_width; height = width - 1; pixel_aspect = 1; } if (height == 2624 && width == 3936) /* Pentax K10D and Samsung GX10 */ { height = 2616; width = 3896; } - if (height == 3136 && width == 4864) /* Pentax K20D */ - { height = 3124; width = 4688; } - if (height == 3136 && width == 4736) /* Pentax K-7 */ - { height = 3122; width = 4684; - top_margin = 2; filters = 0x16161616; } + if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */ + { height = 3124; width = 4688; filters = 0x16161616; } + if (!strcmp(model,"K-r") || !strcmp(model,"K-x")) + { width = 4309; filters = 0x16161616; } + if (!strcmp(model,"K-5")) + { left_margin = 10; width = 4950; filters = 0x16161616; } + if (!strcmp(model,"K-7")) + { height = 3122; width = 4684; filters = 0x16161616; top_margin = 2; } + if (!strcmp(model,"645D")) + { height = 5502; width = 7328; filters = 0x61616161; top_margin = 29; + left_margin = 48; } if (height == 3014 && width == 4096) /* Ricoh GX200 */ width = 4014; if (dng_version) { @@ -6978,7 +7103,7 @@ void CLASS identify() top_margin = 6; left_margin = 12; goto canon_a5; - } else if (!strcmp(model,"PowerShot A720")) { + } else if (!strcmp(model,"PowerShot A720 IS")) { height = 2472; width = 3298; raw_height = 2480; @@ -7032,6 +7157,17 @@ canon_a5: load_raw = &CLASS packed_load_raw; load_flags = 40; zero_is_bad = 1; + } else if (!strcmp(model,"PowerShot SX120 IS")) { + height = 2742; + width = 3664; + raw_height = 2778; + raw_width = 3728; + top_margin = 18; + left_margin = 16; + filters = 0x49494949; + load_raw = &CLASS packed_load_raw; + load_flags = 40; + zero_is_bad = 1; } else if (!strcmp(model,"PowerShot SX20 IS")) { height = 3024; width = 4032; @@ -7105,6 +7241,10 @@ canon_a5: width = 3684; top_margin = 16; left_margin = 8; + if (unique_id > 0x2720000) { + top_margin = 12; + left_margin = 52; + } } else if (is_canon && raw_width == 3944) { height = 2602; width = 3908; @@ -7204,6 +7344,11 @@ canon_cr2: left_margin = 2; } else if (!strcmp(model,"D5000")) { width -= 42; + } else if (!strcmp(model,"D7000")) { + width -= 44; + } else if (!strcmp(model,"D3100")) { + width -= 28; + left_margin = 6; } else if (!strncmp(model,"D40",3) || !strncmp(model,"D50",3) || !strncmp(model,"D70",3)) { @@ -7228,7 +7373,7 @@ canon_cr2: else width -= 8; } else if (!strncmp(model,"D300",4)) { width -= 32; - } else if (!strcmp(model,"COOLPIX P6000")) { + } else if (!strncmp(model,"COOLPIX P",9)) { load_flags = 24; filters = 0x94949494; } else if (fsize == 1581060) { @@ -7402,8 +7547,6 @@ konica_400z: data_error = -1; } else if (!strcmp(model,"*ist DS")) { height -= 2; - } else if (!strcmp(model,"K20D")) { - filters = 0x16161616; } else if (!strcmp(model,"K-x")) { width = 4309; filters = 0x16161616; @@ -7445,7 +7588,6 @@ konica_400z: raw_width = fsize/height/2; order = 0x4d4d; load_raw = &CLASS unpacked_load_raw; - maximum = 0xffff; } else if (!strcmp(model,"NX10")) { height -= top_margin = 4; width -= 2 * (left_margin = 8); @@ -7458,7 +7600,11 @@ konica_400z: width = 3668; top_margin = 8; } - maximum = 0x3e00; + } else if (!strcmp(model,"WB2000")) { + order = 0x4949; + height -= 3; + width -= 10; + top_margin = 2; } else if (fsize == 20487168) { height = 2808; width = 3648; @@ -7556,6 +7702,12 @@ wb550: top_margin = 4; left_margin = 7; filters = 0x61616161; + } else if (raw_width == 7410) { + height = 5502; + width = 7328; + top_margin = 4; + left_margin = 41; + filters = 0x61616161; } else if (raw_width == 4090) { strcpy (model, "V96C"); height -= (top_margin = 6); @@ -7613,109 +7765,23 @@ wb550: filters = 0x16161616; } } else if (!strcmp(make,"LEICA") || !strcmp(make,"Panasonic")) { - if ((flen - data_offset) / (width*8/7) == height) + if ((flen - data_offset) / (raw_width*8/7) == raw_height) load_raw = &CLASS panasonic_load_raw; if (!load_raw) { load_raw = &CLASS unpacked_load_raw; load_flags = 4; } zero_is_bad = 1; - switch (width) { - case 2568: - adobe_coeff ("Panasonic","DMC-LC1"); break; - case 3130: - left_margin = -14; - case 3170: - left_margin += 18; - width = 3096; - if (height > 2326) { - height = 2326; - top_margin = 13; - filters = 0x49494949; - } - adobe_coeff ("Panasonic","DMC-FZ8"); break; - case 3213: - width -= 27; - case 3177: - width -= 10; - load_flags = 2; - filters = 0x49494949; - adobe_coeff ("Panasonic","DMC-L1"); break; - case 3304: - width -= 17; - adobe_coeff ("Panasonic","DMC-FZ30"); break; - case 3330: - width += 43; - left_margin = -6; - maximum = 0xf7f; - case 3370: - width -= 82; - left_margin += 15; - if (height > 2480) - height = 2480 - (top_margin = 10); - filters = 0x49494949; - adobe_coeff ("Panasonic","DMC-FZ18"); break; - case 3690: - height -= 2; - left_margin = -14; - maximum = 0xf7f0; - case 3770: - width = 3672; - if (--height == 2798 && (height = 2760)) - top_margin = 15; - else filters = 0x49494949; - left_margin += 17; - adobe_coeff ("Panasonic","DMC-FZ50"); break; - case 3710: - width = 3682; - filters = 0x49494949; - adobe_coeff ("Panasonic","DMC-L10"); break; - case 3724: - width -= 14; - if (height == 2450) height -= 2; - case 3836: - width -= 42; -lx3: filters = 0x16161616; - if (make[0] != 'P') - adobe_coeff ("Panasonic","DMC-LX3"); - break; - case 3880: - width -= 22; - left_margin = 6; - load_flags = 2; - adobe_coeff ("Panasonic","DMC-LX1"); break; - case 4060: - width = 3982; - if (height == 2250) goto lx3; - width = 4018; - filters = 0x16161616; - if (!strncmp(model,"DMC-FZ3",7)) { - height -= 2; - adobe_coeff ("Panasonic","DMC-FZ35"); break; - } - filters = 0x49494949; - break; - case 4172: - case 4396: - width -= 28; - filters = 0x49494949; - adobe_coeff ("Panasonic","DMC-GH1"); break; - case 4290: - height += 38; - left_margin = -14; - filters = 0x49494949; - case 4330: - width = 4248; - if ((height -= 39) == 2400) - top_margin = 15; - left_margin += 17; - adobe_coeff ("Panasonic","DMC-LX2"); break; - case 4508: - height -= 6; - width = 4429; - filters = 0x16161616; - adobe_coeff ("Panasonic","DMC-FX150"); break; - } + if ((height += 12) > raw_height) height = raw_height; + for (i=0; i < sizeof pana / sizeof *pana; i++) + if (raw_width == pana[i][0] && raw_height == pana[i][1]) { + left_margin = pana[i][2]; + top_margin = pana[i][3]; + width += pana[i][4]; + height += pana[i][5]; + } + filters = 0x01010101 * (uchar) "\x94\x61\x49\x16" + [((filters-1) ^ (left_margin & 1) ^ (top_margin << 1)) & 3]; } else if (!strcmp(model,"C770UZ")) { height = 1718; width = 2304; diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index ebe1073ec..a0ab14f7a 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -6,9 +6,6 @@ /*RT*/#define NO_JPEG /*RT*/#define LOCALTIME /*RT*/#define DJGPP -/*RT*/#include - -#include "myfile.h" /* dcraw.c -- Dave Coffin's raw photo decoder @@ -31,11 +28,11 @@ *If you have not modified dcraw.c in any way, a link to my homepage qualifies as "full source code". - $Revision: 1.437 $ - $Date: 2010/06/27 00:23:33 $ + $Revision: 1.439 $ + $Date: 2010/11/10 19:00:00 $ */ -#define VERSION "9.03" +#define VERSION "9.05" #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -58,9 +55,7 @@ NO_LCMS disables the "-p" option. */ #ifndef NO_JPEG -/*RT*/extern "C" { -/*RT*/#include -/*RT*/} +#include #endif #ifndef NO_LCMS #include @@ -110,89 +105,65 @@ typedef unsigned long long UINT64; typedef unsigned char uchar; typedef unsigned short ushort; -// RT specify thread local storage -#ifdef __GNUC__ -#define THREAD_LOCAL static __thread -#define THREAD_LOCK -#else -#define THREAD_LOCAL static -#define THREAD_LOCK Glib::Mutex::Lock locker(*dcrMutex); -#endif - -// patch for gcc<=4.2 on OSX -#ifdef __APPLE__ -#define GCC_VERSION (__GNUC__ * 10000 \ - + __GNUC_MINOR__ * 100 \ - + __GNUC_PATCHLEVEL__) -#if GCC_VERSION < 40300 -#undef THREAD_LOCAL -#undef THREAD_LOCK -#define THREAD_LOCAL static -#define THREAD_LOCK Glib::Mutex::Lock locker(*dcrMutex); -#endif -#endif - - +#include "dcraw.h" /* All global variables are defined here, and all functions that access them are prefixed with "CLASS". Note that a thread-safe C++ class cannot have non-const static local variables. - */ -/*RT*/THREAD_LOCAL int ciff_base, ciff_len, exif_base, pre_filters; -/*RT*/THREAD_LOCAL IMFILE *ifp; -THREAD_LOCAL FILE * ofp; -THREAD_LOCAL short order; -THREAD_LOCAL const char *ifname; -THREAD_LOCAL char *meta_data; -THREAD_LOCAL char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; -THREAD_LOCAL float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len; -THREAD_LOCAL time_t timestamp; -THREAD_LOCAL unsigned shot_order, kodak_cbpp, filters, exif_cfa, unique_id; -THREAD_LOCAL off_t strip_offset, data_offset; -THREAD_LOCAL off_t thumb_offset, meta_offset, profile_offset; -THREAD_LOCAL unsigned thumb_length, meta_length, profile_length; -THREAD_LOCAL unsigned thumb_misc, *oprof, fuji_layout, shot_select=0, multi_out=0; -THREAD_LOCAL unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress; -THREAD_LOCAL unsigned black, cblack[8], maximum, mix_green, raw_color, zero_is_bad; -THREAD_LOCAL unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error; -THREAD_LOCAL unsigned tile_width, tile_length, gpsdata[32], load_flags; -THREAD_LOCAL ushort raw_height, raw_width, height, width, top_margin, left_margin; -THREAD_LOCAL ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height; -THREAD_LOCAL int flip, tiff_flip, colors; -THREAD_LOCAL double pixel_aspect, aber[4]={1,1,1,1}, gamm[6]={ 0.45,4.5,0,0,0,0 }; -THREAD_LOCAL ushort (*image)[4], white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4]; -THREAD_LOCAL float bright=1, user_mul[4]={0,0,0,0}, threshold=0; -THREAD_LOCAL int half_size=0, four_color_rgb=0, document_mode=0, highlight=0; -THREAD_LOCAL int verbose=0, use_auto_wb=0, use_camera_wb=0, use_camera_matrix=-1; -THREAD_LOCAL int output_color=1, output_bps=8, output_tiff=0, med_passes=0; -THREAD_LOCAL int no_auto_bright=0; -THREAD_LOCAL unsigned greybox[4] = { 0, 0, UINT_MAX, UINT_MAX }; -THREAD_LOCAL float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; -static const double xyz_rgb[3][3] = { /* XYZ from RGB */ + +FILE *ifp, *ofp; +short order; +const char *ifname; +char *meta_data; +char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; +float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len; +time_t timestamp; +unsigned shot_order, kodak_cbpp, filters, exif_cfa, unique_id; +off_t strip_offset, data_offset; +off_t thumb_offset, meta_offset, profile_offset; +unsigned thumb_length, meta_length, profile_length; +unsigned thumb_misc, *oprof, fuji_layout, shot_select=0, multi_out=0; +unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress; +unsigned black, cblack[8], maximum, mix_green, raw_color, zero_is_bad; +unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error; +unsigned tile_width, tile_length, gpsdata[32], load_flags; +ushort raw_height, raw_width, height, width, top_margin, left_margin; +ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height; +int flip, tiff_flip, colors; +double pixel_aspect, aber[4]={1,1,1,1}, gamm[6]={ 0.45,4.5,0,0,0,0 }; +ushort (*image)[4], white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4]; +float bright=1, user_mul[4]={0,0,0,0}, threshold=0; +int half_size=0, four_color_rgb=0, document_mode=0, highlight=0; +int verbose=0, use_auto_wb=0, use_camera_wb=0, use_camera_matrix=-1; +int output_color=1, output_bps=8, output_tiff=0, med_passes=0; +int no_auto_bright=0; +unsigned greybox[4] = { 0, 0, UINT_MAX, UINT_MAX }; +float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];*/ +const double xyz_rgb[3][3] = { // XYZ from RGB { 0.412453, 0.357580, 0.180423 }, { 0.212671, 0.715160, 0.072169 }, { 0.019334, 0.119193, 0.950227 } }; -static const float d65_white[3] = { 0.950456, 1, 1.088754 }; -THREAD_LOCAL int histogram[4][0x2000]; -THREAD_LOCAL void (*write_thumb)(), (*write_fun)(); -THREAD_LOCAL void (*load_raw)(), (*thumb_load_raw)(); -THREAD_LOCAL jmp_buf failure; +const float d65_white[3] = { 0.950456, 1, 1.088754 }; +/*int histogram[4][0x2000]; +void (*write_thumb)(), (*write_fun)(); +void (*load_raw)(), (*thumb_load_raw)(); +jmp_buf failure; -THREAD_LOCAL struct decode { +struct decode { struct decode *branch[2]; int leaf; } first_decode[2048], *second_decode, *free_decode; -THREAD_LOCAL struct tiff_ifd { +struct tiff_ifd { int width, height, bps, comp, phint, offset, flip, samples, bytes; } tiff_ifd[10]; -THREAD_LOCAL struct ph1 { +struct ph1 { int format, key_off, black, black_off, split_col, tag_21a; float tag_210; } ph1; - -#define CLASS +*/ +#define CLASS DCraw:: #define FORC(cnt) for (c=0; c < cnt; c++) #define FORC3 FORC(3) @@ -576,10 +547,10 @@ int CLASS canon_s2is() getbits(-1) initializes the buffer getbits(n) where 0 <= n <= 25 returns an n-bit integer */ -unsigned CLASS getbithuff (int nbits, ushort *huff) +unsigned CLASS getbithuff_t::operator() (int nbits, ushort *huff) { - THREAD_LOCAL unsigned bitbuf=0; - THREAD_LOCAL int vbits=0, reset=0; +/*RT static unsigned bitbuf=0; */ +/*RT static int vbits=0, reset=0; */ unsigned c; if (nbits == -1) @@ -1113,14 +1084,16 @@ void CLASS adobe_dng_load_raw_nc() void CLASS pentax_load_raw() { - ushort bit[2][13], huff[4097]; - int row, col, diff, c, i; + ushort bit[2][15], huff[4097]; + int dep, row, col, diff, c, i; ushort vpred[2][2] = {{0,0},{0,0}}, hpred[2]; fseek (ifp, meta_offset, SEEK_SET); - FORC(13) bit[0][c] = get2(); - FORC(13) bit[1][c] = fgetc(ifp); - FORC(13) + dep = (get2() + 12) & 15; + fseek (ifp, 12, SEEK_CUR); + FORC(dep) bit[0][c] = get2(); + FORC(dep) bit[1][c] = fgetc(ifp); + FORC(dep) for (i=bit[0][c]; i <= ((bit[0][c]+(4096 >> bit[1][c])-1) & 4095); ) huff[++i] = bit[1][c] << 8 | c; huff[0] = 12; @@ -1131,9 +1104,10 @@ void CLASS pentax_load_raw() diff = ljpeg_diff (huff); if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; - if ((unsigned) (row-top_margin) < height && col < width) - BAYER(row-top_margin,col) = hpred[col & 1]; - if (hpred[col & 1] >> 12) derror(); + if ((unsigned) (row-top_margin) < height && + (unsigned) (col-left_margin) < width) + BAYER(row-top_margin,col-left_margin) = hpred[col & 1]; + if (hpred[col & 1] >> tiff_bps) derror(); } } @@ -1323,7 +1297,7 @@ void CLASS fuji_load_raw() free (pixel); } -void CLASS jpeg_thumb(); +/*RT void CLASS jpeg_thumb(); */ void CLASS ppm_thumb() { @@ -1598,10 +1572,10 @@ void CLASS phase_one_load_raw() phase_one_correct(); } -unsigned CLASS ph1_bithuff (int nbits, ushort *huff) +unsigned CLASS ph1_bithuff_t::operator() (int nbits, ushort *huff) { - THREAD_LOCAL UINT64 bitbuf=0; - THREAD_LOCAL int vbits=0; +/*RT static UINT64 bitbuf=0; */ +/*RT static int vbits=0; */ unsigned c; if (nbits == -1) @@ -1727,7 +1701,7 @@ void CLASS leaf_hdr_load_raw() } } -void CLASS unpacked_load_raw(); +/*RT void CLASS unpacked_load_raw(); */ void CLASS sinar_4shot_load_raw() { @@ -1841,14 +1815,16 @@ void CLASS nokia_load_raw() { uchar *data, *dp; ushort *pixel, *pix; - int dwide, row, c; + int rev, dwide, row, c; + rev = 3 * (order == 0x4949); dwide = raw_width * 5 / 4; data = (uchar *) malloc (dwide + raw_width*2); merror (data, "nokia_load_raw()"); pixel = (ushort *) (data + dwide); for (row=0; row < raw_height; row++) { - if (fread (data, 1, dwide, ifp) < dwide) derror(); + if (fread (data+dwide, 1, dwide, ifp) < dwide) derror(); + FORC(dwide) data[c] = data[dwide+(c ^ rev)]; for (dp=data, pix=pixel; pix < pixel+raw_width; dp+=5, pix+=4) FORC4 pix[c] = (dp[c] << 2) | (dp[4] >> (c << 1) & 3); if (row < top_margin) @@ -1861,10 +1837,10 @@ void CLASS nokia_load_raw() maximum = 0x3ff; } -unsigned CLASS pana_bits (int nbits) +unsigned CLASS pana_bits_t::operator() (int nbits) { - THREAD_LOCAL uchar buf[0x4000]; - THREAD_LOCAL int vbits; +/*RT static uchar buf[0x4000]; */ +/*RT static int vbits;*/ int byte; if (!nbits) return vbits=0; @@ -2153,7 +2129,7 @@ void CLASS kodak_jpeg_load_raw() {} METHODDEF(boolean) fill_input_buffer (j_decompress_ptr cinfo) { - THREAD_LOCAL uchar jpeg_buffer[4096]; +/*RT static uchar jpeg_buffer[4096]; */ size_t nbytes; nbytes = fread (jpeg_buffer, 1, 4096, ifp); @@ -2429,9 +2405,9 @@ void CLASS kodak_thumb_load_raw() maximum = (1 << (thumb_misc & 31)) - 1; } -void CLASS sony_decrypt (unsigned *data, int len, int start, int key) +void CLASS sony_decrypt_t::operator()(unsigned *data, int len, int start, int key) { - THREAD_LOCAL unsigned pad[128], p; +/*RT static unsigned pad[128], p;*/ if (start) { for (p=0; p < 4; p++) @@ -2678,7 +2654,7 @@ void CLASS smal_v9_load_raw() void CLASS foveon_decoder (unsigned size, unsigned code) { - THREAD_LOCAL unsigned huff[1024]; +/*RT static unsigned huff[1024];*/ struct decode *cur; int i, len; @@ -3800,18 +3776,15 @@ void CLASS pre_interpolate() } } if (filters && colors == 3) { - if ((mix_green = four_color_rgb)) - colors++; - else { - for (row = FC(1,0) >> 1; row < height; row += 2) - for (col = FC(row,1) & 1; col < width; col += 2) - image[row * width + col][1] = image[row * width + col][3]; - /*RT*/ pre_filters = filters; - filters &= ~((filters & 0x55555555) << 1); - } - } - if (half_size) - filters = 0; + if ((mix_green = four_color_rgb)) colors++; + else { + for (row = FC(1,0) >> 1; row < height; row+=2) + for (col = FC(row,1) & 1; col < width; col+=2) + image[row*width+col][1] = image[row*width+col][3]; + filters &= ~((filters & 0x55555555) << 1); + } + } + if (half_size) filters = 0; } void CLASS border_interpolate (int border) @@ -4365,7 +4338,7 @@ void CLASS parse_thumb_note (int base, unsigned toff, unsigned tlen) } } -int CLASS parse_tiff_ifd (int base); +/*RT int CLASS parse_tiff_ifd (int base);*/ void CLASS parse_makernote (int base, int uptag) { @@ -4488,6 +4461,12 @@ void CLASS parse_makernote (int base, int uptag) cam_mul[0] = getreal(type); cam_mul[2] = getreal(type); } + if (tag == 0xd && type == 7 && get2() == 0xaaaa) { + fread (buf97, 1, sizeof buf97, ifp); + i = (uchar *) memmem ((char*) buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; + if (i < 70 && buf97[i] < 3) + flip = "065"[buf97[i]]-'0'; + } if (tag == 0x10 && type == 4) unique_id = get4(); if (tag == 0x11 && is_raw && !strncmp(make,"NIKON",5)) { @@ -4551,6 +4530,13 @@ void CLASS parse_makernote (int base, int uptag) fread (buf97, 324, 1, ifp); } } + if (tag == 0xa1 && type == 7) { + type = order; + order = 0x4949; + fseek (ifp, 140, SEEK_CUR); + FORC3 cam_mul[c] = get4(); + order = type; + } if (tag == 0xa4 && type == 3) { fseek (ifp, wbi*48, SEEK_CUR); FORC3 cam_mul[c] = get2(); @@ -4571,8 +4557,8 @@ void CLASS parse_makernote (int base, int uptag) FORC4 cblack[c ^ c >> 1] = get2(); if (tag == 0x201 && len == 4) goto get2_rggb; - if (tag == 0x220 && len == 53) - meta_offset = ftell(ifp) + 14; + if (tag == 0x220 && type == 7) + meta_offset = ftell(ifp); if (tag == 0x401 && type == 4 && len == 4) FORC4 cblack[c ^ c >> 1] = get4(); if (tag == 0xe01) { /* Nikon Capture Note */ @@ -4673,7 +4659,7 @@ void CLASS parse_exif (int base) unsigned kodak, entries, tag, type, len, save, c; double expo; - kodak = !strncmp(make,"EASTMAN",7); + kodak = !strncmp(make,"EASTMAN",7) && tiff_nifds < 3; entries = get2(); while (entries--) { tiff_get (base, &tag, &type, &len, &save); @@ -4846,7 +4832,8 @@ void CLASS parse_kodak_ifd (int base) } } -void CLASS parse_minolta (int base); +/*RT void CLASS parse_minolta (int base); */ +/*RT int CLASS parse_tiff (int base);*/ int CLASS parse_tiff_ifd (int base) { @@ -4873,6 +4860,13 @@ int CLASS parse_tiff_ifd (int base) while (entries--) { tiff_get (base, &tag, &type, &len, &save); switch (tag) { + case 5: width = get2(); break; + case 6: height = get2(); break; + case 7: width += get2(); break; + case 9: filters = get2(); break; + case 14: case 15: case 16: + maximum = get2(); + break; case 17: case 18: if (type == 3 && len == 1) cam_mul[(tag-17)*2] = get2() / 256.0; @@ -4927,7 +4921,7 @@ int CLASS parse_tiff_ifd (int base) load_raw = &CLASS panasonic_load_raw; load_flags = 0x2008; case 273: /* StripOffset */ - case 513: + case 513: /* JpegIFOffset */ case 61447: tiff_ifd[ifd].offset = get4()+base; if (!tiff_ifd[ifd].bps) { @@ -4940,6 +4934,9 @@ int CLASS parse_tiff_ifd (int base) tiff_ifd[ifd].samples = jh.clrs; if (!(jh.sraw || (jh.clrs & 1))) tiff_ifd[ifd].width *= jh.clrs; + i = order; + parse_tiff (tiff_ifd[ifd].offset + 12); + order = i; } } break; @@ -5295,23 +5292,28 @@ guess_cfa_pc: return 0; } -void CLASS parse_tiff (int base) +int CLASS parse_tiff (int base) { - int doff, max_samp=0, raw=-1, thm=-1, i; - struct jhead jh; + int doff; - /*RT*/ exif_base = base; + /*RT*/ if (exif_base == -1) exif_base = base; fseek (ifp, base, SEEK_SET); order = get2(); - if (order != 0x4949 && order != 0x4d4d) return; + if (order != 0x4949 && order != 0x4d4d) return 0; get2(); - memset (tiff_ifd, 0, sizeof tiff_ifd); - tiff_nifds = 0; while ((doff = get4())) { fseek (ifp, doff+base, SEEK_SET); if (parse_tiff_ifd (base)) break; } + return 1; +} + +void CLASS apply_tiff() +{ + int max_samp=0, raw=-1, thm=-1, i; + struct jhead jh; + thumb_misc = 16; if (thumb_offset) { fseek (ifp, thumb_offset, SEEK_SET); @@ -5338,8 +5340,8 @@ void CLASS parse_tiff (int base) raw = i; } } - fuji_width *= (raw_width+1)/2; - if (tiff_ifd[0].flip) tiff_flip = tiff_ifd[0].flip; + for (i=tiff_nifds; i--; ) + if (tiff_ifd[i].flip) tiff_flip = tiff_ifd[i].flip; if (raw >= 0 && !load_raw) switch (tiff_compress) { case 0: case 1: @@ -5840,9 +5842,9 @@ int CLASS parse_jpeg (int offset) /*RT*/ { /*RT*/ ciff_base = save+hlen; /*RT*/ ciff_len = len-hlen; - parse_ciff (save+hlen, len-hlen); + parse_ciff (save+hlen, len-hlen); /*RT*/ } - parse_tiff (save+6); + if (parse_tiff (save+6)) apply_tiff(); fseek (ifp, save+len, SEEK_SET); } return 1; @@ -6091,6 +6093,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 6071,-747,-856,-7653,15365,2441,-2025,2553,7315 } }, { "Canon EOS 50D", 0, 0x3d93, { 4920,616,-593,-6493,13964,2784,-1774,3178,7005 } }, + { "Canon EOS 60D", 0, 0x2ff7, + { 6719,-994,-925,-4408,12426,2211,-887,2129,6051 } }, { "Canon EOS 300D", 0, 0xfa0, { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, { "Canon EOS 350D", 0, 0xfff, @@ -6124,7 +6128,7 @@ void CLASS adobe_coeff (const char *make, const char *model) { "Canon EOS", 0, 0, { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, { "Canon PowerShot A530", 0, 0, - { 0 } }, /* don't want the A5 matrix */ + { 0 } }, /* don't want the A5 matrix */ { "Canon PowerShot A50", 0, 0, { -5300,9846,1776,3436,684,3939,-5540,9879,6200,-1404,11175,217 } }, { "Canon PowerShot A5", 0, 0, @@ -6133,6 +6137,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 11093,-3906,-1028,-5047,12492,2879,-1003,1750,5561 } }, { "Canon PowerShot G11", 0, 0, { 12177,-4817,-1069,-1612,9864,2049,-98,850,4471 } }, + { "Canon PowerShot G12", 0, 0, + { 0 } }, { "Canon PowerShot G1", 0, 0, { -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } }, { "Canon PowerShot G2", 0, 0, @@ -6245,8 +6251,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 21461,-10807,-1441,-2332,10599,1999,289,875,7703 } }, { "FUJIFILM IS Pro", 0, 0, { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } }, - { "FUJIFILM FinePix HS10 HS11", 0, 0xf68, /* DJC */ - { 12164,-3169,-1662,-1020,10358,662,-224,2108,3106 } }, + { "FUJIFILM FinePix HS10 HS11", 0, 0xf68, + { 12440,-3954,-1183,-1123,9674,1708,-83,1614,4086 } }, { "Imacon Ixpress", 0, 0, /* DJC */ { 7025,-1415,-704,-5188,13765,1424,-1248,2742,6038 } }, { "KODAK NC2000", 0, 0, @@ -6369,6 +6375,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, { "NIKON D60", 0, 0, { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } }, + { "NIKON D7000", 0, 0, /* DJC */ + { 6629,-2254,-2,-3468,9387,4081,-760,2102,7574 } }, { "NIKON D700", 0, 0, { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } }, { "NIKON D70", 0, 0, @@ -6385,6 +6393,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 13142,-4152,-1596,-4655,12374,2282,-1769,2696,6711} }, { "NIKON E2500", 0, 0, { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, + { "NIKON E3200", 0, 0, /* DJC */ + { 9846,-2085,-1019,-3278,11109,2170,-774,2134,5745 } }, { "NIKON E4300", 0, 0, /* copied from Minolta DiMAGE Z2 */ { 11280,-3564,-1370,-4655,12374,2282,-1423,2168,5396 } }, { "NIKON E4500", 0, 0, @@ -6441,6 +6451,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 8785,-2529,-1033,-7639,15624,2112,-1783,2300,7817 } }, { "OLYMPUS E-520", 0, 0xfd2, { 8344,-2322,-1020,-7596,15635,2048,-1748,2269,7287 } }, + { "OLYMPUS E-5", 0, 0, /* DJC */ + { 10033,-4067,-600,-3784,10494,3291,-923,2594,7744 } }, { "OLYMPUS E-600", 0, 0xfaf, { 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } }, { "OLYMPUS E-620", 0, 0xfaf, @@ -6489,43 +6501,67 @@ void CLASS adobe_coeff (const char *make, const char *model) { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } }, { "PENTAX K-x", 0, 0, { 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } }, + { "PENTAX K-r", 0, 0, /* Pentax DNG */ + { 21746,-6684,-1521,-10014,26601,6573,-1920,3062,19415 } }, + { "PENTAX K-5", 0, 0, /* Pentax DNG */ + { 19331,-5842,-2589,-9103,28027,4285,-2216,3884,14767 } }, { "PENTAX K-7", 0, 0, { 9142,-2947,-678,-8648,16967,1663,-2224,2898,8615 } }, - { "Panasonic DMC-FZ8", 0, 0xf7f, + { "PENTAX 645D", 0, 0x3e00, + { 10646,-3593,-1158,-3329,11699,1831,-667,2874,6287 } }, + { "Panasonic DMC-FZ8", 0, 0, { 8986,-2755,-802,-6341,13575,3077,-1476,2144,6379 } }, { "Panasonic DMC-FZ18", 0, 0, { 9932,-3060,-935,-5809,13331,2753,-1267,2155,5575 } }, - { "Panasonic DMC-FZ28", 15, 0xfff, + { "Panasonic DMC-FZ28", 15, 0, { 10109,-3488,-993,-5412,12812,2916,-1305,2140,5543 } }, - { "Panasonic DMC-FZ30", 0, 0xf94, + { "Panasonic DMC-FZ30", 0, 0, { 10976,-4029,-1141,-7918,15491,2600,-1670,2071,8246 } }, - { "Panasonic DMC-FZ35", 147, 0xfff, + { "Panasonic DMC-FZ3", 143, 0, { 9938,-2780,-890,-4604,12393,2480,-1117,2304,4620 } }, - { "Panasonic DMC-FZ50", 0, 0xfff, /* aka "LEICA V-LUX1" */ + { "Panasonic DMC-FZ40", 143, 0, + { 13639,-5535,-1371,-1698,9633,2430,316,1152,4108 } }, + { "Panasonic DMC-FZ50", 0, 0, { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, - { "Panasonic DMC-L10", 15, 0xf96, + { "LEICA V-LUX1", 0, 0, + { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, + { "Panasonic DMC-L10", 15, 0, { 8025,-1942,-1050,-7920,15904,2100,-2456,3005,7039 } }, - { "Panasonic DMC-L1", 0, 0x3dff, /* aka "LEICA DIGILUX 3" */ + { "Panasonic DMC-L1", 0, 0, { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, - { "Panasonic DMC-LC1", 0, 0, /* aka "LEICA DIGILUX 2" */ + { "LEICA DIGILUX 3", 0, 0, + { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, + { "Panasonic DMC-LC1", 0, 0, { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, - { "Panasonic DMC-LX1", 0, 0x3dfc, /* aka "LEICA D-LUX2" */ + { "LEICA DIGILUX 2", 0, 0, + { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, + { "Panasonic DMC-LX1", 0, 0, { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, - { "Panasonic DMC-LX2", 0, 0, /* aka "LEICA D-LUX3" */ + { "LEICA D-LUX2", 0, 0, + { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, + { "Panasonic DMC-LX2", 0, 0, { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, - { "Panasonic DMC-LX3", 15, 0xfff, /* aka "LEICA D-LUX4" */ + { "LEICA D-LUX3", 0, 0, + { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, + { "Panasonic DMC-LX3", 15, 0, { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, - { "Panasonic DMC-FX150", 15, 0xfff, + { "LEICA D-LUX4", 15, 0, + { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, + { "Panasonic DMC-LX5", 143, 0, + { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, + { "Panasonic DMC-FZ100", 143, 0, + { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } }, + { "Panasonic DMC-FX150", 15, 0, { 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } }, { "Panasonic DMC-G10", 0, 0, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, - { "Panasonic DMC-G1", 15, 0xfff, + { "Panasonic DMC-G1", 15, 0, { 8199,-2065,-1056,-8124,16156,2033,-2458,3022,7220 } }, - { "Panasonic DMC-G2", 15, 0xf3c, + { "Panasonic DMC-G2", 15, 0, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, - { "Panasonic DMC-GF1", 15, 0xf92, + { "Panasonic DMC-GF1", 15, 0, { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, - { "Panasonic DMC-GH1", 15, 0xf92, + { "Panasonic DMC-GH1", 15, 0, { 6299,-1466,-532,-6535,13852,2969,-2331,3112,5984 } }, { "Phase One H 20", 0, 0, /* DJC */ { 1313,1855,-109,-6715,15908,808,-327,1840,6020 } }, @@ -6537,9 +6573,15 @@ void CLASS adobe_coeff (const char *make, const char *model) { 5053,-24,-117,-5684,14076,1702,-2619,4492,5849 } }, { "Phase One P65", 0, 0, { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } }, + { "SAMSUNG EX1", 0, 0x3e00, + { 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } }, + { "SAMSUNG NX10", 20, 0xea6, + { 10332,-3234,-1168,-6111,14639,1520,-1352,2647,8331 } }, + { "SAMSUNG WB2000", 0, 0xfff, + { 0 } }, { "SAMSUNG GX-1", 0, 0, { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, - { "SAMSUNG S85", 0, 0, /* DJC */ + { "SAMSUNG S85", 0, 0xffff, /* DJC */ { 11885,-3968,-1473,-4214,12299,1916,-835,1655,5549 } }, { "Sinar", 0, 0, /* DJC */ { 16442,-2956,-2422,-2877,12128,750,-1136,6066,4559 } }, @@ -6574,7 +6616,13 @@ void CLASS adobe_coeff (const char *make, const char *model) { "SONY NEX-3", 138, 0, /* DJC */ { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } }, { "SONY NEX-5", 116, 0, /* DJC */ - { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } } + { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } }, + { "SONY NEX", 128, 0, /* Adobe's matrix */ + { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } }, + { "SONY SLT-A33", 128, 0, + { 6069,-1221,-366,-5221,12779,2734,-1024,2066,6834 } }, + { "SONY SLT-A55", 128, 0, + { 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } } }; double cam_xyz[4][3]; char name[130]; @@ -6667,6 +6715,30 @@ void CLASS identify() char head[32], *cp; int hlen, flen, fsize, zero_fsize=1, i, c, is_canon; struct jhead jh; + short pana[][6] = { + { 3130, 1743, 4, 0, -6, 0 }, + { 3130, 2055, 4, 0, -6, 0 }, + { 3130, 2319, 4, 0, -6, 0 }, + { 3170, 2103, 18, 0,-42, 20 }, + { 3170, 2367, 18, 13,-42,-21 }, + { 3177, 2367, 0, 0, -1, 0 }, + { 3304, 2458, 0, 0, -1, 0 }, + { 3330, 2463, 9, 0, -5, 0 }, + { 3330, 2479, 9, 0,-17, 4 }, + { 3370, 1899, 15, 0,-44, 20 }, + { 3370, 2235, 15, 0,-44, 20 }, + { 3370, 2511, 15, 10,-44,-21 }, + { 3690, 2751, 3, 0, -8, -3 }, + { 3710, 2751, 0, 0, -3, 0 }, + { 3724, 2450, 0, 0, 0, -2 }, + { 3770, 2487, 17, 0,-44, 19 }, + { 3770, 2799, 17, 15,-44,-19 }, + { 3880, 2170, 6, 0, -6, 0 }, + { 4060, 3018, 0, 0, 0, -2 }, + { 4290, 2391, 3, 0, -8, -1 }, + { 4330, 2439, 17, 15,-44,-19 }, + { 4508, 2962, 0, 0, -3, -4 }, + { 4508, 3330, 0, 0, -3, -6 } }; static const struct { int fsize; char make[12], model[19], withjpeg; @@ -6704,13 +6776,14 @@ void CLASS identify() { 6573120, "Canon", "PowerShot A610" ,0 }, { 9219600, "Canon", "PowerShot A620" ,0 }, { 9243240, "Canon", "PowerShot A470" ,0 }, - { 10341600, "Canon", "PowerShot A720" ,0 }, + { 10341600, "Canon", "PowerShot A720 IS",0 }, { 10383120, "Canon", "PowerShot A630" ,0 }, { 12945240, "Canon", "PowerShot A640" ,0 }, { 15636240, "Canon", "PowerShot A650" ,0 }, { 5298000, "Canon", "PowerShot SD300" ,0 }, { 7710960, "Canon", "PowerShot S3 IS" ,0 }, { 15467760, "Canon", "PowerShot SX110 IS",0 }, + { 15534576, "Canon", "PowerShot SX120 IS",0 }, { 18653760, "Canon", "PowerShot SX20 IS",0 }, { 5939200, "OLYMPUS", "C770UZ" ,0 }, { 1581060, "NIKON", "E900" ,1 }, /* or E900s,E910 */ @@ -6762,6 +6835,8 @@ void CLASS identify() maximum = height = width = top_margin = left_margin = 0; cdesc[0] = desc[0] = artist[0] = make[0] = model[0] = model2[0] = 0; iso_speed = shutter = aperture = focal_len = unique_id = 0; + tiff_nifds = 0; + memset (tiff_ifd, 0, sizeof tiff_ifd); memset (gpsdata, 0, sizeof gpsdata); memset (cblack, 0, sizeof cblack); memset (white, 0, sizeof white); @@ -6798,16 +6873,14 @@ void CLASS identify() if ((cp = (char *) memmem (head, 32, "MMMM", 4)) || (cp = (char *) memmem (head, 32, "IIII", 4))) { parse_phase_one (cp-head); - if (cp-head) parse_tiff(0); + if (cp-head && parse_tiff(0)) apply_tiff(); } else if (order == 0x4949 || order == 0x4d4d) { if (!memcmp (head+6,"HEAPCCDR",8)) { data_offset = hlen; /*RT*/ ciff_base = hlen; /*RT*/ ciff_len = fsize - hlen; parse_ciff (hlen, flen - hlen); - } else { - parse_tiff(0); - } + } else if (parse_tiff(0)) apply_tiff(); } else if (!memcmp (head,"\xff\xd8\xff\xe1",4) && !memcmp (head+6,"Exif",4)) { fseek (ifp, 4, SEEK_SET); @@ -6847,6 +6920,7 @@ void CLASS identify() fseek (ifp, 100, SEEK_SET); parse_tiff (data_offset = get4()); parse_tiff (thumb_offset+12); + apply_tiff(); } else if (!memcmp (head,"RIFF",4)) { fseek (ifp, 0, SEEK_SET); parse_riff(); @@ -6861,6 +6935,18 @@ void CLASS identify() raw_height = get2(); load_raw = &CLASS nokia_load_raw; filters = 0x61616161; + } else if (!memcmp (head,"NOKIARAW",8)) { + strcpy (make, "NOKIA"); + strcpy (model, "X2"); + order = 0x4949; + fseek (ifp, 300, SEEK_SET); + data_offset = get4(); + i = get4(); + width = get2(); + height = get2(); + data_offset += i - width * 5 / 4 * height; + load_raw = &CLASS nokia_load_raw; + filters = 0x61616161; } else if (!memcmp (head,"DSC-Image",9)) parse_rollei(); else if (!memcmp (head,"PWAD",4)) @@ -6906,19 +6992,24 @@ void CLASS identify() if (!height) height = raw_height; if (!width) width = raw_width; if (fuji_width) { + fuji_width = (raw_width+1)/2; width = height + fuji_width; height = width - 1; pixel_aspect = 1; } if (height == 2624 && width == 3936) /* Pentax K10D and Samsung GX10 */ { height = 2616; width = 3896; } - if (height == 3136 && width == 4864) /* Pentax K20D */ - { height = 3124; width = 4688; } - if (height == 3136 && width == 4736) /* Pentax K-7 */ - { height = 3122; width = 4684; - top_margin = 2; filters = 0x16161616; } - if (height == 2868 && width == 4352) /* Pentax K-x */ - width = 4308; + if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */ + { height = 3124; width = 4688; filters = 0x16161616; } + if (!strcmp(model,"K-r") || !strcmp(model,"K-x")) + { width = 4309; filters = 0x16161616; } + if (!strcmp(model,"K-5")) + { left_margin = 10; width = 4950; filters = 0x16161616; } + if (!strcmp(model,"K-7")) + { height = 3122; width = 4684; filters = 0x16161616; top_margin = 2; } + if (!strcmp(model,"645D")) + { height = 5502; width = 7328; filters = 0x61616161; top_margin = 29; + left_margin = 48; } if (height == 3014 && width == 4096) /* Ricoh GX200 */ width = 4014; if (dng_version) { @@ -7039,7 +7130,7 @@ void CLASS identify() top_margin = 6; left_margin = 12; goto canon_a5; - } else if (!strcmp(model,"PowerShot A720")) { + } else if (!strcmp(model,"PowerShot A720 IS")) { height = 2472; width = 3298; raw_height = 2480; @@ -7093,6 +7184,17 @@ canon_a5: load_raw = &CLASS packed_load_raw; load_flags = 40; zero_is_bad = 1; + } else if (!strcmp(model,"PowerShot SX120 IS")) { + height = 2742; + width = 3664; + raw_height = 2778; + raw_width = 3728; + top_margin = 18; + left_margin = 16; + filters = 0x49494949; + load_raw = &CLASS packed_load_raw; + load_flags = 40; + zero_is_bad = 1; } else if (!strcmp(model,"PowerShot SX20 IS")) { height = 3024; width = 4032; @@ -7166,6 +7268,10 @@ canon_a5: width = 3684; top_margin = 16; left_margin = 8; + if (unique_id > 0x2720000) { + top_margin = 12; + left_margin = 52; + } } else if (is_canon && raw_width == 3944) { height = 2602; width = 3908; @@ -7270,6 +7376,11 @@ canon_cr2: left_margin = 2; } else if (!strcmp(model,"D5000")) { width -= 42; + } else if (!strcmp(model,"D7000")) { + width -= 44; + } else if (!strcmp(model,"D3100")) { + width -= 28; + left_margin = 6; } else if (!strncmp(model,"D40",3) || !strncmp(model,"D50",3) || !strncmp(model,"D70",3)) { @@ -7294,7 +7405,7 @@ canon_cr2: else width -= 8; } else if (!strncmp(model,"D300",4)) { width -= 32; - } else if (!strcmp(model,"COOLPIX P6000")) { + } else if (!strncmp(model,"COOLPIX P",9)) { load_flags = 24; filters = 0x94949494; } else if (fsize == 1581060) { @@ -7468,8 +7579,6 @@ konica_400z: data_error = -1; } else if (!strcmp(model,"*ist DS")) { height -= 2; - } else if (!strcmp(model,"K20D")) { - filters = 0x16161616; } else if (!strcmp(model,"K-x")) { width = 4308; filters = 0x16161616; @@ -7511,7 +7620,6 @@ konica_400z: raw_width = fsize/height/2; order = 0x4d4d; load_raw = &CLASS unpacked_load_raw; - maximum = 0xffff; } else if (!strcmp(model,"NX10")) { height -= top_margin = 4; width -= 2 * (left_margin = 8); @@ -7524,7 +7632,11 @@ konica_400z: width = 3668; top_margin = 8; } - maximum = 0x3e00; + } else if (!strcmp(model,"WB2000")) { + order = 0x4949; + height -= 3; + width -= 10; + top_margin = 2; } else if (fsize == 20487168) { height = 2808; width = 3648; @@ -7622,6 +7734,12 @@ wb550: top_margin = 4; left_margin = 7; filters = 0x61616161; + } else if (raw_width == 7410) { + height = 5502; + width = 7328; + top_margin = 4; + left_margin = 41; + filters = 0x61616161; } else if (raw_width == 4090) { strcpy (model, "V96C"); height -= (top_margin = 6); @@ -7679,109 +7797,23 @@ wb550: filters = 0x16161616; } } else if (!strcmp(make,"LEICA") || !strcmp(make,"Panasonic")) { - if ((flen - data_offset) / (width*8/7) == height) + if ((flen - data_offset) / (raw_width*8/7) == raw_height) load_raw = &CLASS panasonic_load_raw; if (!load_raw) { load_raw = &CLASS unpacked_load_raw; load_flags = 4; } zero_is_bad = 1; - switch (width) { - case 2568: - adobe_coeff ("Panasonic","DMC-LC1"); break; - case 3130: - left_margin = -14; - case 3170: - left_margin += 18; - width = 3096; - if (height > 2326) { - height = 2326; - top_margin = 13; - filters = 0x49494949; - } - adobe_coeff ("Panasonic","DMC-FZ8"); break; - case 3213: - width -= 27; - case 3177: - width -= 10; - load_flags = 2; - filters = 0x49494949; - adobe_coeff ("Panasonic","DMC-L1"); break; - case 3304: - width -= 17; - adobe_coeff ("Panasonic","DMC-FZ30"); break; - case 3330: - width += 43; - left_margin = -6; - maximum = 0xf7f; - case 3370: - width -= 82; - left_margin += 15; - if (height > 2480) - height = 2480 - (top_margin = 10); - filters = 0x49494949; - adobe_coeff ("Panasonic","DMC-FZ18"); break; - case 3690: - height -= 2; - left_margin = -14; - maximum = 0xf7f0; - case 3770: - width = 3672; - if (--height == 2798 && (height = 2760)) - top_margin = 15; - else filters = 0x49494949; - left_margin += 17; - adobe_coeff ("Panasonic","DMC-FZ50"); break; - case 3710: - width = 3682; - filters = 0x49494949; - adobe_coeff ("Panasonic","DMC-L10"); break; - case 3724: - width -= 14; - if (height == 2450) height -= 2; - case 3836: - width -= 42; -lx3: filters = 0x16161616; - if (make[0] != 'P') - adobe_coeff ("Panasonic","DMC-LX3"); - break; - case 3880: - width -= 22; - left_margin = 6; - load_flags = 2; - adobe_coeff ("Panasonic","DMC-LX1"); break; - case 4060: - width = 3982; - if (height == 2250) goto lx3; - width = 4018; - filters = 0x16161616; - if (!strncmp(model,"DMC-FZ3",7)) { - height -= 2; - adobe_coeff ("Panasonic","DMC-FZ35"); break; - } - filters = 0x49494949; - break; - case 4172: - case 4396: - width -= 28; - filters = 0x49494949; - adobe_coeff ("Panasonic","DMC-GH1"); break; - case 4290: - height += 38; - left_margin = -14; - filters = 0x49494949; - case 4330: - width = 4248; - if ((height -= 39) == 2400) - top_margin = 15; - left_margin += 17; - adobe_coeff ("Panasonic","DMC-LX2"); break; - case 4508: - height -= 6; - width = 4429; - filters = 0x16161616; - adobe_coeff ("Panasonic","DMC-FX150"); break; - } + if ((height += 12) > raw_height) height = raw_height; + for (i=0; i < sizeof pana / sizeof *pana; i++) + if (raw_width == pana[i][0] && raw_height == pana[i][1]) { + left_margin = pana[i][2]; + top_margin = pana[i][3]; + width += pana[i][4]; + height += pana[i][5]; + } + filters = 0x01010101 * (uchar) "\x94\x61\x49\x16" + [((filters-1) ^ (left_margin & 1) ^ (top_margin << 1)) & 3]; } else if (!strcmp(model,"C770UZ")) { height = 1718; width = 2304; @@ -8679,7 +8711,7 @@ void CLASS write_ppm_tiff() case 'i': identify_only = 1; break; case 'c': write_to_stdout = 1; break; case 'v': verbose = 1; break; - case 'h': half_size = 1; /* "-h" implies "-f" *//* + case 'h': half_size = 1; // "-h" implies "-f" case 'f': four_color_rgb = 1; break; case 'A': FORC4 greybox[c] = atoi(argv[arg++]); case 'a': use_auto_wb = 1; break; @@ -8944,597 +8976,3 @@ cleanup: return status; } */ - -#include -#include -#include -#include -#include - -namespace rtengine { - -extern Settings* settings; - -Glib::Mutex* dcrMutex=NULL; - -int RawImage::loadRaw (bool loadData) { - - THREAD_LOCK - - ifname = fname.c_str(); - image = NULL; - exif_base = -1; - ciff_base = -1; - ciff_len = -1; - verbose = settings->verbose; - oprof = NULL; - - ifp = gfopen (fname.c_str()); - if (!ifp) - return 3; - - thumb_length = 0; - thumb_offset = 0; - thumb_load_raw = 0; - use_camera_wb = 0; - highlight = 1; - half_size = 0; - - //***************** Read ALL raw file info - identify (); - if (!is_raw) { - fclose(ifp); - return 2; - } - this->filters = ::filters; - this->height = ::height; - this->width = ::width; - this->colors = ::colors; - this->profile_len = ::profile_length; - - this->maximum = ::maximum; - this->fuji_width = ::fuji_width; - - for(int i=0; i<8;i++) - for(int j=0;j<8;j++) - this->white[i][j] = ::white[i][j]; - - if (flip==5) - this->rotate_deg = 270; - else if (flip==3) - this->rotate_deg = 180; - else if (flip==6) - this->rotate_deg = 90; - else - this->rotate_deg = 0; - - this->make = strdup (::make); - this->model = strdup (::model); - this->iso_speed = ::iso_speed; - this->shutter = ::shutter; - this->aperture = ::aperture; - this->focal_len = ::focal_len; - this->timestamp = ::timestamp; - this->exifbase = ::exif_base; - this->ciff_base = ::ciff_base; - this->ciff_len = ::ciff_len; - this->thumbOffset = ::thumb_offset; - this->thumbLength = ::thumb_length; - this->thumbHeight = ::thumb_height; - this->thumbWidth = ::thumb_width; - if (!thumb_load_raw && thumb_offset && write_thumb == jpeg_thumb) - this->thumbType = 1; - else if (!thumb_load_raw && thumb_offset && write_thumb == ppm_thumb) - this->thumbType = 2; - else { - this->thumbType = 0; - this->thumbWidth = ::width; - this->thumbHeight = ::height; - } - - if( loadData ){ - allocData(); - use_camera_wb = 1; - shrink = 0; - if (settings->verbose) printf ("Loading %s %s image from %s...\n", make, model, fname.c_str()); - iheight = height; - iwidth = width; - - // dcraw needs this global variable to hold pixel data - image = (UshORt (*)[4])calloc (height*width*sizeof *image + meta_length, 1); - meta_data = (char *) (image + height*width); - if(!image) - return 200; - - if (setjmp (failure)) { - if (image) - free (image); - fclose (ifp); - return 100; - } - - // Load raw pixels data - fseek (ifp, data_offset, SEEK_SET); - (*load_raw)(); - - // Load embedded profile - if (profile_length) { - fseek (ifp, profile_offset, SEEK_SET); - fread ( this->profile_data, 1, this->profile_len, ifp); - } - fclose(ifp); - - // Setting the black_point and cblack - int i = ::cblack[3]; - for (int c=0; c <3; c++) - if (i > ::cblack[c]) - i = ::cblack[c]; - for (int c=0; c < 4; c++) - ::cblack[c] -= i; - ::black += i; - for (int c=0; c < 4; c++) this->cblack[c] = ::cblack[c]; - for (int c=0; c < 4; c++) this->cam_mul[c] = ::cam_mul[c]; - for (int c=0; c < 4; c++) this->pre_mul[c] = ::pre_mul[c]; - for (int a = 0; a < 3; a++) - for (int b = 0; b < 3; b++) - this->coeff[a][b] = ::rgb_cam[a][b]; - - this->black_point = ::black; - - // copy pixel raw data: the compressed format earns space - if (this->filters) { - for (int row = 0; row < height; row++) - for (int col = 0; col < width; col++) - this->data[row][col] = image[row * width + col][FC(row,col)]; - } else { - for (int row = 0; row < height; row++) - for (int col = 0; col < width; col++) { - this->data[row][3 * col + 0] = image[row * width + col][0]; - this->data[row][3 * col + 1] = image[row * width + col][1]; - this->data[row][3 * col + 2] = image[row * width + col][2]; - } - } - free(image); // we don't need this anymore - } - return 0; -} - - - -int getRawFileBasicInfo (const Glib::ustring& fname, rtengine::RawMetaDataLocation& rml, int& rotation, int& thumbWidth, int& thumbHeight, int& thumbOffset, int& thumbType) { - - THREAD_LOCK - - int status=0; - - exif_base = -1; - ciff_base = -1; - ciff_len = -1; - - half_size = 1; - bright = 1.0; - verbose = settings->verbose; - use_camera_wb = 1; - - thumb_length = 0; - thumb_offset = 0; - thumb_load_raw = 0; - status = 1; - - ifname = fname.c_str(); - if (!(ifp = gfopen (ifname))) { - status = 2; - return status; - } - identify (); - if (!is_raw || colors>3) { - status = 3; - fclose (ifp); - return status; - } - - thumbOffset = thumb_offset; - - if (flip==5) - rotation = 270; - else if (flip==3) - rotation = 180; - else if (flip==6) - rotation = 90; - else - rotation = 0; - - thumbWidth = thumb_width; - thumbHeight = thumb_height; - if (!thumb_load_raw && thumb_offset && write_thumb == jpeg_thumb) - thumbType = 1; - else if (!thumb_load_raw && thumb_offset && write_thumb == ppm_thumb) - thumbType = 2; - else { - thumbType = 0; - thumbWidth = width; - thumbHeight = height; - } - - rml.exifBase = exif_base; - rml.ciffBase = ciff_base; - rml.ciffLength = ciff_len; - - fclose (ifp); - return !is_raw; -} - -#include - -rtengine::Thumbnail* rtengine::Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, rtengine::RawMetaDataLocation& rml, int &w, int &h, int fixwh) { - - THREAD_LOCK - - image = NULL; - ifname = fname.c_str(); - exif_base = -1; - ciff_base = -1; - ciff_len = -1; - verbose = settings->verbose; - oprof = NULL; - ifp = gfopen (fname.c_str()); - if (!ifp) { - printf("DCRAW: failed0\n"); - return NULL; - } - - if (setjmp (failure)) { - printf("DCRAW: failed1\n"); - fclose (ifp); - return NULL; - } - - identify (); - if (!is_raw || colors>3) { - printf("DCRAW: failed2\n"); - fclose(ifp); - return NULL; - } - - rml.exifBase = exif_base; - rml.ciffBase = ciff_base; - rml.ciffLength = ciff_len; - - char *thumb_buffer = (char *)malloc(thumb_length+64); // malloc instead of on the stack. - if ( thumb_buffer == NULL ) - { - printf("DCRAW: failed3\n"); - return NULL; - } - fseek(ifp,thumb_offset,SEEK_SET); - fread(thumb_buffer,1,thumb_length,ifp); - fclose(ifp); - - rtengine::Thumbnail* tpp = rtengine::Thumbnail::loadFromMemory(thumb_buffer,thumb_length,w,h,fixwh); - free(thumb_buffer); - if ( tpp == 0 ) - { - printf("DCRAW: failed4\n"); - return NULL; - } - - int deg = 0; - if (flip==5) - deg = 270; - else if (flip==3) - deg = 180; - else if (flip==6) - deg = 90; - - if (deg>0) { - Image16* rot = tpp->thumbImg->rotate (deg); - delete tpp->thumbImg; - tpp->thumbImg = rot; - } - - return tpp; -} - -rtengine::Thumbnail* rtengine::Thumbnail::loadFromRaw (const Glib::ustring& fname, rtengine::RawMetaDataLocation& rml, int &w, int &h, int fixwh) { - - THREAD_LOCK - -MyTime t0, t1, t2, t3, t4, t5, t6; -t0.set (); - - image = NULL; - ifname = fname.c_str(); - exif_base = -1; - ciff_base = -1; - ciff_len = -1; - verbose = settings->verbose; - oprof = NULL; - ifp = gfopen (fname.c_str()); - if (!ifp) { - return NULL; - } - -t1.set (); - - if (setjmp (failure)) { - if (image) - free (image); - fclose (ifp); - return NULL; - } - - use_camera_wb = 0; - highlight = 1; - half_size = 0; - shrink = 0; - identify (); - use_camera_wb = 1; - if (!is_raw || colors>3) { - fclose(ifp); - return NULL; - } - -t2.set(); - - iheight = ::height; - iwidth = ::width; - - image = (UshORt (*)[4])calloc (::height*::width*sizeof *image + meta_length, 1); - meta_data = (char *) (image + ::height*::width); - - if (settings->verbose) printf ("Loading %s %s image from %s...\n", make, model, fname.c_str()); - fseek (ifp, data_offset, SEEK_SET); - (*load_raw)(); - if (zero_is_bad) remove_zeroes(); - - rtengine::Thumbnail* tpp = new rtengine::Thumbnail; - - tpp->isRaw = true; - tpp->embProfileLength = 0; - if (profile_length) { - tpp->embProfileLength = profile_length; - tpp->embProfileData = new unsigned char[profile_length]; - fseek (ifp, profile_offset, SEEK_SET); - fread (tpp->embProfileData, 1, profile_length, ifp); - tpp->embProfile = cmsOpenProfileFromMem (tpp->embProfileData, tpp->embProfileLength); - } - else { - tpp->embProfile = NULL; - tpp->embProfileData = NULL; - } - - fclose(ifp); - tpp->redMultiplier = pre_mul[0]; - tpp->greenMultiplier = pre_mul[1]; - tpp->blueMultiplier = pre_mul[2]; - -t3.set (); - - scale_colors(); - pre_interpolate (); - - unsigned filter = filters; - int firstgreen = 1; - // locate first green location in the first row - while (!FISGREEN(filter,1,firstgreen)) - firstgreen++; - - int skip = 1; - if (fixwh==1) // fix height, scale width - skip = (::height-firstgreen-1) / h; - else - skip = (::width-firstgreen-1) / w; - if (skip%2) - skip--; - if (skip<1) - skip = 1; - - int hskip = skip, vskip = skip; - if (!strcmp (model, "D1X")) - hskip *=2; - - rml.exifBase = exif_base; - rml.ciffBase = ciff_base; - rml.ciffLength = ciff_len; - tpp->camwbRed = tpp->redMultiplier / pre_mul[0]; - tpp->camwbGreen = tpp->greenMultiplier / pre_mul[1]; - tpp->camwbBlue = tpp->blueMultiplier / pre_mul[2]; - - tpp->defGain = 1.0 / MIN(MIN(pre_mul[0],pre_mul[1]),pre_mul[2]); - tpp->gammaCorrected = true; - - int ix = 0; - int rofs = 0; - int tmpw = (::width-2)/hskip; - int tmph = (::height-2)/vskip; - Image16* tmpImg = new Image16 (tmpw, tmph); - if (filter) { - for (int row=1, y=0; row< ::height-1 && y> 1; - b = (image[ofs+::width][2] + image[ofs-::width][2]) >> 1; - } - else { - b = (image[ofs+1][2] + image[ofs-1][2]) >> 1; - r = (image[ofs+::width][0] + image[ofs-::width][0]) >> 1; - } - tmpImg->r[y][x] = r; - tmpImg->g[y][x] = g; - tmpImg->b[y][x] = b; - } - } - } - else { - for (int row=1, y=0; row< ::height-1 && yr[y][x] = image[ofs][0]; - tmpImg->g[y][x] = image[ofs][1]; - tmpImg->b[y][x] = image[ofs][2]; - } - } - } - - if (fuji_width) { - int fw = fuji_width / hskip; - double step = sqrt(0.5); - int wide = fw / step; - int high = (tmph - fw) / step; - Image16* fImg = new Image16 (wide, high); - float r, c; - - for (int row=0; row < high; row++) - for (int col=0; col < wide; col++) { - unsigned ur = r = fw + (row-col)*step; - unsigned uc = c = (row+col)*step; - if (ur > tmph-2 || uc > tmpw-2) - continue; - double fr = r - ur; - double fc = c - uc; - int oofs = (ur*tmpw + uc)*3; - int fofs = (row*wide+col)*3; - fImg->r[row][col] = (tmpImg->r[ur][uc] * (1-fc) + tmpImg->r[ur][uc+1] * fc) * (1-fr) + (tmpImg->r[ur+1][uc] * (1-fc) + tmpImg->r[ur+1][uc+1] * fc) * fr; - fImg->g[row][col] = (tmpImg->g[ur][uc] * (1-fc) + tmpImg->g[ur][uc+1] * fc) * (1-fr) + (tmpImg->g[ur+1][uc] * (1-fc) + tmpImg->g[ur+1][uc+1] * fc) * fr; - fImg->b[row][col] = (tmpImg->b[ur][uc] * (1-fc) + tmpImg->b[ur][uc+1] * fc) * (1-fr) + (tmpImg->b[ur+1][uc] * (1-fc) + tmpImg->b[ur+1][uc+1] * fc) * fr; - } - delete tmpImg; - tmpImg = fImg; - } - - - if (fixwh==1) // fix height, scale width - w = tmpw * h / tmph; - else - h = tmph * w / tmpw; - - tpp->thumbImg = tmpImg->resize (w, h, TI_Bilinear); - delete tmpImg; - - if (fuji_width) - tpp->scale = (double)(::height - fuji_width) / sqrt(0.5) / h; - else - tpp->scale = (double)::height / h; - -t4.set (); - - // generate histogram for auto exposure - tpp->aeHistCompression = 3; - tpp->aeHistogram = new unsigned int[65536>>tpp->aeHistCompression]; - memset (tpp->aeHistogram, 0, (65536>>tpp->aeHistCompression)*sizeof(int)); - int radd = 4; - int gadd = 2; - int badd = 4; - if (!filter) - radd = gadd = badd = 1; - for (int i=8; i< ::height-8; i++) { - int start, end; - if (fuji_width) { - int fw = fuji_width; - start = ABS(fw-i) + 8; - end = MIN( ::height+ ::width-fw-i, fw+i) - 8; - } - else { - start = 8; - end = ::width-8; - } - for (int j=start; jaeHistogram[image[i* ::width+j][1]>>tpp->aeHistCompression]+=gadd; - else if (FISRED(filter,i,j)) - tpp->aeHistogram[image[i* ::width+j][0]>>tpp->aeHistCompression]+=radd; - else if (FISBLUE(filter,i,j)) - tpp->aeHistogram[image[i* ::width+j][2]>>tpp->aeHistCompression]+=badd; - } - -t5.set (); - - // generate autoWB - double avg_r = 0; - double avg_g = 0; - double avg_b = 0; - int rn = 0, gn = 0, bn = 0; - - for (int i=32; i< ::height-32; i++) { - int start, end; - if (fuji_width) { - int fw = fuji_width; - start = ABS(fw-i) + 32; - end = MIN( ::height+ ::width-fw-i, fw+i) - 32; - } - else { - start = 32; - end = ::width-32; - } - for (int j=start; jdefGain * image[i* ::width+j][1]; - if (d>64000) - continue; - avg_g += d; - gn++; - } - if (FISRED(filter,i,j)) { - double d = tpp->defGain * image[i* ::width+j][0]; - if (d>64000) - continue; - avg_r += d; - rn++; - } - if (FISBLUE(filter,i,j)) { - double d = tpp->defGain * image[i* ::width+j][2]; - if (d>64000) - continue; - avg_b += d; - bn++; - } - } - } - - double reds = avg_r/rn * tpp->camwbRed; - double greens = avg_g/gn * tpp->camwbGreen; - double blues = avg_b/bn * tpp->camwbBlue; - - double rm = rgb_cam[0][0]*reds + rgb_cam[0][1]*greens + rgb_cam[0][2]*blues; - double gm = rgb_cam[1][0]*reds + rgb_cam[1][1]*greens + rgb_cam[1][2]*blues; - double bm = rgb_cam[2][0]*reds + rgb_cam[2][1]*greens + rgb_cam[2][2]*blues; - - ColorTemp::mul2temp (rm, gm, bm, tpp->autowbTemp, tpp->autowbGreen); - -t6.set (); - -if (settings->verbose) printf ("0: %d, 1: %d, 2: %d, 3: %d, 4: %d, 5: %d All: %d\n", t1.etime(t0), t2.etime(t1), t3.etime(t2), t4.etime(t3), t5.etime(t4), t6.etime(t5), t6.etime(t0)); - - int deg = 0; - if (flip==5) - deg = 270; - else if (flip==3) - deg = 180; - else if (flip==6) - deg = 90; - - if (deg>0) { - Image16* rot = tpp->thumbImg->rotate (deg); - delete tpp->thumbImg; - tpp->thumbImg = rot; - } - - for (int a=0; a < 3; a++) - for (int b=0; b < 3; b++) - tpp->colorMatrix[a][b] = rgb_cam[a][b]; - - tpp->init (); - - free (image); - - return tpp; -} - - -} - diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h new file mode 100644 index 000000000..bfd87a0c0 --- /dev/null +++ b/rtengine/dcraw.h @@ -0,0 +1,374 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2010 Fabio Suprani + * + * 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 . + */ + +#ifndef DCRAW_H +#define DCRAW_H + +#include +#include + + +class DCraw +{ +public: + typedef unsigned short ushort; + typedef unsigned char uchar; + typedef unsigned short (*dcrawImage_t)[4]; +#ifdef WIN32 + typedef __int64 INT64; + typedef unsigned __int64 UINT64; +#else + typedef long long INT64; + typedef unsigned long long UINT64; +#endif + + + DCraw() + :ifp(NULL),ofp(NULL) + ,order(0x4949) + ,ifname(NULL) + ,meta_data(NULL) + ,shot_select(0),multi_out(0) + ,half_size(0),four_color_rgb(0),document_mode(0),highlight(0) + ,verbose(0),use_auto_wb(0),use_camera_wb(0),use_camera_matrix(-1) + ,output_color(1),output_bps(8),output_tiff(0),med_passes(0),no_auto_bright(0) + ,bright(1.),threshold(0.) + ,getbithuff(this,ifp,zero_after_ff) + ,pana_bits(ifp,load_flags) + ,ph1_bithuff(this,ifp,order) + ,image(NULL) + ,exif_base(-1), ciff_base(-1), ciff_len(0) + { + aber[0]=aber[1]=aber[2]=aber[3]=1; + gamm[0]=0.45;gamm[1]=4.5;gamm[2]=gamm[3]=gamm[4]=gamm[5]=0; + user_mul[0]=user_mul[1]=user_mul[2]=user_mul[3]=0; + greybox[0]=greybox[1]=0; greybox[2]=greybox[3]= UINT_MAX; + } + + //int main (int argc, const char **argv); +protected: + int exif_base, ciff_base, ciff_len; + IMFILE *ifp; + FILE *ofp; + short order; + const char *ifname; + char *meta_data; + char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; + float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len; + time_t timestamp; + unsigned shot_order, kodak_cbpp, filters, exif_cfa, unique_id; + off_t strip_offset, data_offset; + off_t thumb_offset, meta_offset, profile_offset; + unsigned thumb_length, meta_length, profile_length; + unsigned thumb_misc, *oprof, fuji_layout, shot_select, multi_out; + unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress; + unsigned black, cblack[8], maximum, mix_green, raw_color, zero_is_bad; + unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error; + unsigned tile_width, tile_length, gpsdata[32], load_flags; + ushort raw_height, raw_width, height, width, top_margin, left_margin; + ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height; + int flip, tiff_flip, colors; + double pixel_aspect; + double aber[4]; + double gamm[6]; + dcrawImage_t image; + ushort white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4]; + float bright, user_mul[4], threshold; + + int half_size, four_color_rgb, document_mode, highlight; + int verbose, use_auto_wb, use_camera_wb, use_camera_matrix; + int output_color, output_bps, output_tiff, med_passes; + int no_auto_bright; + unsigned greybox[4] ; + + float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; + + int histogram[4][0x2000]; + void (DCraw::*write_thumb)(), (DCraw::*write_fun)(); + void (DCraw::*load_raw)(), (DCraw::*thumb_load_raw)(); + jmp_buf failure; + + unsigned huff[1024]; // static inside foveon_decoder + + struct decode { + struct decode *branch[2]; + int leaf; + } first_decode[2048], *second_decode, *free_decode; + + struct tiff_ifd { + int width, height, bps, comp, phint, offset, flip, samples, bytes; + } tiff_ifd[10]; + + struct ph1 { + int format, key_off, black, black_off, split_col, tag_21a; + float tag_210; + } ph1; + + struct jhead { + int bits, high, wide, clrs, sraw, psv, restart, vpred[6]; + ushort *huff[6], *free[4], *row; + }; + + struct tiff_tag { + ushort tag, type; + int count; + union { char c[4]; short s[2]; int i; } val; + }; + + struct tiff_hdr { + ushort order, magic; + int ifd; + ushort pad, ntag; + struct tiff_tag tag[23]; + int nextifd; + ushort pad2, nexif; + struct tiff_tag exif[4]; + ushort pad3, ngps; + struct tiff_tag gpst[10]; + short bps[4]; + int rat[10]; + unsigned gps[26]; + char desc[512], make[64], model[64], soft[32], date[20], artist[64]; + }; +protected: + +int fc (int row, int col); +void merror (void *ptr, const char *where); +void derror(); +ushort sget2 (uchar *s); +ushort get2(); +unsigned sget4 (uchar *s); +unsigned get4(); +unsigned getint (int type); +float int_to_float (int i); +double getreal (int type); +void read_shorts (ushort *pixel, int count); +void canon_600_fixed_wb (int temp); +int canon_600_color (int ratio[2], int mar); +void canon_600_auto_wb(); +void canon_600_coeff(); +void canon_600_load_raw(); +void remove_zeroes(); +int canon_s2is(); + +// getbithuff(int nbits, ushort *huff); +class getbithuff_t +{ +public: + getbithuff_t(DCraw *p,IMFILE *&i, unsigned &z):parent(p),bitbuf(0),vbits(0),reset(0),ifp(i),zero_after_ff(z){} + unsigned operator()(int nbits, ushort *huff); + +private: + void derror(){ + parent->derror(); + } + DCraw *parent; + unsigned bitbuf; + int vbits, reset; + IMFILE *&ifp; + unsigned &zero_after_ff; +}; +getbithuff_t getbithuff; + +ushort * make_decoder_ref (const uchar **source); +ushort * make_decoder (const uchar *source); +void crw_init_tables (unsigned table, ushort *huff[2]); +int canon_has_lowbits(); +void canon_compressed_load_raw(); +int ljpeg_start (struct jhead *jh, int info_only); +void ljpeg_end (struct jhead *jh); +int ljpeg_diff (ushort *huff); +ushort * ljpeg_row (int jrow, struct jhead *jh); +void lossless_jpeg_load_raw(); + +void canon_sraw_load_raw(); +void adobe_copy_pixel (int row, int col, ushort **rp); +void adobe_dng_load_raw_lj(); +void adobe_dng_load_raw_nc(); +void pentax_load_raw(); +void nikon_compressed_load_raw(); +int nikon_is_compressed(); +int nikon_e995(); +int nikon_e2100(); +void nikon_3700(); +int minolta_z2(); +void fuji_load_raw(); +void ppm_thumb(); +void layer_thumb(); +void rollei_thumb(); +void rollei_load_raw(); +int bayer (unsigned row, unsigned col); +void phase_one_flat_field (int is_float, int nc); +void phase_one_correct(); +void phase_one_load_raw(); + +// ph1_bithuff(int nbits, ushort *huff); +class ph1_bithuff_t { +public: + ph1_bithuff_t(DCraw *p,IMFILE *&i,short &o):parent(p),bitbuf(0),vbits(0),ifp(i),order(o){} + unsigned operator()(int nbits, ushort *huff); +private: + unsigned get4(){ + return parent->get4(); + } + DCraw *parent; + short ℴ + IMFILE *&ifp; + UINT64 bitbuf; + int vbits; +}; +ph1_bithuff_t ph1_bithuff; + +void phase_one_load_raw_c(); +void hasselblad_load_raw(); +void leaf_hdr_load_raw(); +void unpacked_load_raw(); +void sinar_4shot_load_raw(); +void imacon_full_load_raw(); +void packed_load_raw(); +void nokia_load_raw(); + +// pana_bits(int nbits); +class pana_bits_t{ +public: + pana_bits_t(IMFILE *&i,unsigned &u):ifp(i),load_flags(u){} + unsigned operator()(int nbits); +private: + IMFILE *&ifp; + unsigned &load_flags; + uchar buf[0x4000]; + int vbits; +}; +pana_bits_t pana_bits; + +void panasonic_load_raw(); +void olympus_load_raw(); +void minolta_rd175_load_raw(); +void quicktake_100_load_raw(); +void kodak_radc_load_raw(); + +void kodak_jpeg_load_raw(); +void kodak_dc120_load_raw(); +void eight_bit_load_raw(); +void kodak_yrgb_load_raw(); +void kodak_262_load_raw(); +int kodak_65000_decode (short *out, int bsize); +void kodak_65000_load_raw(); +void kodak_ycbcr_load_raw(); +void kodak_rgb_load_raw(); +void kodak_thumb_load_raw(); + +// sony_decrypt(unsigned *data, int len, int start, int key); +class sony_decrypt_t{ +public: + void operator()(unsigned *data, int len, int start, int key); +private: + unsigned pad[128], p; +}; +sony_decrypt_t sony_decrypt; + +void sony_load_raw(); +void sony_arw_load_raw(); +void sony_arw2_load_raw(); +void smal_decode_segment (unsigned seg[2][2], int holes); +void smal_v6_load_raw(); + +int median4 (int *p); +void fill_holes (int holes); +void smal_v9_load_raw(); + +void foveon_decoder (unsigned size, unsigned code); +void foveon_thumb(); +void foveon_load_camf(); +void foveon_load_raw(); +const char * foveon_camf_param (const char *block, const char *param); +void *foveon_camf_matrix (unsigned dim[3], const char *name); +int foveon_fixed (void *ptr, int size, const char *name); +float foveon_avg (short *pix, int range[2], float cfilt); +short *foveon_make_curve (double max, double mul, double filt); +void foveon_make_curves(short **curvep, float dq[3], float div[3], float filt); +int foveon_apply_curve (short *curve, int i); +void foveon_interpolate(); + +void bad_pixels (const char *cfname); +void subtract (const char *fname); +void gamma_curve (double pwr, double ts, int mode, int imax); +void pseudoinverse (double (*in)[3], double (*out)[3], int size); +void cam_xyz_coeff (double cam_xyz[4][3]); +void hat_transform (float *temp, float *base, int st, int size, int sc); +void wavelet_denoise(); +void scale_colors(); +void pre_interpolate(); +void border_interpolate (int border); +void lin_interpolate(); +void vng_interpolate(); +void ppg_interpolate(); +void ahd_interpolate(); +void median_filter(); +void blend_highlights(); +void recover_highlights(); + +void tiff_get (unsigned base, unsigned *tag, unsigned *type, unsigned *len, unsigned *save); +void parse_thumb_note (int base, unsigned toff, unsigned tlen); +int parse_tiff_ifd (int base); +void parse_makernote (int base, int uptag); +void get_timestamp (int reversed); +void parse_exif (int base); +void parse_gps (int base); +void romm_coeff (float romm_cam[3][3]); +void parse_mos (int offset); +void linear_table (unsigned len); +void parse_kodak_ifd (int base); + +void parse_minolta (int base); +int parse_tiff (int base); +void apply_tiff(); +void parse_external_jpeg(); +void ciff_block_1030(); +void parse_ciff (int offset, int length); +void parse_rollei(); +void parse_sinar_ia(); +void parse_phase_one (int base); +void parse_fuji (int offset); +int parse_jpeg (int offset); +void parse_riff(); +void parse_smal (int offset, int fsize); +void parse_cine(); +char *foveon_gets (int offset, char *str, int len); +void parse_foveon(); + +void adobe_coeff (const char *make, const char *model); +void simple_coeff (int index); +short guess_byte_order (int words); +float find_green (int bps, int bite, int off0, int off1); +void identify(); +void apply_profile (const char *input, const char *output); +void convert_to_rgb(); +void fuji_rotate(); +void stretch(); +int flip_index (int row, int col); +void tiff_set (ushort *ntag,ushort tag, ushort type, int count, int val); +void tiff_head (struct tiff_hdr *th, int full); +void jpeg_thumb(); +void write_ppm_tiff(); + +}; + + +#endif //DCRAW_H diff --git a/rtengine/dcraw.patch b/rtengine/dcraw.patch index c2962966d..b759638ee 100644 --- a/rtengine/dcraw.patch +++ b/rtengine/dcraw.patch @@ -1,5 +1,5 @@ ---- dcraw.c 2010-10-29 15:11:49.000000000 +0200 -+++ dcraw.cc 2010-11-02 19:02:54.000000000 +0100 +--- dcraw.c 2010-11-11 20:35:59.000000000 -0500 ++++ dcraw.cc 2010-11-15 21:14:19.000000000 -0500 @@ -1,3 +1,15 @@ +/*RT*/#include +/*RT*/#include @@ -177,7 +177,7 @@ unsigned c; if (nbits == -1) -@@ -1560,8 +1600,8 @@ +@@ -1563,8 +1603,8 @@ unsigned CLASS ph1_bithuff (int nbits, ushort *huff) { @@ -188,7 +188,7 @@ unsigned c; if (nbits == -1) -@@ -1823,8 +1863,8 @@ +@@ -1828,8 +1868,8 @@ unsigned CLASS pana_bits (int nbits) { @@ -199,7 +199,7 @@ int byte; if (!nbits) return vbits=0; -@@ -2113,11 +2153,11 @@ +@@ -2118,11 +2158,11 @@ METHODDEF(boolean) fill_input_buffer (j_decompress_ptr cinfo) { @@ -213,7 +213,7 @@ cinfo->src->next_input_byte = jpeg_buffer; cinfo->src->bytes_in_buffer = nbytes; return TRUE; -@@ -2391,7 +2431,7 @@ +@@ -2396,7 +2436,7 @@ void CLASS sony_decrypt (unsigned *data, int len, int start, int key) { @@ -222,7 +222,7 @@ if (start) { for (p=0; p < 4; p++) -@@ -2638,7 +2678,7 @@ +@@ -2643,7 +2683,7 @@ void CLASS foveon_decoder (unsigned size, unsigned code) { @@ -231,7 +231,7 @@ struct decode *cur; int i, len; -@@ -3760,15 +3800,18 @@ +@@ -3765,15 +3805,18 @@ } } if (filters && colors == 3) { @@ -259,7 +259,16 @@ } void CLASS border_interpolate (int border) -@@ -4817,7 +4860,7 @@ +@@ -4452,7 +4495,7 @@ + } + if (tag == 0xd && type == 7 && get2() == 0xaaaa) { + fread (buf97, 1, sizeof buf97, ifp); +- i = (uchar *) memmem (buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; ++ i = (uchar *) memmem ((char*) buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; + if (i < 70 && buf97[i] < 3) + flip = "065"[buf97[i]]-'0'; + } +@@ -4836,7 +4879,7 @@ unsigned sony_curve[] = { 0,0,0,0,0,4095 }; unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; struct jhead jh; @@ -268,7 +277,7 @@ if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0]) return 1; -@@ -5225,12 +5268,13 @@ +@@ -5254,12 +5297,13 @@ fread (buf, sony_length, 1, ifp); sony_decrypt (buf, sony_length/4, 1, sony_key); sfp = ifp; @@ -287,16 +296,16 @@ ifp = sfp; free (buf); } -@@ -5256,6 +5300,8 @@ - int doff, max_samp=0, raw=-1, thm=-1, i; - struct jhead jh; +@@ -5284,6 +5328,8 @@ + { + int doff; -+ /*RT*/ exif_base = base; ++ /*RT*/ if (exif_base == -1) exif_base = base; + fseek (ifp, base, SEEK_SET); order = get2(); - if (order != 0x4949 && order != 0x4d4d) return; -@@ -5424,7 +5470,7 @@ + if (order != 0x4949 && order != 0x4d4d) return 0; +@@ -5458,7 +5504,7 @@ { const char *file, *ext; char *jname, *jfile, *jext; @@ -305,7 +314,7 @@ ext = strrchr (ifname, '.'); file = strrchr (ifname, '/'); -@@ -5452,7 +5498,8 @@ +@@ -5486,7 +5532,8 @@ *jext = '0'; } if (strcmp (jname, ifname)) { @@ -315,19 +324,20 @@ if (verbose) fprintf (stderr,_("Reading metadata from %s ...\n"), jname); parse_tiff (12); -@@ -5790,7 +5837,11 @@ +@@ -5824,7 +5871,11 @@ order = get2(); hlen = get4(); if (get4() == 0x48454150) /* "HEAP" */ +- parse_ciff (save+hlen, len-hlen); +/*RT*/ { +/*RT*/ ciff_base = save+hlen; +/*RT*/ ciff_len = len-hlen; - parse_ciff (save+hlen, len-hlen); ++ parse_ciff (save+hlen, len-hlen); +/*RT*/ } - parse_tiff (save+6); + if (parse_tiff (save+6)) apply_tiff(); fseek (ifp, save+len, SEEK_SET); } -@@ -6738,6 +6789,12 @@ +@@ -6845,6 +6896,12 @@ fread (head, 1, 32, ifp); fseek (ifp, 0, SEEK_END); flen = fsize = ftell(ifp); @@ -340,43 +350,37 @@ if ((cp = (char *) memmem (head, 32, "MMMM", 4)) || (cp = (char *) memmem (head, 32, "IIII", 4))) { parse_phase_one (cp-head); -@@ -6745,6 +6802,8 @@ +@@ -6852,6 +6909,8 @@ } else if (order == 0x4949 || order == 0x4d4d) { if (!memcmp (head+6,"HEAPCCDR",8)) { data_offset = hlen; +/*RT*/ ciff_base = hlen; +/*RT*/ ciff_len = fsize - hlen; parse_ciff (hlen, flen - hlen); - } else { - parse_tiff(0); -@@ -6858,6 +6917,8 @@ - if (height == 3136 && width == 4736) /* Pentax K-7 */ - { height = 3122; width = 4684; - top_margin = 2; filters = 0x16161616; } -+ if (height == 2868 && width == 4352) /* Pentax K-x */ -+ width = 4308; - if (height == 3014 && width == 4096) /* Ricoh GX200 */ - width = 4014; - if (dng_version) { -@@ -7191,6 +7252,8 @@ + } else if (parse_tiff(0)) apply_tiff(); + } else if (!memcmp (head,"\xff\xd8\xff\xe1",4) && +@@ -7331,6 +7390,11 @@ } else if (!strcmp(model,"D1X")) { width -= 4; pixel_aspect = 0.5; + } else if (!strcmp(model,"D7000")) { + width -= 40; ++ } else if (!strcmp(model,"D3100")) { ++ width -= 24; ++ left_margin = 4; } else if (!strcmp(model,"D40X") || !strcmp(model,"D60") || !strcmp(model,"D80") || -@@ -7405,7 +7468,7 @@ - } else if (!strcmp(model,"K20D")) { - filters = 0x16161616; +@@ -7548,7 +7612,7 @@ + } else if (!strcmp(model,"*ist DS")) { + height -= 2; } else if (!strcmp(model,"K-x")) { - width = 4309; + width = 4308; filters = 0x16161616; } else if (!strcmp(model,"Optio S")) { if (fsize == 3178560) { -@@ -8494,13 +8557,13 @@ +@@ -8560,13 +8624,13 @@ FORCC ppm [col*colors+c] = curve[image[soff][c]] >> 8; else FORCC ppm2[col*colors+c] = curve[image[soff][c]]; if (output_bps == 16 && !output_tiff && htons(0x55aa) != 0x55aa) @@ -392,7 +396,7 @@ { int arg, status=0; int timestamp_only=0, thumbnail_only=0, identify_only=0; -@@ -8613,7 +8676,7 @@ +@@ -8679,7 +8743,7 @@ case 'i': identify_only = 1; break; case 'c': write_to_stdout = 1; break; case 'v': verbose = 1; break; @@ -401,7 +405,7 @@ case 'f': four_color_rgb = 1; break; case 'A': FORC4 greybox[c] = atoi(argv[arg++]); case 'a': use_auto_wb = 1; break; -@@ -8877,3 +8940,598 @@ +@@ -8943,3 +9007,594 @@ } return status; } @@ -558,6 +562,10 @@ + } + free(image); // we don't need this anymore + } ++ else ++ { ++ fclose(ifp); ++ } + return 0; +} + @@ -662,18 +670,10 @@ + rml.ciffBase = ciff_base; + rml.ciffLength = ciff_len; + -+ char *thumb_buffer = (char *)malloc(thumb_length+64); // malloc instead of on the stack. -+ if ( thumb_buffer == NULL ) -+ { -+ printf("DCRAW: failed3\n"); -+ return NULL; -+ } -+ fseek(ifp,thumb_offset,SEEK_SET); -+ fread(thumb_buffer,1,thumb_length,ifp); ++ rtengine::Thumbnail* tpp = rtengine::Thumbnail::loadFromMemory(fdata(thumb_offset,ifp),thumb_length,w,h,fixwh); ++ + fclose(ifp); + -+ rtengine::Thumbnail* tpp = rtengine::Thumbnail::loadFromMemory(thumb_buffer,thumb_length,w,h,fixwh); -+ free(thumb_buffer); + if ( tpp == 0 ) + { + printf("DCRAW: failed4\n"); @@ -890,7 +890,7 @@ + tpp->aeHistogram = new unsigned int[65536>>tpp->aeHistCompression]; + memset (tpp->aeHistogram, 0, (65536>>tpp->aeHistCompression)*sizeof(int)); + int radd = 4; -+ int gadd = 2; ++ int gadd = 4; + int badd = 4; + if (!filter) + radd = gadd = badd = 1; @@ -907,11 +907,11 @@ + } + for (int j=start; jaeHistogram[image[i* ::width+j][1]>>tpp->aeHistCompression]+=gadd; ++ tpp->aeHistogram[CLIP((int)(tpp->camwbGreen*image[i* ::width+j][1]))>>tpp->aeHistCompression]+=gadd; + else if (FISRED(filter,i,j)) -+ tpp->aeHistogram[image[i* ::width+j][0]>>tpp->aeHistCompression]+=radd; ++ tpp->aeHistogram[CLIP((int)(tpp->camwbRed*image[i* ::width+j][0]))>>tpp->aeHistCompression]+=radd; + else if (FISBLUE(filter,i,j)) -+ tpp->aeHistogram[image[i* ::width+j][2]>>tpp->aeHistCompression]+=badd; ++ tpp->aeHistogram[CLIP((int)(tpp->camwbBlue*image[i* ::width+j][2]))>>tpp->aeHistCompression]+=badd; + } + +t5.set (); diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index b272728ec..b8e62a867 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -167,7 +167,7 @@ void Crop::update (int todo, bool internal) { // shadows & highlights & tone curve & convert to cielab if (todo & M_RGBCURVE) - parent->ipf.rgbProc (baseCrop, laboCrop, parent->hltonecurve, parent->shtonecurve, parent->tonecurve, cshmap); + parent->ipf.rgbProc (baseCrop, laboCrop, parent->hltonecurve, parent->shtonecurve, parent->tonecurve, cshmap, params.toneCurve.saturation); // apply luminance operations @@ -180,6 +180,7 @@ void Crop::update (int todo, bool internal) { if (skip==1) { parent->ipf.impulsedenoise (labnCrop); + parent->ipf.defringe (labnCrop); parent->ipf.lumadenoise (labnCrop, cbuffer); parent->ipf.colordenoise (labnCrop, cbuffer); parent->ipf.dirpyrdenoise (labnCrop); diff --git a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc index c6b1a3902..cf7f1c576 100644 --- a/rtengine/dfmanager.cc +++ b/rtengine/dfmanager.cc @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include @@ -103,10 +103,12 @@ std::list& dfInfo::getHotPixels() } /* updateRawImage() load into ri the actual pixel data from pathname if there is a single shot * otherwise load each file from the pathNames list and extract a template from the media; - * the first file is used also for reading all information other than pixels + * the first file is used also for reading all information other than pixels */ void dfInfo::updateRawImage() { + int H = ri->get_height(); + int W = ri->get_width(); typedef unsigned int acc_t; if( pathNames.size() >0 ){ std::list::iterator iName = pathNames.begin(); @@ -115,29 +117,31 @@ void dfInfo::updateRawImage() delete ri; ri=NULL; }else{ - - acc_t **acc = new acc_t*[ri->height]; - for( int row=0; rowheight;row++) - acc[row] = new acc_t[ri->width*(ri->filters?1:3)]; + ri->compress_image(); + int rSize = W*(ri->isBayer()?1:3); + acc_t **acc = new acc_t*[H]; + for( int row=0; rowheight; row++) - for (int col = 0; col < ri->width * (ri->filters ? 1 : 3); col++) + for (int row = 0; row < H; row++) + for (int col = 0; col < rSize; col++) acc[row][col] = ri->data[row][col]; int nFiles = 1; // First file data already loaded for( iName++; iName != pathNames.end(); iName++){ RawImage* temp = new RawImage(*iName); if( !temp->loadRaw(true)){ + temp->compress_image(); //\ TODO would be better working on original, because is temporary nFiles++; - if( ri->filters ){ - for( int row=0; rowheight;row++){ - for( int col=0; col < ri->width;col++) + if( ri->isBayer() ){ + for( int row=0; rowdata[row][col]; } }else{ - for( int row=0; rowheight;row++){ - for( int col=0; col < ri->width;col++){ + for( int row=0; rowdata[row][3*col+0]; acc[row][3*col+1] += temp->data[row][3*col+1]; acc[row][3*col+2] += temp->data[row][3*col+2]; @@ -147,8 +151,8 @@ void dfInfo::updateRawImage() } delete temp; } - for (int row = 0; row < ri->height; row++){ - for (int col = 0; col < ri->width * (ri->filters ? 1 : 3); col++) + for (int row = 0; row < H; row++){ + for (int col = 0; col < rSize; col++) ri->data[row][col] = acc[row][col] / nFiles; delete [] acc[row]; } @@ -159,16 +163,17 @@ void dfInfo::updateRawImage() if( ri->loadRaw(true)){ delete ri; ri=NULL; - } + }else + ri->compress_image(); } } void dfInfo::updateBadPixelList( RawImage *df ) { const int threshold=10; - if( df->filters ){ - for( int row=2; rowheight-2; row++) - for( int col=2; col < df->width-2; col++){ + if( df->isBayer() ){ + for( int row=2; rowget_height()-2; row++) + for( int col=2; col < df->get_width()-2; col++){ int m = (df->data[row-2][col-2] + df->data[row-2][col] + df->data[row-2][col+2]+ df->data[row][col-2] + df->data[row][col+2]+ df->data[row+2][col-2] + df->data[row+2][col] + df->data[row+2][col+2])/8; @@ -176,8 +181,8 @@ void dfInfo::updateBadPixelList( RawImage *df ) badPixels.push_back( badPix(col,row) ); } }else{ - for( int row=1; rowheight-1; row++) - for( int col=1; col < df->width-1; col++){ + for( int row=1; rowget_height()-1; row++) + for( int col=1; col < df->get_width()-1; col++){ int m[3]; for( int c=0; c<3;c++){ m[c] = (df->data[row-1][3*(col-1)+c] + df->data[row-1][3*col+c] + df->data[row-1][3*(col+1)+c]+ @@ -189,7 +194,7 @@ void dfInfo::updateBadPixelList( RawImage *df ) } } if( settings->verbose ){ - printf( "Extracted %u pixels from darkframe %s\n", badPixels.size(),df->fname.c_str() ); + printf( "Extracted %zu pixels from darkframe %s\n", badPixels.size(),df->get_filename().c_str() ); } } @@ -255,19 +260,19 @@ dfInfo *DFManager::addFileInfo(const Glib::ustring &filename ) int res = ri.loadRaw(false); // Read informations about shot if( !res ){ /* Files are added in the map, divided by same maker/model,ISO and shutter*/ - std::string key( dfInfo::key(ri.make, ri.model,(int)ri.iso_speed,ri.shutter) ); + std::string key( dfInfo::key(ri.get_maker(), ri.get_model(),(int)ri.get_ISOspeed(),ri.get_shutter()) ); dfList_t::iterator iter = dfList.find( key ); if( iter == dfList.end() ){ - dfInfo n(filename, ri.make, ri.model,(int)ri.iso_speed,ri.shutter,ri.timestamp); + dfInfo n(filename, ri.get_maker(), ri.get_model(),(int)ri.get_ISOspeed(),ri.get_shutter(),ri.get_timestamp()); iter = dfList.insert(std::pair< std::string,dfInfo>( key,n ) ); }else{ - while( iter != dfList.end() && iter->second.key() == key && ABS(iter->second.timestamp - ri.timestamp) >60*60*6 ) // 6 hour difference + while( iter != dfList.end() && iter->second.key() == key && ABS(iter->second.timestamp - ri.get_timestamp()) >60*60*6 ) // 6 hour difference iter++; if( iter != dfList.end() ) iter->second.pathNames.push_back( filename ); else{ - dfInfo n(filename, ri.make, ri.model,(int)ri.iso_speed,ri.shutter,ri.timestamp); + dfInfo n(filename, ri.get_maker(), ri.get_model(),(int)ri.get_ISOspeed(),ri.get_shutter(),ri.get_timestamp()); iter = dfList.insert(std::pair< std::string,dfInfo>( key,n ) ); } } diff --git a/rtengine/dfmanager.h b/rtengine/dfmanager.h index 73f5ba822..16b9d4e88 100644 --- a/rtengine/dfmanager.h +++ b/rtengine/dfmanager.h @@ -20,7 +20,7 @@ #include #include #include -#include +#include namespace rtengine{ diff --git a/rtengine/fast_demo.cc b/rtengine/fast_demo.cc index 7bbafb04c..5396fea07 100644 --- a/rtengine/fast_demo.cc +++ b/rtengine/fast_demo.cc @@ -25,7 +25,14 @@ //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +static float dirwt[0x10000]; +static void __attribute__((constructor)) setup_dirwt() +{ + //set up directional weight function + for (int i=0; i<0x10000; i++) + dirwt[i] = 1.0/SQR(1.0+i); +} void RawImageSource::fast_demo(int winx, int winy, int winw, int winh) { //int winx=0, winy=0; @@ -40,10 +47,12 @@ void RawImageSource::fast_demo(int winx, int winy, int winw, int winh) { #define bord 4 - int clip_pt = 4*65535*ri->defgain; + int clip_pt = 4*65535*initialGain; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - +#pragma omp parallel + { +#pragma omp for //first, interpolate borders using bilinear for (int i=0; isetProgress(0.05); //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - float * dirwt = new float [0x20000]; + - //set up directional weight function - for (int i=0; i<0x10000; i++) - dirwt[i] = 1.0/SQR(1.0+i); - -#pragma omp parallel - { #pragma omp for // interpolate G using gradient weights diff --git a/rtengine/green_equil_RT.cc b/rtengine/green_equil_RT.cc index e7f5a00e2..c4bbf1481 100644 --- a/rtengine/green_equil_RT.cc +++ b/rtengine/green_equil_RT.cc @@ -1,31 +1,18 @@ // CFA pixel cleaning via directional average -// by Emil Martinec +// © Emil Martinec // 2/18/2010 #define TS 256 // Tile size -#define CLASS -/*#define ushort UshORt - typedef unsigned char uchar; - typedef unsigned short ushort;*/ - -#include -#include -#include -#include -#include #include -#include -#include #include -#include #include #define SQR(x) ((x)*(x)) -//void CLASS green_equilibrate()//for dcraw implementation -void CLASS RawImageSource::green_equilibrate(float thresh) +//void green_equilibrate()//for dcraw implementation +void RawImageSource::green_equilibrate(float thresh) { // local variables static const int border=8; diff --git a/rtengine/hlmultipliers.cc b/rtengine/hlmultipliers.cc index 1cd1451e6..5f3271baa 100644 --- a/rtengine/hlmultipliers.cc +++ b/rtengine/hlmultipliers.cc @@ -248,9 +248,9 @@ void RawImageSource::updateHLRecoveryMap_ColorPropagation () { for (int i=32; ifilters) && red[j] > maxr) maxr = red[j]; - if ((ISGREEN(ri,i,j) || !ri->filters) && green[i][j] > maxg) maxg = green[i][j]; - if ((ISBLUE(ri,i,j) || !ri->filters) && blue[j] > maxb) maxb = blue[j]; + if ((ri->ISRED(i,j) || !ri->isBayer()) && red[j] > maxr) maxr = red[j]; + if ((ri->ISGREEN(i,j) || !ri->isBayer()) && green[i][j] > maxg) maxg = green[i][j]; + if ((ri->ISBLUE(i,j) || !ri->isBayer()) && blue[j] > maxb) maxb = blue[j]; } } delete [] red; diff --git a/rtengine/imagedata.h b/rtengine/imagedata.h index e00457fb4..c453ae353 100644 --- a/rtengine/imagedata.h +++ b/rtengine/imagedata.h @@ -20,7 +20,7 @@ #define __IMAGEDATA_H__ #include -#include +#include #include #include #include diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 432fafae2..961362e95 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -24,11 +24,6 @@ #include #include #include -extern "C" { -#include "jdatasrc.c" -#include -#include -} #ifdef WIN32 #include #else @@ -36,6 +31,11 @@ extern "C" { #endif #include #include +extern "C" { +#include "jdatasrc.c" +#include +#include +} Glib::ustring safe_locale_to_utf8 (const std::string& src); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 09f1c2227..ead9e731a 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -167,7 +167,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { progress ("Exposure curve & CIELAB conversion...",100*readyphase/numofphases); if (todo & M_RGBCURVE) { CurveFactory::complexCurve (params.toneCurve.expcomp, params.toneCurve.black/65535.0, params.toneCurve.hlcompr, params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast, imgsrc->getDefGain(), imgsrc->getGamma(), true, params.toneCurve.curve, vhist16, hltonecurve, shtonecurve, tonecurve, bcrgbhist, scale==1 ? 1 : 1); - ipf.rgbProc (oprevi, oprevl, hltonecurve, shtonecurve, tonecurve, shmap); + ipf.rgbProc (oprevi, oprevl, hltonecurve, shtonecurve, tonecurve, shmap, params.toneCurve.saturation); // recompute luminance histogram memset (lhist16, 0, 65536*sizeof(int)); @@ -178,7 +178,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { readyphase++; if (todo & M_LUMACURVE) { - CurveFactory::complexCurve (0.0, 0.0, 0.0, 0.0, params.labCurve.brightness, params.labCurve.contrast, 0.0, 0.0, false, params.labCurve.lcurve, lhist16, chroma_acurve, chroma_bcurve, lumacurve, bcLhist, scale==1 ? 1 : 16); + CurveFactory::complexCurve (0.0, 0.0, 0.0, 0.0, params.labCurve.brightness, params.labCurve.contrast, 0.0, 0.0, false, params.labCurve.lcurve, lhist16, dummy1, dummy2, lumacurve, bcLhist, scale==1 ? 1 : 16); CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.acurve, chroma_acurve, scale==1 ? 1 : 16); CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.bcurve, chroma_bcurve, scale==1 ? 1 : 16); } @@ -199,6 +199,10 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { progress ("Denoising luminance impulse...",100*readyphase/numofphases); ipf.impulsedenoise (nprevl); } + if (scale==1) { + progress ("Defringing...",100*readyphase/numofphases); + ipf.defringe (nprevl); + } if (scale==1) { progress ("Denoising luminance...",100*readyphase/numofphases); ipf.lumadenoise (nprevl, buffer); @@ -375,7 +379,7 @@ void ImProcCoordinator::updateHistograms (int x1, int y1, int x2, int y2) { memset (rhist, 0, 256*sizeof(int)); memset (ghist, 0, 256*sizeof(int)); memset (bhist, 0, 256*sizeof(int)); - + for (int i=y1; iL[i][j]/256]++; + } + + /*for (int i=0; i<256; i++) { + Lhist[i] = (int)(256*sqrt(Lhist[i])); + rhist[i] = (int)(256*sqrt(rhist[i])); + ghist[i] = (int)(256*sqrt(ghist[i])); + bhist[i] = (int)(256*sqrt(bhist[i])); + bcrgbhist[i] = (int)(256*sqrt(bcrgbhist[i])); + bcLhist[i] = (int)(256*sqrt(bcLhist[i])); + }*/ } void ImProcCoordinator::progress (Glib::ustring str, int pr) { diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index 81045c5f7..72bc17ac9 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -62,8 +62,10 @@ class ImProcCoordinator : public StagedImageProcessor { void freeAll (); - int hltonecurve [65536]; - int shtonecurve [65536]; + float dummy1 [65536]; + float dummy2 [65536]; + float hltonecurve [65536]; + float shtonecurve [65536]; int tonecurve [65536]; int lumacurve [65536]; diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index f1c36b898..9de1a368b 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -245,7 +245,7 @@ void ImProcFunctions::firstAnalysis (Image16* original, const ProcParams* params delete [] hist; } -void ImProcFunctions::rgbProc (Image16* working, LabImage* lab, int* hltonecurve, int* shtonecurve, int* tonecurve, SHMap* shmap) { +void ImProcFunctions::rgbProc (Image16* working, LabImage* lab, float* hltonecurve, float* shtonecurve, int* tonecurve, SHMap* shmap, int sat) { int h_th, s_th; if (shmap) { @@ -281,7 +281,17 @@ void ImProcFunctions::rgbProc (Image16* working, LabImage* lab, int* hltonecurve int tW = working->width; int tH = working->height; int r, g, b; - #pragma omp parallel for private(r, g, b,factor,mapval) if (multiThread) + float h, s, v; + float satparam,valparam; + int hue, hueband, hueres, nbrband; + double pi = M_PI; + + float* cossq = new float [8093]; + for (int i=0; i<8093; i++) + cossq[i] = SQR(cos(pi*(float)i/16384)); + + +#pragma omp parallel for private(r, g, b,factor,mapval,h,s,v,hue,hueband,hueres,nbrband,satparam,valparam) if (multiThread) for (int i=0; i0 ? (float)tonecurve1[Y]/Y : 1); - float rtonefactor = (r>0 ? (float)hltonecurve[r]/r : 1); - float gtonefactor = (g>0 ? (float)hltonecurve[g]/g : 1); - float btonefactor = (b>0 ? (float)hltonecurve[b]/b : 1); + //v = (float)hltonecurve[(int)(65535*v)]/65535; + + float rtonefactor = (r>0 ? (float)hltonecurve[r]/r : (float)hltonecurve[1]); + float gtonefactor = (g>0 ? (float)hltonecurve[g]/g : (float)hltonecurve[1]); + float btonefactor = (b>0 ? (float)hltonecurve[b]/b : (float)hltonecurve[1]); //float tonefactor = MIN(rtonefactor, MIN(gtonefactor,btonefactor)); float tonefactor = (rtonefactor+gtonefactor+btonefactor)/3; //float tonefactor = (0.299*rtonefactor+0.587*gtonefactor+0.114*btonefactor); @@ -346,9 +354,61 @@ void ImProcFunctions::rgbProc (Image16* working, LabImage* lab, int* hltonecurve b *= tonefactor; //brightness/contrast and user tone curve - r = tonecurve[r]; - g = tonecurve[g]; - b = tonecurve[b]; + //Y = (int)(0.299*r + 0.587*g + 0.114*b); + //tonefactor = (Y>0 ? (float)tonecurve[Y]/Y : 1); + //r *= tonefactor; + //g *= tonefactor; + //b *= tonefactor; + r = tonecurve[CLIP(r)]; + g = tonecurve[CLIP(g)]; + b = tonecurve[CLIP(b)]; + + if (abs(sat)>0.5 || params->hsvequalizer.enabled) { + rgb2hsv(r,g,b,h,s,v); + if (sat > 0.5) { + s = (1-(float)sat/100)*s+(float)sat/100*(1-SQR(SQR(1-s))); + } else { + if (sat < -0.5) + s *= 1+(float)sat/100; + } + //HSV equalizer + if (params->hsvequalizer.enabled) { + hue = (int)(65535*h); + hueres = hue & 8091;//location of hue within a band + hueband = (hue-hueres) >> 13;//divides hue range into 8 bands + nbrband = (hueband+1)&7; + + //shift hue + h = fmod(h + 0.0025*(params->hsvequalizer.hue[hueband] * cossq[hueres] + params->hsvequalizer.hue[nbrband] * (1-cossq[hueres])),1); + if (h<0) h +=1; + hue = (int)(65535*h); + hueres = hue & 8091;//location of hue within a band + hueband = (hue-hueres) >> 13;//divides hue range into 8 bands + nbrband = (hueband+1)&7; + + //change saturation + satparam = 0.01*(params->hsvequalizer.sat[hueband] * cossq[hueres] + params->hsvequalizer.sat[nbrband] * (1-cossq[hueres])); + if (satparam > 0.00001) { + s = (1-satparam)*s+satparam*(1-SQR(1-s)); + } else { + if (satparam < -0.00001) + s *= 1+satparam; + } + + //change value + valparam = 0.005*(params->hsvequalizer.val[hueband] * cossq[hueres] + params->hsvequalizer.val[nbrband] * (1-cossq[hueres])); + valparam *= (1-SQR(SQR(1-s))); + if (valparam > 0.00001) { + v = (1-valparam)*v+valparam*(1-SQR(1-v)); + } else { + if (valparam < -0.00001) + v *= (1+valparam); + } + } + hsv2rgb(h,s,v,r,g,b); + } + //hsv2rgb(h,s,v,r,g,b); + int x = (toxyz[0][0] * r + toxyz[1][0] * g + toxyz[2][0] * b) >> 15; int y = (toxyz[0][1] * r + toxyz[1][1] * g + toxyz[2][1] * b) >> 15; @@ -364,6 +424,9 @@ void ImProcFunctions::rgbProc (Image16* working, LabImage* lab, int* hltonecurve lab->b[i][j] = CLIPC(((cacheb[y] - cacheb[z]) * chroma_scale) >> 15); } } + + delete [] cossq; + } void ImProcFunctions::luminanceCurve (LabImage* lold, LabImage* lnew, int* curve, int row_from, int row_to) { @@ -374,22 +437,23 @@ void ImProcFunctions::luminanceCurve (LabImage* lold, LabImage* lnew, int* curve for (int j=0; jL[i][j] = curve[lold->L[i][j]]; } - - void ImProcFunctions::chrominanceCurve (LabImage* lold, LabImage* lnew, int channel, int* curve, int row_from, int row_to) { - int W = lold->W; - //int H = lold->H; - if (channel==0) { + +void ImProcFunctions::chrominanceCurve (LabImage* lold, LabImage* lnew, int channel, int* curve, int row_from, int row_to) { + + int W = lold->W; + //int H = lold->H; + if (channel==0) { + for (int i=row_from; ia[i][j] = curve[lold->a[i][j]+32768]-32768; + } + if (channel==1) { for (int i=row_from; ia[i][j] = curve[lold->a[i][j]+32768]-32768; - } - if (channel==1) { - for (int i=row_from; ib[i][j] = curve[lold->b[i][j]+32768]-32768; - } + lnew->b[i][j] = curve[lold->b[i][j]+32768]-32768; } +} #include "cubic.cc" @@ -479,6 +543,13 @@ void ImProcFunctions::colorCurve (LabImage* lold, LabImage* lnew) { impulse_nr (lab->L, lab->L, lab->W, lab->H, (float)params->impulseDenoise.thresh/20.0 ); } + void ImProcFunctions::defringe (LabImage* lab) { + + if (params->defringe.enabled && lab->W>=8 && lab->H>=8) + + PF_correct_RT(lab, lab, params->defringe.radius, params->defringe.threshold, false /*edges only*/ ); + } + void ImProcFunctions::dirpyrdenoise (LabImage* lab) { if (params->dirpyrDenoise.enabled && lab->W>=8 && lab->H>=8) @@ -551,7 +622,7 @@ void ImProcFunctions::getAutoExp (unsigned int* histogram, int histcompr, doubl double corr = pow(2.0, expcomp); // black point selection is based on the linear result (yielding better visual results) - bl = (int)(shc /* * corr*/); + bl = (int)(shc * corr); // compute the white point of the exp. compensated gamma corrected image double awg = (int)(CurveFactory::gamma2 (aw * corr / 65536.0) * 65536.0); @@ -560,19 +631,75 @@ void ImProcFunctions::getAutoExp (unsigned int* histogram, int histcompr, doubl for (int i=0; i<65536>>histcompr; i++) gavg += histogram[i] * CurveFactory::gamma2((int)(corr*(i< 1 ) h -= 1; + } +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void ImProcFunctions::hsv2rgb (float h, float s, float v, int &r, int &g, int &b) { + + float h1 = h*6; // sector 0 to 5 + int i = floor( h1 ); + float f = h1 - i; // fractional part of h + + float p = v * ( 1 - s ); + float q = v * ( 1 - s * f ); + float t = v * ( 1 - s * ( 1 - f ) ); + + float r1,g1,b1; + + if (i==0) {r1 = v; g1 = t; b1 = p;} + if (i==1) {r1 = q; g1 = v; b1 = p;} + if (i==2) {r1 = p; g1 = v; b1 = t;} + if (i==3) {r1 = p; g1 = q; b1 = v;} + if (i==4) {r1 = t; g1 = p; b1 = v;} + if (i==5) {r1 = v; g1 = p; b1 = q;} + + r = (int)((r1)*65535); + g = (int)((g1)*65535); + b = (int)((b1)*65535); +} + } diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index b8dc328ad..83c389a9d 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -79,7 +79,7 @@ class ImProcFunctions { bool needsTransform (); void firstAnalysis (Image16* working, const ProcParams* params, unsigned int* vhist16, double gamma); - void rgbProc (Image16* working, LabImage* lab, int* hltonecurve, int* shtonecurve, int* tonecurve, SHMap* shmap); + void rgbProc (Image16* working, LabImage* lab, float* hltonecurve, float* shtonecurve, int* tonecurve, SHMap* shmap, int sat); void luminanceCurve (LabImage* lold, LabImage* lnew, int* curve, int row_from, int row_to); void chrominanceCurve (LabImage* lold, LabImage* lnew, int channel, int* curve, int row_from, int row_to); void colorCurve (LabImage* lold, LabImage* lnew); @@ -109,6 +109,9 @@ class ImProcFunctions { void dirpyr_channel(unsigned short ** data_fine, unsigned short ** data_coarse, int width, int height, int * rangefn, int level, int scale, const double * mult ); void idirpyr_eq_channel(unsigned short ** data_coarse, unsigned short ** data_fine, int ** buffer, int width, int height, int level, const double * mult ); + void defringe (LabImage* lab); + void PF_correct_RT(LabImage * src, LabImage * dst, double radius, int thresh, bool edges); + Image8* lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch, Glib::ustring profile); Image16* lab2rgb16 (LabImage* lab, int cx, int cy, int cw, int ch, Glib::ustring profile); @@ -116,6 +119,9 @@ class ImProcFunctions { bool transCoord (int W, int H, std::vector &src, std::vector &red, std::vector &green, std::vector &blue, double ascaleDef = -1); void getAutoExp (unsigned int* histogram, int histcompr, double expcomp, double clip, double& br, int& bl); double getTransformAutoFill (int oW, int oH); + + void rgb2hsv (int r, int g, int b, float &h, float &s, float &v); + void hsv2rgb (float h, float s, float v, int &r, int &g, int &b); }; } #endif diff --git a/rtengine/init.cc b/rtengine/init.cc index eca8ed7ff..b340a4efa 100644 --- a/rtengine/init.cc +++ b/rtengine/init.cc @@ -36,8 +36,6 @@ int init (const Settings* s) { iccStore->parseDir (s->iccDirectory); CurveFactory::init (); ImProcFunctions::initCache (); - delete dcrMutex; - dcrMutex = new Glib::Mutex; delete lcmsMutex; lcmsMutex = new Glib::Mutex; dfm.init( s->darkFramesPath ); diff --git a/rtengine/myfile.h b/rtengine/myfile.h index 99c450d8f..997340017 100644 --- a/rtengine/myfile.h +++ b/rtengine/myfile.h @@ -86,6 +86,10 @@ inline int fread (void* dst, int es, int count, IMFILE* f) { } } +inline char* fdata(int offset, IMFILE* f) { + return f->data + offset; +} + int fscanf (IMFILE* f, const char* s ...); char* fgets (char* s, int n, IMFILE* f); #endif diff --git a/rtengine/procevents.h b/rtengine/procevents.h index fbe40fa1e..b4d316cf6 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -108,20 +108,28 @@ enum ProcEvent { EvPerspCorr=83, EvEqualizer=84, EvEqlEnabled=85, - EvDemosaic=86, - EvPreProcess=87, - EvIDNEnabled=88, - EvIDNThresh=89, - EvDPDNEnabled=90, - EvDPDNLuma=91, - EvDPDNChroma=92, - EvDPDNGamma=93, - EvDirPyrEqualizer=94, - EvDirPyrEqlEnabled=95, - EvLSaturation=96, - EvLaCurve=97, - EvLbCurve=98, - NUMOFEVENTS=99 + EvIDNEnabled=86, + EvIDNThresh=87, + EvDPDNEnabled=88, + EvDPDNLuma=89, + EvDPDNChroma=90, + EvDPDNGamma=91, + EvDirPyrEqualizer=92, + EvDirPyrEqlEnabled=93, + EvLSaturation=94, + EvLaCurve=95, + EvLbCurve=96, + EvDemosaic=97, + EvPreProcess=98, + EvSaturation=99, + EvHSVEqualizerH=100, + EvHSVEqualizerS=101, + EvHSVEqualizerV=102, + EvHSVEqEnabled=103, + EvDefringeEnabled=104, + EvDefringeRadius=105, + EvDefringeThreshold=106, + NUMOFEVENTS=107 }; } #endif diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 30d59dd0a..d89bc48c8 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -52,6 +52,7 @@ void ProcParams::setDefaults () { toneCurve.expcomp = 0; toneCurve.brightness = 0; toneCurve.contrast = 0; + toneCurve.saturation = 0; toneCurve.black = 0; toneCurve.hlcompr = 70; toneCurve.shcompr = 25; @@ -102,6 +103,10 @@ void ProcParams::setDefaults () { impulseDenoise.enabled = false; impulseDenoise.thresh = 50; + + defringe.enabled = false; + defringe.radius = 2.0; + defringe.threshold = 25; dirpyrDenoise.enabled = false; dirpyrDenoise.luma = 10; @@ -186,6 +191,13 @@ void ProcParams::setDefaults () { dirpyrequalizer.mult[i] = 1.0; } dirpyrequalizer.mult[4] = 0.0; + hsvequalizer.enabled = false; + for(int i = 0; i < 8; i ++) + { + hsvequalizer.sat[i] = 0; + hsvequalizer.val[i] = 0; + hsvequalizer.hue[i] = 0; + } raw.df_autoselect = false; raw.ca_autocorrect = false; raw.hotdeadpix_filt = false; @@ -214,6 +226,7 @@ int ProcParams::save (Glib::ustring fname) const { keyFile.set_double ("Exposure", "Compensation", toneCurve.expcomp); keyFile.set_integer ("Exposure", "Brightness", toneCurve.brightness); keyFile.set_integer ("Exposure", "Contrast", toneCurve.contrast); + keyFile.set_integer ("Exposure", "Saturation", toneCurve.saturation); keyFile.set_integer ("Exposure", "Black", toneCurve.black); keyFile.set_integer ("Exposure", "HighlightCompr", toneCurve.hlcompr); keyFile.set_integer ("Exposure", "ShadowCompr", toneCurve.shcompr); @@ -277,6 +290,10 @@ int ProcParams::save (Glib::ustring fname) const { keyFile.set_boolean ("Impulse Denoising", "Enabled", impulseDenoise.enabled); keyFile.set_integer ("Impulse Denoising", "Threshold", impulseDenoise.thresh); + // save defringe + keyFile.set_boolean ("Defringing", "Enabled", defringe.enabled); + keyFile.set_double ("Defringing", "Radius", defringe.radius); + keyFile.set_integer ("Defringing", "Threshold", defringe.threshold); // save dirpyrDenoise keyFile.set_boolean ("Directional Pyramid Denoising", "Enabled", dirpyrDenoise.enabled); @@ -378,6 +395,28 @@ int ProcParams::save (Glib::ustring fname) const { ss << "Mult" << i; keyFile.set_double("Directional Pyramid Equalizer", ss.str(), dirpyrequalizer.mult[i]); } + + // save hsv equalizer parameters + keyFile.set_boolean ("HSV Equalizer", "Enabled", hsvequalizer.enabled); + keyFile.set_string ("HSV Equalizer", "Channel", hsvequalizer.hsvchannel); + for(int i = 0; i < 8; i++) + { + std::stringstream ss; + ss << "Sat" << i; + keyFile.set_double("HSV Equalizer", ss.str(), hsvequalizer.sat[i]); + } + for(int i = 0; i < 8; i++) + { + std::stringstream ss; + ss << "Val" << i; + keyFile.set_double("HSV Equalizer", ss.str(), hsvequalizer.val[i]); + } + for(int i = 0; i < 8; i++) + { + std::stringstream ss; + ss << "Hue" << i; + keyFile.set_double("HSV Equalizer", ss.str(), hsvequalizer.hue[i]); + } // save RAW parameters keyFile.set_string ("RAW", "DarkFrame", raw.dark_frame ); @@ -443,7 +482,8 @@ if (keyFile.has_group ("Exposure")) { if (keyFile.has_key ("Exposure", "Compensation")) toneCurve.expcomp = keyFile.get_double ("Exposure", "Compensation"); if (keyFile.has_key ("Exposure", "Brightness")) toneCurve.brightness = keyFile.get_integer ("Exposure", "Brightness"); if (keyFile.has_key ("Exposure", "Contrast")) toneCurve.contrast = keyFile.get_integer ("Exposure", "Contrast"); - if (keyFile.has_key ("Exposure", "Black")) toneCurve.black = keyFile.get_integer ("Exposure", "Black"); + if (keyFile.has_key ("Exposure", "Saturation")) toneCurve.saturation = keyFile.get_integer ("Exposure", "Saturation"); + if (keyFile.has_key ("Exposure", "Black")) toneCurve.black = keyFile.get_integer ("Exposure", "Black"); if (keyFile.has_key ("Exposure", "HighlightCompr")) toneCurve.hlcompr = keyFile.get_integer ("Exposure", "HighlightCompr"); if (toneCurve.hlcompr > 100) toneCurve.hlcompr = 100; // older pp3 files can have values above 100. if (keyFile.has_key ("Exposure", "ShadowCompr")) toneCurve.shcompr = keyFile.get_integer ("Exposure", "ShadowCompr"); @@ -520,6 +560,13 @@ if (keyFile.has_group ("Color Shift")) { if (keyFile.has_key ("Color Shift", "ChannelB")) colorShift.b = keyFile.get_double ("Color Shift", "ChannelB"); } +// load defringe +if (keyFile.has_group ("Defringing")) { + if (keyFile.has_key ("Defringing", "Enabled")) defringe.enabled = keyFile.get_boolean ("Defringing", "Enabled"); + if (keyFile.has_key ("Defringing", "Radius")) defringe.radius = keyFile.get_double ("Defringing", "Radius"); + if (keyFile.has_key ("Defringing", "Threshold")) defringe.threshold = keyFile.get_integer ("Defringing", "Threshold"); +} + // load impulseDenoise if (keyFile.has_group ("Impulse Denoising")) { if (keyFile.has_key ("Impulse Denoising", "Enabled")) impulseDenoise.enabled = keyFile.get_boolean ("Impulse Denoising", "Enabled"); @@ -660,6 +707,29 @@ if (keyFile.has_group ("Directional Pyramid Equalizer")) { if(keyFile.has_key ("Directional Pyramid Equalizer", ss.str())) dirpyrequalizer.mult[i] = keyFile.get_double ("Directional Pyramid Equalizer", ss.str()); } } + + // load wavelet equalizer parameters +if (keyFile.has_group ("HSV Equalizer")) { + if (keyFile.has_key ("HSV Equalizer", "Enabled")) hsvequalizer.enabled = keyFile.get_boolean ("HSV Equalizer", "Enabled"); + for(int i = 0; i < 8; i ++) + { + std::stringstream ss; + ss << "Sat" << i; + if(keyFile.has_key ("HSV Equalizer", ss.str())) hsvequalizer.sat[i] = keyFile.get_double ("HSV Equalizer", ss.str()); + } + for(int i = 0; i < 8; i ++) + { + std::stringstream ss; + ss << "Val" << i; + if(keyFile.has_key ("HSV Equalizer", ss.str())) hsvequalizer.val[i] = keyFile.get_double ("HSV Equalizer", ss.str()); + } + for(int i = 0; i < 8; i ++) + { + std::stringstream ss; + ss << "Hue" << i; + if(keyFile.has_key ("HSV Equalizer", ss.str())) hsvequalizer.hue[i] = keyFile.get_double ("HSV Equalizer", ss.str()); + } +} // load raw settings if (keyFile.has_group ("RAW")) { @@ -730,6 +800,17 @@ bool operator==(const DirPyrEqualizerParams & a, const DirPyrEqualizerParams & b return true; } +bool operator==(const HSVEqualizerParams & a, const HSVEqualizerParams & b) { + if(a.enabled != b.enabled) + return false; + + for(int i = 0; i < 8; i++) { + if(a.sat[i] != b.sat[i] && a.val[i] != b.val[i] && a.hue[i] != b.hue[i]) + return false; + } + return true; +} + bool operator==(const ExifPair& a, const ExifPair& b) { return a.field == b.field && a.value == b.value; @@ -746,6 +827,7 @@ bool ProcParams::operator== (const ProcParams& other) { && toneCurve.brightness == other.toneCurve.brightness && toneCurve.black == other.toneCurve.black && toneCurve.contrast == other.toneCurve.contrast + && toneCurve.saturation == other.toneCurve.saturation && toneCurve.shcompr == other.toneCurve.shcompr && toneCurve.hlcompr == other.toneCurve.hlcompr && toneCurve.autoexp == other.toneCurve.autoexp @@ -786,6 +868,9 @@ bool ProcParams::operator== (const ProcParams& other) { && dirpyrDenoise.luma == other.dirpyrDenoise.luma && dirpyrDenoise.chroma == other.dirpyrDenoise.chroma && dirpyrDenoise.gamma == other.dirpyrDenoise.gamma + && defringe.enabled == other.defringe.enabled + && defringe.radius == other.defringe.radius + && defringe.threshold == other.defringe.threshold && lumaDenoise.enabled == other.lumaDenoise.enabled && lumaDenoise.radius == other.lumaDenoise.radius && lumaDenoise.edgetolerance == other.lumaDenoise.edgetolerance @@ -852,6 +937,7 @@ bool ProcParams::operator== (const ProcParams& other) { && icm.output == other.icm.output && equalizer == other.equalizer && dirpyrequalizer == other.dirpyrequalizer + && hsvequalizer == other.hsvequalizer && exif==other.exif && iptc==other.iptc; } diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 3b10d032a..5cafcbb7c 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -38,6 +38,7 @@ class ToneCurveParams { int brightness; int black; int contrast; + int saturation; int shcompr; int hlcompr; }; @@ -136,6 +137,18 @@ class ColorDenoiseParams { int amount; }; + /** + * Parameters of defringing + */ + class DefringeParams { + + public: + bool enabled; + double radius; + int threshold; + }; + + /** * Parameters of impulse denoising */ @@ -342,14 +355,27 @@ class EqualizerParams { }; /** - * Directional pyramid equalizer params - */ - class DirPyrEqualizerParams { - - public: - bool enabled; - double mult[8]; - }; +* Directional pyramid equalizer params +*/ +class DirPyrEqualizerParams { + + public: + bool enabled; + double mult[8]; +}; + +/** + * Wavelet equalizer params + */ +class HSVEqualizerParams { + + public: + bool enabled; + Glib::ustring hsvchannel; + int sat[8]; + int val[8]; + int hue[8]; +}; /** * Parameters for RAW demosaicing @@ -389,6 +415,7 @@ class ProcParams { ColorShiftParams colorShift; ///< Color shift parameters LumaDenoiseParams lumaDenoise; ///< Luminance denoising parameters ColorDenoiseParams colorDenoise; ///< Color denoising parameters + DefringeParams defringe; ///< Impulse denoising parameters ImpulseDenoiseParams impulseDenoise; ///< Impulse denoising parameters DirPyrDenoiseParams dirpyrDenoise; ///< Directional Pyramid denoising parameters SHParams sh; ///< Shadow/highlight enhancement parameters @@ -406,7 +433,8 @@ class ProcParams { ColorManagementParams icm; ///< profiles/color spaces used during the image processing EqualizerParams equalizer; ///< wavelet equalizer parameters RAWParams raw; ///< RAW parameters before demosaicing - DirPyrEqualizerParams dirpyrequalizer;///< directional pyramid equalizer parameters + DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid equalizer parameters + HSVEqualizerParams hsvequalizer; ///< hsv equalizer parameters std::vector exif; ///< List of modifications appplied on the exif tags of the input image std::vector iptc; ///< The IPTC tags and values to be saved to the output image int version; ///< Version of the file from which the parameters have been read diff --git a/rtengine/rawimage.cc b/rtengine/rawimage.cc new file mode 100644 index 000000000..6c2158464 --- /dev/null +++ b/rtengine/rawimage.cc @@ -0,0 +1,245 @@ +/* + * This file is part of RawTherapee. + * + * Created on: 20/nov/2010 + */ + +#include +#include +#include +#include + + +namespace rtengine{ + +extern Settings* settings; + +RawImage::RawImage( const Glib::ustring name ) +:allocation(NULL) +,data(NULL) +,profile_data(NULL) +,filename(name) +,prefilters(0) +{ +} + +RawImage::~RawImage() +{ + if(ifp) + fclose(ifp); + if( image ) + free(image); + if(allocation){ delete [] allocation; allocation=NULL;} + if(data){ delete [] data; data=NULL;} + if(profile_data){ delete [] profile_data; profile_data=NULL;} +} + +/* Similar to dcraw scale_colors for coeff. calculation, but without actual pixels scaling. + * need pixels in data[][] available + */ +int RawImage::get_colorsCoeff( float *pre_mul_, float *scale_mul_, int *cblack_ ) +{ + unsigned row, col, ur, uc, i, x, y, c, sum[8]; + unsigned W = this->get_width(); + unsigned H = this->get_height(); + int val, dark, sat; + double dsum[8], dmin, dmax; + + for (int c = 0; c < 4; c++){ + cblack_[c] = this->get_cblack(c) + this->get_black(); + pre_mul_[c] = this->get_pre_mul(c); + } + + if ( this->get_cam_mul(0) == -1 ) { + memset(dsum, 0, sizeof dsum); + for (row = 0; row < H; row += 8) + for (col = 0; col < W ; col += 8) { + memset(sum, 0, sizeof sum); + for (y = row; y < row + 8 && y < H; y++) + for (x = col; x < col + 8 && x < W; x++) + for (int c = 0; c < 3; c++) { + if (this->isBayer()) { + c = FC(y, x); + val = data[y][x]; + } else + val = data[y][3*x+c]; + if (val > this->get_white() - 25) + goto skip_block; + if ((val -= cblack_[c]) < 0) + val = 0; + sum[c] += val; + sum[c + 4]++; + if ( this->isBayer()) + break; + } + for (c = 0; c < 8; c++) + dsum[c] += sum[c]; +skip_block: ; + } + for (int c = 0; c < 4; c++) + if (dsum[c]) + pre_mul_[c] = dsum[c + 4] / dsum[c]; + }else{ + memset(sum, 0, sizeof sum); + for (row = 0; row < 8; row++) + for (col = 0; col < 8; col++) { + int c = FC(row, col); + if ((val = white[row][col] - cblack_[c]) > 0) + sum[c] += val; + sum[c + 4]++; + } + if (sum[0] && sum[1] && sum[2] && sum[3]) + for (int c = 0; c < 4; c++) + pre_mul_[c] = (float) sum[c + 4] / sum[c]; + else if (this->get_cam_mul(0) && this->get_cam_mul(2)){ + pre_mul_[0] = this->get_cam_mul(0); + pre_mul_[1] = this->get_cam_mul(1); + pre_mul_[2] = this->get_cam_mul(2); + pre_mul_[3] = this->get_cam_mul(3); + }else + fprintf(stderr, "Cannot use camera white balance.\n"); + } + if (pre_mul_[3] == 0) + pre_mul_[3] = this->get_colors() < 4 ? pre_mul_[1] : 1; + dark = this->get_black(); + sat = this->get_white(); + sat -= this->get_black(); + for (dmin = DBL_MAX, dmax = c = 0; c < 4; c++) { + if (dmin > pre_mul_[c]) + dmin = pre_mul_[c]; + if (dmax < pre_mul_[c]) + dmax = pre_mul_[c]; + } + + for (c = 0; c < 4; c++) + scale_mul_[c] = (pre_mul_[c] /= dmax) * 65535.0 / sat; + if (settings->verbose) { + fprintf(stderr,"Scaling with darkness %d, saturation %d, and\nmultipliers", dark, sat); + for (c = 0; c < 4; c++) + fprintf(stderr, " %f", pre_mul[c]); + fputc('\n', stderr); + } +} + +int RawImage::loadRaw (bool loadData, bool closeFile) +{ + ifname = filename.c_str(); + image = NULL; + verbose = settings->verbose; + oprof = NULL; + + ifp = gfopen (filename.c_str()); + if (!ifp) + return 3; + + thumb_length = 0; + thumb_offset = 0; + thumb_load_raw = 0; + use_camera_wb = 0; + highlight = 1; + half_size = 0; + + //***************** Read ALL raw file info + identify (); + if (!is_raw) { + fclose(ifp); + ifp=NULL; + return 2; + } + + if (flip==5) + this->rotate_deg = 270; + else if (flip==3) + this->rotate_deg = 180; + else if (flip==6) + this->rotate_deg = 90; + else + this->rotate_deg = 0; + + if( loadData ){ + + use_camera_wb = 1; + shrink = 0; + if (settings->verbose) printf ("Loading %s %s image from %s...\n", make, model, filename.c_str()); + iheight = height; + iwidth = width; + + // dcraw needs this global variable to hold pixel data + image = (dcrawImage_t)calloc (height*width*sizeof *image + meta_length, 1); + meta_data = (char *) (image + height*width); + if(!image) + return 200; + + if (setjmp (failure)) { + if (image) + free (image); + fclose (ifp); + return 100; + } + + // Load raw pixels data + fseek (ifp, data_offset, SEEK_SET); + (this->*load_raw)(); + + // Load embedded profile + if (profile_length) { + profile_data = new char[profile_length]; + fseek ( ifp, profile_offset, SEEK_SET); + fread ( profile_data, 1, profile_length, ifp); + } + + // Setting the black and cblack + int i = cblack[3]; + for (int c=0; c <3; c++) + if (i > cblack[c]) + i = cblack[c]; + for (int c=0; c < 4; c++) + cblack[c] -= i; + black += i; + } + if( closeFile ){ + fclose(ifp); + ifp=NULL; + } + return 0; +} + +unsigned short** RawImage::compress_image() +{ + if( !image ) + return NULL; + if (filters) { + if (!allocation) { + allocation = new unsigned short[height * width]; + data = new unsigned short*[height]; + for (int i = 0; i < height; i++) + data[i] = allocation + i * width; + } + } else { + if (!allocation) { + allocation = new unsigned short[3 * height * width]; + data = new unsigned short*[height]; + for (int i = 0; i < height; i++) + data[i] = allocation + 3 * i * width; + } + } + + // copy pixel raw data: the compressed format earns space + if (filters != 0) { + for (int row = 0; row < height; row++) + for (int col = 0; col < width; col++) + this->data[row][col] = image[row * width + col][FC(row, col)]; + } else { + for (int row = 0; row < height; row++) + for (int col = 0; col < width; col++) { + this->data[row][3 * col + 0] = image[row * width + col][0]; + this->data[row][3 * col + 1] = image[row * width + col][1]; + this->data[row][3 * col + 2] = image[row * width + col][2]; + } + } + free(image); // we don't need this anymore + image=NULL; + return data; +} + +}; //namespace rtengine diff --git a/rtengine/rawimage.h b/rtengine/rawimage.h new file mode 100644 index 000000000..a95178298 --- /dev/null +++ b/rtengine/rawimage.h @@ -0,0 +1,107 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * 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 . + */ +#ifndef __RAWIMAGE_H +#define __RAWIMAGE_H + +#include +#include +#include + +namespace rtengine { + +struct badPix +{ + int x; + int y; + badPix( int xc, int yc ):x(xc),y(yc){} +}; + +class RawImage: public DCraw +{ +public: + RawImage( const Glib::ustring name ); + ~RawImage(); + + int loadRaw (bool loadData=true, bool closeFile=true); + int get_colorsCoeff( float *pre_mul, float *scale_mul, int *cblack ); + void set_prefilters(){ + if (isBayer() && get_colors() == 3) { + prefilters = filters; + filters &= ~((filters & 0x55555555) << 1); + } + } + dcrawImage_t get_image() { return image; } + unsigned short** compress_image(); // revert to compressed pixels format and release image data + unsigned short** data; // holds pixel values, data[i][j] corresponds to the ith row and jth column + unsigned prefilters; // original filters saved ( used for 4 color processing ) +protected: + Glib::ustring filename; // complete filename + int rotate_deg; // 0,90,180,270 degree of rotation: info taken by dcraw from exif + char* profile_data; // Embedded ICC color profile + unsigned short* allocation; // pointer to allocated memory + +public: + + std::string get_filename() const { return filename;} + int get_width() const { return width; } + int get_height() const { return height; } + int get_FujiWidth() const { return fuji_width; } + bool isBayer() const { return filters!=0; } + unsigned get_filters() const { return filters; } + int get_colors() const { return colors;} + int get_black() const { return black;} + int get_cblack(int i) const {return cblack[i];} + int get_white() const { return maximum;} + unsigned short get_whiteSample( int r, int c ) const { return white[r][c];} + + double get_ISOspeed() const {return iso_speed;} + double get_shutter() const {return shutter; } + time_t get_timestamp() const { return timestamp;} + int get_rotateDegree() const { return rotate_deg;} + const std::string get_maker() const { return std::string(make); } + const std::string get_model() const { return std::string(model); } + + float get_cam_mul(int c )const {return cam_mul[c];} + float get_pre_mul(int c )const {return pre_mul[c];} + float get_rgb_cam( int r, int c) const { return rgb_cam[r][c];} + + int get_exifBase() const {return exif_base; } + int get_ciffBase() const {return ciff_base; } + int get_ciffLen() const {return ciff_len; } + + int get_profileLen() const {return profile_length;} + char* get_profile() const { return profile_data;} + IMFILE *get_file() { return ifp; } + int get_thumbOffset(){ return int(thumb_offset);} + unsigned get_thumbLength(){ return thumb_length;} +public: + // dcraw functions + void scale_colors(){ DCraw::scale_colors(); } + void pre_interpolate() { DCraw::pre_interpolate(); } + +public: + bool ISRED (unsigned row, unsigned col) const { return ((filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==0);} + bool ISGREEN(unsigned row, unsigned col) const { return ((filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==1);} + bool ISBLUE (unsigned row, unsigned col) const { return ((filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==2);} + unsigned FC (unsigned row, unsigned col) const { return (filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3); } +}; + +} + +#endif // __RAWIMAGE_H diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index d07d9ffc5..0f8303dad 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include #include @@ -120,8 +120,8 @@ void RawImageSource::transformRect (PreviewProps pp, int tran, int &ssx1, int &s int w = W, h = H; if (fuji) { - w = ri->fuji_width * 2 + 1; - h = (H - ri->fuji_width)*2 + 1; + w = ri->get_FujiWidth() * 2 + 1; + h = (H - ri->get_FujiWidth())*2 + 1; } int sw = w, sh = h; @@ -165,9 +165,9 @@ void RawImageSource::transformRect (PreviewProps pp, int tran, int &ssx1, int &s if (fuji) { // atszamoljuk a koordinatakat fuji-ra: ssx1 = (sx1+sy1) / 2; - ssy1 = (sy1 - sx2 ) / 2 + ri->fuji_width; + ssy1 = (sy1 - sx2 ) / 2 + ri->get_FujiWidth(); int ssx2 = (sx2+sy2) / 2 + 1; - int ssy2 = (sy2 - sx1) / 2 + ri->fuji_width; + int ssy2 = (sy2 - sx1) / 2 + ri->get_FujiWidth(); fw = (sx2 - sx1) / 2 / pp.skip; width = (ssx2 - ssx1) / pp.skip + ((ssx2 - ssx1) % pp.skip > 0); height = (ssy2 - ssy1) / pp.skip + ((ssy2 - ssy1) % pp.skip > 0); @@ -202,12 +202,12 @@ void RawImageSource::getImage (ColorTemp ctemp, int tran, Image16* image, Previe bm /= mul_lum; if (hrp.enabled) - defGain = log(ri->defgain) / log(2.0); + defGain = log(initialGain) / log(2.0); else { defGain = 0.0; - rm *= ri->defgain; - gm *= ri->defgain; - bm *= ri->defgain; + rm *= initialGain; + gm *= initialGain; + bm *= initialGain; } if (hrp.enabled==true && hrp.method=="Color" && hrmap[0]==NULL) @@ -242,7 +242,7 @@ void RawImageSource::getImage (ColorTemp ctemp, int tran, Image16* image, Previe unsigned short* blue = new unsigned short[imwidth]; for (int i=sy1,ix=0; ixfilters) { + if (ri->isBayer()) { for (int j=0,jx=sx1; jred[i][jx]); grn[j] = CLIP(gm*this->green[i][jx]); @@ -316,7 +316,7 @@ void RawImageSource::getImage (ColorTemp ctemp, int tran, Image16* image, Previe vflip (image); // Color correction - if (ri->filters && pp.skip==1) + if (ri->isBayer() && pp.skip==1) correction_YIQ_LQ (image, raw.ccSteps); // Applying postmul @@ -625,8 +625,8 @@ void RawImageSource::getFullSize (int& w, int& h, int tr) { tr = defTransform (tr); if (fuji) { - w = ri->fuji_width * 2 + 1; - h = (H - ri->fuji_width)*2 + 1; + w = ri->get_FujiWidth() * 2 + 1; + h = (H - ri->get_FujiWidth())*2 + 1; } else if (d1x) { w = W; @@ -731,24 +731,25 @@ int RawImageSource::load (Glib::ustring fname, bool batch) { int res = ri->loadRaw (); if (res) return res; + ri->compress_image(); if (plistener) { plistener->setProgress (0.8); } /***** Copy once constant data extracted from raw *******/ - W = ri->width; - H = ri->height; - fuji = ri->fuji_width; + W = ri->get_width(); + H = ri->get_height(); + fuji = ri->get_FujiWidth()!=0; for (int i=0; i<3; i++) for (int j=0; j<3; j++) - coeff[i][j] = ri->coeff[i][j]; + coeff[i][j] = ri->get_rgb_cam(i,j); // compute inverse of the color transformation matrix inverse33 (coeff, icoeff); - d1x = !strcmp(ri->model, "D1X"); + d1x = ! ri->get_model().compare("D1X"); if (d1x) border = 8; - if (ri->profile_data) - embProfile = cmsOpenProfileFromMem (ri->profile_data, ri->profile_len); + if ( ri->get_profile() ) + embProfile = cmsOpenProfileFromMem (ri->get_profile(), ri->get_profileLen()); // create profile memset (cam, 0, sizeof(cam)); @@ -767,11 +768,11 @@ int RawImageSource::load (Glib::ustring fname, bool batch) { float pre_mul[4]; for (int c = 0; c < 4; c++){ - cblack[c] = ri->cblack[c] + ri->black_point; - pre_mul[c] = ri->pre_mul[c]; + cblack[c] = ri->get_cblack(c) + ri->get_black(); + pre_mul[c] = ri->get_pre_mul(c); } - if ( ri->cam_mul[0] == -1 ) { + if ( ri->get_cam_mul(0) == -1 ) { memset(dsum, 0, sizeof dsum); for (row = 0; row < H; row += 8) for (col = 0; col < W; col += 8) { @@ -779,18 +780,18 @@ int RawImageSource::load (Glib::ustring fname, bool batch) { for (y = row; y < row + 8 && y < H; y++) for (x = col; x < col + 8 && x < W; x++) for (int c = 0; c < 3; c++) { - if (ri->filters) { + if (ri->isBayer()) { c = FC(y, x); val = ri->data[y][x]; } else val = ri->data[y][3*x+c]; - if (val > ri->maximum - 25) + if (val > ri->get_white() - 25) goto skip_block; if ((val -= cblack[c]) < 0) val = 0; sum[c] += val; sum[c + 4]++; - if (ri->filters) + if (ri->isBayer()) break; } for (c = 0; c < 8; c++) @@ -800,29 +801,31 @@ skip_block: ; for (int c = 0; c < 4; c++) if (dsum[c]) pre_mul[c] = dsum[c + 4] / dsum[c]; - } - if ( ri->cam_mul[0] != -1) { + }else{ memset(sum, 0, sizeof sum); for (row = 0; row < 8; row++) for (col = 0; col < 8; col++) { int c = FC(row, col); - if ((val = ri->white[row][col] - cblack[c]) > 0) + if ((val = ri->get_whiteSample(row,col) - cblack[c]) > 0) sum[c] += val; sum[c + 4]++; } if (sum[0] && sum[1] && sum[2] && sum[3]) for (int c = 0; c < 4; c++) pre_mul[c] = (float) sum[c + 4] / sum[c]; - else if (ri->cam_mul[0] && ri->cam_mul[2]) - memcpy(pre_mul, ri->cam_mul, sizeof pre_mul); - else + else if (ri->get_cam_mul(0) && ri->get_cam_mul(2)){ + pre_mul[0] = ri->get_cam_mul(0); + pre_mul[1] = ri->get_cam_mul(1); + pre_mul[2] = ri->get_cam_mul(2); + pre_mul[3] = ri->get_cam_mul(3); + }else fprintf(stderr, "Cannot use camera white balance.\n"); } if (pre_mul[3] == 0) - pre_mul[3] = ri->colors < 4 ? pre_mul[1] : 1; - dark = ri->black_point; - sat = ri->maximum; - sat -= ri->black_point; + pre_mul[3] = ri->get_colors() < 4 ? pre_mul[1] : 1; + dark = ri->get_black(); + sat = ri->get_white(); + sat -= ri->get_black(); for (dmin = DBL_MAX, dmax = c = 0; c < 4; c++) { if (dmin > pre_mul[c]) dmin = pre_mul[c]; @@ -838,10 +841,10 @@ skip_block: ; fprintf(stderr, " %f", pre_mul[c]); fputc('\n', stderr); } - camwb_red = ri->pre_mul[0] / pre_mul[0]; - camwb_green = ri->pre_mul[1] / pre_mul[1]; - camwb_blue = ri->pre_mul[2] / pre_mul[2]; - ri->defgain = 1.0 / MIN(MIN(pre_mul[0],pre_mul[1]),pre_mul[2]); + camwb_red = ri->get_pre_mul(0) / pre_mul[0]; + camwb_green = ri->get_pre_mul(1) / pre_mul[1]; + camwb_blue = ri->get_pre_mul(2) / pre_mul[2]; + initialGain = 1.0 / MIN(MIN(pre_mul[0],pre_mul[1]),pre_mul[2]); double cam_r = coeff[0][0]*camwb_red + coeff[0][1]*camwb_green + coeff[0][2]*camwb_blue; double cam_g = coeff[1][0]*camwb_red + coeff[1][1]*camwb_green + coeff[1][2]*camwb_blue; @@ -849,17 +852,13 @@ skip_block: ; wb = ColorTemp (cam_r, cam_g, cam_b); - // ---------------- preinterpolate - if (ri->filters && ri->colors == 3) { - ri->prefilters = ri->filters; - ri->filters &= ~((ri->filters & 0x55555555) << 1); - } + ri->set_prefilters(); //Load complete Exif informations RawMetaDataLocation rml; - rml.exifBase = ri->exifbase; - rml.ciffBase = ri->ciff_base; - rml.ciffLength = ri->ciff_len; + rml.exifBase = ri->get_exifBase(); + rml.ciffBase = ri->get_ciffBase(); + rml.ciffLength = ri->get_ciffLen(); idata = new ImageData (fname, &rml); green = allocArray(W,H); @@ -873,7 +872,7 @@ skip_block: ; plistener=NULL; // This must be reset, because only load() is called through progressConnector t2.set(); if( settings->verbose ) - printf("Load %s: %d sec\n",fname.c_str(), t2.etime(t1)); + printf("Load %s: %d µsec\n",fname.c_str(), t2.etime(t1)); return 0; // OK! } @@ -888,41 +887,41 @@ void RawImageSource::preprocess (const RAWParams &raw) if( raw.dark_frame.size()>0) rid = dfm.searchDarkFrame( raw.dark_frame ); }else{ - rid = dfm.searchDarkFrame( ri->make, ri->model, ri->iso_speed, ri->shutter, ri->timestamp); + rid = dfm.searchDarkFrame( ri->get_maker(), ri->get_model(), ri->get_ISOspeed(), ri->get_shutter(), ri->get_timestamp()); } if( rid && settings->verbose){ - printf( "Subtracting Darkframe:%s\n",rid->fname.c_str()); + printf( "Subtracting Darkframe:%s\n",rid->get_filename().c_str()); } copyOriginalPixels(ri, rid); - size_t widthBitmap = (ri->width/8+ (ri->width%8?1:0)); - size_t dimBitmap = widthBitmap*ri->height; + size_t widthBitmap = (W/8+ (W%8?1:0)); + size_t dimBitmap = widthBitmap*H; BYTE *bitmapBads = new BYTE [ dimBitmap ]; int totBP=0; // Hold count of bad pixels to correct - std::list *bp = dfm.getBadPixels( ri->make, ri->model, std::string("") ); + std::list *bp = dfm.getBadPixels( ri->get_maker(), ri->get_model(), std::string("") ); if( bp ){ for(std::list::iterator iter = bp->begin(); iter != bp->end(); iter++,totBP++) bitmapBads[ widthBitmap * (iter->y) + (iter->x)/8] |= 1<<(iter->x%8); if( settings->verbose ){ - printf( "Correcting %u pixels from .badpixels\n",bp->size()); + printf( "Correcting %zu pixels from .badpixels\n",bp->size()); } } bp = 0; if( raw.df_autoselect ){ - bp = dfm.getHotPixels( ri->make, ri->model, ri->iso_speed, ri->shutter, ri->timestamp); + bp = dfm.getHotPixels( ri->get_maker(), ri->get_model(), ri->get_ISOspeed(), ri->get_shutter(), ri->get_timestamp()); }else if( raw.dark_frame.size()>0 ) bp = dfm.getHotPixels( raw.dark_frame ); if(bp){ for(std::list::iterator iter = bp->begin(); iter != bp->end(); iter++,totBP++) bitmapBads[ widthBitmap *iter->y + iter->x/8] |= 1<<(iter->x%8); if( settings->verbose && bp->size()>0){ - printf( "Correcting %u hotpixels from darkframe\n",bp->size()); + printf( "Correcting %zu hotpixels from darkframe\n",bp->size()); } } scaleColors( 0,0, W, H); - defGain = log(ri->defgain) / log(2.0); //\TODO ri->defgain should be "costant" + defGain = log(initialGain) / log(2.0); if ( raw.hotdeadpix_filt ) { if (plistener) { @@ -940,7 +939,7 @@ void RawImageSource::preprocess (const RAWParams &raw) delete [] bitmapBads; // check if it is an olympus E camera, if yes, compute G channel pre-compensation factors - if ( raw.greenthresh || (((idata->getMake().size()>=7 && idata->getMake().substr(0,7)=="OLYMPUS" && idata->getModel()[0]=='E') || (idata->getMake().size()>=9 && idata->getMake().substr(0,7)=="Panasonic")) && raw.dmethod != RAWParams::methodstring[ RAWParams::vng4] && ri->filters) ) { + if ( raw.greenthresh || (((idata->getMake().size()>=7 && idata->getMake().substr(0,7)=="OLYMPUS" && idata->getModel()[0]=='E') || (idata->getMake().size()>=9 && idata->getMake().substr(0,7)=="Panasonic")) && raw.dmethod != RAWParams::methodstring[ RAWParams::vng4] && ri->isBayer()) ) { // global correction int ng1=0, ng2=0, i=0; double avgg1=0., avgg2=0.; @@ -948,7 +947,7 @@ void RawImageSource::preprocess (const RAWParams &raw) #pragma omp parallel for default(shared) private(i) reduction(+: ng1, ng2, avgg1, avgg2) for (i=border; iISGREEN(i,j)) { if (i%2==0) { avgg1 += rawData[i][j]; ng1++; @@ -964,7 +963,7 @@ void RawImageSource::preprocess (const RAWParams &raw) #pragma omp parallel for default(shared) for (int i=border; iISGREEN(i,j)) { unsigned short currData; currData = (unsigned short)(rawData[i][j] * (i%2 ? corrg2 : corrg1)); rawData[i][j] = CLIP(currData); @@ -999,12 +998,12 @@ void RawImageSource::preprocess (const RAWParams &raw) } t2.set(); if( settings->verbose ) - printf("Preprocessing: %d sec\n", t2.etime(t1)); + printf("Preprocessing: %d µsec\n", t2.etime(t1)); return; } void RawImageSource::demosaic(const RAWParams &raw) { - if (ri->filters) { + if (ri->isBayer()) { MyTime t1,t2; t1.set(); if ( raw.dmethod == RAWParams::methodstring[RAWParams::hphd] ) @@ -1027,7 +1026,7 @@ void RawImageSource::demosaic(const RAWParams &raw) nodemosaic(); t2.set(); if( settings->verbose ) - printf("Demosaicing: %s - %d sec\n",raw.dmethod.c_str(), t2.etime(t1)); + printf("Demosaicing: %s - %d µsec\n",raw.dmethod.c_str(), t2.etime(t1)); } if (plistener) { plistener->setProgressStr ("Ready."); @@ -1041,13 +1040,13 @@ void RawImageSource::demosaic(const RAWParams &raw) */ void RawImageSource::copyOriginalPixels(RawImage *src, RawImage *riDark ) { - if (ri->filters) { + if (ri->isBayer()) { if (!rawData) rawData = allocArray< unsigned short >(W,H); - if (riDark && W == riDark->width && H == riDark->height) { + if (riDark && W == riDark->get_width() && H == riDark->get_height()) { for (int row = 0; row < H; row++) { for (int col = 0; col < W; col++) { - rawData[row][col] = MAX (src->data[row][col]+ri->black_point - riDark->data[row][col], 0); + rawData[row][col] = MAX (src->data[row][col]+ri->get_black() - riDark->data[row][col], 0); } } }else{ @@ -1060,12 +1059,12 @@ void RawImageSource::copyOriginalPixels(RawImage *src, RawImage *riDark ) }else{ if (!rawData) rawData = allocArray< unsigned short >(3*W,H); - if (riDark && W == riDark->width && H == riDark->height) { + if (riDark && W == riDark->get_width() && H == riDark->get_height()) { for (int row = 0; row < H; row++) { for (int col = 0; col < W; col++) { - rawData[row][3*col+0] = MAX (src->data[row][3*col+0]+ri->black_point - riDark->data[row][3*col+0], 0); - rawData[row][3*col+1] = MAX (src->data[row][3*col+1]+ri->black_point - riDark->data[row][3*col+1], 0); - rawData[row][3*col+2] = MAX (src->data[row][3*col+2]+ri->black_point - riDark->data[row][3*col+2], 0); + rawData[row][3*col+0] = MAX (src->data[row][3*col+0]+ri->get_black() - riDark->data[row][3*col+0], 0); + rawData[row][3*col+1] = MAX (src->data[row][3*col+1]+ri->get_black() - riDark->data[row][3*col+1], 0); + rawData[row][3*col+2] = MAX (src->data[row][3*col+2]+ri->get_black() - riDark->data[row][3*col+2], 0); } } }else{ @@ -1084,15 +1083,40 @@ void RawImageSource::copyOriginalPixels(RawImage *src, RawImage *riDark ) void RawImageSource::scaleColors(int winx,int winy,int winw,int winh) { // scale image colors - for (int row = winy; row < winy+winh; row ++){ - for (int col = winx; col < winx+winw; col++) { - int val = rawData[row][col]; - if (!val) - continue; - int c = FC(row, col); - val -= cblack[c]; - val *= scale_mul[c]; - rawData[row][col] = CLIP(val); + if( ri->isBayer() ){ + for (int row = winy; row < winy+winh; row ++){ + for (int col = winx; col < winx+winw; col++) { + int val = rawData[row][col]; + if (!val) + continue; + int c = FC(row, col); + val -= cblack[c]; + val *= scale_mul[c]; + rawData[row][col] = CLIP(val); + } + } + }else{ + for (int row = winy; row < winy+winh; row ++){ + for (int col = winx; col < winx+winw; col++) { + int val = rawData[row][3*col+0]; + if (val){ + val -= cblack[0]; + val *= scale_mul[0]; + rawData[row][3*col+0] = CLIP(val); + } + val = rawData[row][3*col+1]; + if (val){ + val -= cblack[1]; + val *= scale_mul[1]; + rawData[row][3*col+1] = CLIP(val); + } + val = rawData[row][3*col+2]; + if (val){ + val -= cblack[2]; + val *= scale_mul[2]; + rawData[row][3*col+2] = CLIP(val); + } + } } } @@ -1100,7 +1124,7 @@ void RawImageSource::scaleColors(int winx,int winy,int winw,int winh) int RawImageSource::defTransform (int tran) { - int deg = ri->rotate_deg; + int deg = ri->get_rotateDegree(); if ((tran & TR_ROT) == TR_R180) deg += 180; else if ((tran & TR_ROT) == TR_R90) @@ -1393,9 +1417,9 @@ void RawImageSource::eahd_demosaic () { int maxindex = 2*65536; cache = new double[maxindex]; - threshold = (int)(0.008856*CMAXVAL); + threshold = (int)(0.008856*MAXVAL); for (int i=0; iISGREEN(i-1,j)) green[i-1][j] = rawData[i-1][j]; else { hc = homh[imx][j]; @@ -1718,7 +1742,7 @@ void RawImageSource::hphd_green () { #pragma omp parallel for for (int i=3; iISGREEN(i,j)) green[i][j] = rawData[i][j]; else { if (this->hpmap[i][j]==1) { @@ -1964,9 +1988,9 @@ void RawImageSource::HLRecovery_CIELab (unsigned short* rin, unsigned short* gin void RawImageSource::hlRecovery (std::string method, unsigned short* red, unsigned short* green, unsigned short* blue, int i, int sx1, int width, int skip) { if (method=="Luminance") - HLRecovery_Luminance (red, green, blue, red, green, blue, width, 65535 / ri->defgain); + HLRecovery_Luminance (red, green, blue, red, green, blue, width, 65535 / initialGain); else if (method=="CIELab blending") - HLRecovery_CIELab (red, green, blue, red, green, blue, width, 65535 / ri->defgain, cam, icam); + HLRecovery_CIELab (red, green, blue, red, green, blue, width, 65535 / initialGain, cam, icam); else if (method=="Color") HLRecovery_ColorPropagation (red, green, blue, i, sx1, width, skip); } @@ -1977,29 +2001,33 @@ int RawImageSource::getAEHistogram (unsigned int* histogram, int& histcompr) { memset (histogram, 0, (65536>>histcompr)*sizeof(int)); - for (int i=border; iheight-border; i++) { + for (int i=border; ifuji_width; + int fw = ri->get_FujiWidth(); start = ABS(fw-i) + border; - end = MIN( ri->height+ ri->width-fw-i, fw+i) - border; + end = MIN( H+ W-fw-i, fw+i) - border; } else { start = border; - end = ri->width-border; + end = W-border; } - if (ri->filters) - for (int j=start; j>histcompr]+=2; - else*/ - histogram[rawData[i][j]>>histcompr]+=4; - else - for (int j=start; j<3*end; j++) { - histogram[rawData[i][j+0]>>histcompr]++; - histogram[rawData[i][j+1]>>histcompr]+=2; - histogram[rawData[i][j+2]>>histcompr]++; - } + if (ri->isBayer()) + for (int j=start; jISGREEN(i,j)) + histogram[CLIP((int)(camwb_green*rawData[i][j]))>>histcompr]+=4; + else if (ri->ISRED(i,j)) + histogram[CLIP((int)(camwb_red*rawData[i][j]))>>histcompr]+=4; + else if (ri->ISBLUE(i,j)) + histogram[CLIP((int)(camwb_blue*rawData[i][j]))>>histcompr]+=4; + } else { + for (int j=start; j<3*end; j++) { + histogram[CLIP((int)(camwb_red*rawData[i][j+0]))>>histcompr]++; + histogram[CLIP((int)(camwb_green*rawData[i][j+1]))>>histcompr]+=2; + histogram[CLIP((int)(camwb_blue*rawData[i][j+2]))>>histcompr]++; + } + } + } return 1; } @@ -2012,28 +2040,28 @@ int RawImageSource::getAEHistogram (unsigned int* histogram, int& histcompr) { int rn = 0, gn = 0, bn = 0; if (fuji) { - for (int i=32; iheight-32; i++) { - int fw = ri->fuji_width; + for (int i=32; iget_FujiWidth(); int start = ABS(fw-i) + 32; - int end = MIN(ri->height+ri->width-fw-i, fw+i) - 32; + int end = MIN(H+W-fw-i, fw+i) - 32; for (int j=start; jfilters) { - double d = CLIP(ri->defgain*(ri->data[i][3*j]-cblack[0])*scale_mul[0]); + if (!ri->isBayer()) { + double d = CLIP(initialGain*(ri->data[i][3*j]-cblack[0])*scale_mul[0]); if (d>64000) continue; avg_r += d; rn++; - d = CLIP(ri->defgain*(ri->data[i][3*j+1]-cblack[1])*scale_mul[1]); + d = CLIP(initialGain*(ri->data[i][3*j+1]-cblack[1])*scale_mul[1]); if (d>64000) continue; avg_g += d; gn++; - d = CLIP(ri->defgain*(ri->data[i][3*j+2]-cblack[2])*scale_mul[2]); + d = CLIP(initialGain*(ri->data[i][3*j+2]-cblack[2])*scale_mul[2]); if (d>64000) continue; avg_b += d; bn++; } else { int c = FC( i, j); - double d = CLIP(ri->defgain*(ri->data[i][j]-cblack[c])*scale_mul[c]); + double d = CLIP(initialGain*(ri->data[i][j]-cblack[c])*scale_mul[c]); if (d>64000) continue; double dp = d; @@ -2054,12 +2082,12 @@ int RawImageSource::getAEHistogram (unsigned int* histogram, int& histcompr) { } } else { - if (!ri->filters) { - for (int i=32; iheight-32; i++) - for (int j=32; jwidth-32; j++) { - double dr = CLIP(ri->defgain*(ri->data[i][3*j] -cblack[0])*scale_mul[0]); - double dg = CLIP(ri->defgain*(ri->data[i][3*j+1]-cblack[1])*scale_mul[1]); - double db = CLIP(ri->defgain*(ri->data[i][3*j+2]-cblack[2])*scale_mul[2]); + if (!ri->isBayer()) { + for (int i=32; idata[i][3*j] -cblack[0])*scale_mul[0]); + double dg = CLIP(initialGain*(ri->data[i][3*j+1]-cblack[1])*scale_mul[1]); + double db = CLIP(initialGain*(ri->data[i][3*j+2]-cblack[2])*scale_mul[2]); if (dr>64000 || dg>64000 || db>64000) continue; avg_r += dr; rn++; avg_g += dg; @@ -2069,19 +2097,19 @@ int RawImageSource::getAEHistogram (unsigned int* histogram, int& histcompr) { } else { //determine GRBG coset; (ey,ex) is the offset of the R subarray int ey, ex; - if (ISGREEN(ri,0,0)) {//first pixel is G - if (ISRED(ri,0,1)) {ey=0; ex=1;} else {ey=1; ex=0;} + if (ri->ISGREEN(0,0)) {//first pixel is G + if (ri->ISRED(0,1)) {ey=0; ex=1;} else {ey=1; ex=0;} } else {//first pixel is R or B - if (ISRED(ri,0,0)) {ey=0; ex=0;} else {ey=1; ex=1;} + if (ri->ISRED(0,0)) {ey=0; ex=0;} else {ey=1; ex=1;} } double d[2][2]; - for (int i=32; iheight-32; i+=2) - for (int j=32; jwidth-32; j+=2) { + for (int i=32; idefgain*(ri->data[i][j] -cblack[FC(i,j)])*scale_mul[FC(i,j)]); - d[0][1] = CLIP(ri->defgain*(ri->data[i][j+1] -cblack[FC(i,j+1)])*scale_mul[FC(i,j+1)]); - d[1][0] = CLIP(ri->defgain*(ri->data[i+1][j] -cblack[FC(i+1,j)])*scale_mul[FC(i+1,j)]); - d[1][1] = CLIP(ri->defgain*(ri->data[i+1][j+1]-cblack[FC(i+1,j+1)])*scale_mul[FC(i+1,j+1)]); + d[0][0] = CLIP(initialGain*(ri->data[i][j] -cblack[FC(i,j)])*scale_mul[FC(i,j)]); + d[0][1] = CLIP(initialGain*(ri->data[i][j+1] -cblack[FC(i,j+1)])*scale_mul[FC(i,j+1)]); + d[1][0] = CLIP(initialGain*(ri->data[i+1][j] -cblack[FC(i+1,j)])*scale_mul[FC(i+1,j)]); + d[1][1] = CLIP(initialGain*(ri->data[i+1][j+1]-cblack[FC(i+1,j+1)])*scale_mul[FC(i+1,j+1)]); if ( d[0][0]>64000 || d[0][1]>64000 || d[1][0]>64000 || d[1][1]>64000 ) continue; avg_r += d[ey][ex]; avg_g += d[1-ey][ex] + d[ey][1-ex]; @@ -2125,8 +2153,8 @@ void RawImageSource::transformPosition (int x, int y, int tran, int& ttx, int& t int w = W, h = H; if (fuji) { - w = ri->fuji_width * 2 + 1; - h = (H - ri->fuji_width)*2 + 1; + w = ri->get_FujiWidth() * 2 + 1; + h = (H - ri->get_FujiWidth())*2 + 1; } int sw = w, sh = h; if ((tran & TR_ROT) == TR_R90 || (tran & TR_ROT) == TR_R270) { @@ -2158,7 +2186,7 @@ void RawImageSource::transformPosition (int x, int y, int tran, int& ttx, int& t if (fuji) { ttx = (tx+ty) / 2; - tty = (ty-tx) / 2 + ri->fuji_width; + tty = (ty-tx) / 2 + ri->get_FujiWidth(); } else { ttx = tx; @@ -2173,16 +2201,16 @@ ColorTemp RawImageSource::getSpotWB (std::vector red, std::vectorfilters) { + if (!ri->isBayer()) { int xmin, xmax, ymin, ymax; int xr, xg, xb, yr, yg, yb; for (int i=0; idefgain*(ri->data[yr][3*xr] -cblack[0])*scale_mul[0]>52500 || - ri->defgain*(ri->data[yg][3*xg+1]-cblack[1])*scale_mul[1]>52500 || - ri->defgain*(ri->data[yb][3*xb+2]-cblack[2])*scale_mul[2]>52500) continue; + if (initialGain*(ri->data[yr][3*xr] -cblack[0])*scale_mul[0]>52500 || + initialGain*(ri->data[yg][3*xg+1]-cblack[1])*scale_mul[1]>52500 || + initialGain*(ri->data[yb][3*xb+2]-cblack[2])*scale_mul[2]>52500) continue; xmin = MIN(xr,MIN(xg,xb)); xmax = MAX(xr,MAX(xg,xb)); ymin = MIN(yr,MIN(yg,yb)); @@ -2222,7 +2250,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector red, std::vectordefgain<64000 && gloc*ri->defgain<64000 && bloc*ri->defgain<64000) { + if (rloc*initialGain<64000 && gloc*initialGain<64000 && bloc*initialGain<64000) { reds += rloc; greens += gloc; blues += bloc; rn++; } //transformPosition (green[i].x, green[i].y, tran, x, y);//these are redundant now ??? if not, repeat for these blocks same as for red[] @@ -2438,15 +2466,11 @@ void RawImageSource::vng4_demosaic () { free (image); } -//#define ABS(x) (((int)(x) ^ ((int)(x) >> 31)) - ((int)(x) >> 31)) -//#define MIN(a,b) ((a) < (b) ? (a) : (b)) -//#define MAX(a,b) ((a) > (b) ? (a) : (b)) -//#define LIM(x,min,max) MAX(min,MIN(x,max)) -//#define CLIP(x) LIM(x,0,65535) -#undef fc + +/*#undef fc #define fc(row,col) \ (ri->filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) -#define FC(x,y) fc(x,y) +#define FC(x,y) fc(x,y)*/ #define LIM(x,min,max) MAX(min,MIN(x,max)) #define ULIM(x,y,z) ((y) < (z) ? LIM(x,y,z) : LIM(x,z,y)) @@ -3248,7 +3272,7 @@ void RawImageSource::dcb_refinement(ushort (*image)[4], int x0, int y0) } } -// missing colors are interpolated using high quality algorithm by Luis Sanz Rodr√≠guez +// missing colors are interpolated using high quality algorithm by Luis Sanz Rodr‚àö‚â†guez void RawImageSource::dcb_color_full(ushort (*image)[4], int x0, int y0, float (*chroma)[2]) { const int u=CACHESIZE, v=2*CACHESIZE, w=3*CACHESIZE; @@ -3432,3 +3456,4 @@ void RawImageSource::dcb_demosaic(int iterations, int dcb_enhance) } /* namespace */ + diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 2e348ef7f..774f9c6a9 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -70,6 +70,7 @@ class RawImageSource : public ImageSource { float** hrmap[3]; // for color propagation char** needhr; // for color propagation int max[3]; + double initialGain; // initial gain calculated after scale_colors double defGain; int blcode[16][16][32]; bool full; @@ -105,7 +106,7 @@ class RawImageSource : public ImageSource { void updateHLRecoveryMap (std::string method, double rm, double gm, double bm); void updateHLRecoveryMap_ColorPropagation (); void HLRecovery_ColorPropagation (unsigned short* red, unsigned short* green, unsigned short* blue, int i, int sx1, int width, int skip); - int FC(int row, int col){ return (ri->prefilters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3); } + unsigned FC(int row, int col){ return ri->FC(row,col); } public: RawImageSource (); ~RawImageSource (); diff --git a/rtengine/rawimagesource_i.h b/rtengine/rawimagesource_i.h index 552467c6a..771e649d7 100644 --- a/rtengine/rawimagesource_i.h +++ b/rtengine/rawimagesource_i.h @@ -65,17 +65,17 @@ inline void RawImageSource::convert_to_cielab_row (unsigned short* ar, unsigned if (y>threshold) oL[j] = 300.0*cache[(int)y]; else - oL[j] = 300.0 * 903.3 * y / CMAXVAL; + oL[j] = 300.0 * 903.3 * y / MAXVAL; - oa[j] = 32.0 * 500.0 * ((x>threshold ? cache[(int)x] : 7.787*x/CMAXVAL+16.0/116.0) - (y>threshold ? cache[(int)y] : 7.787*y/CMAXVAL+16.0/116.0)); - ob[j] = 32.0 * 200.0 * ((y>threshold ? cache[(int)y] : 7.787*y/CMAXVAL+16.0/116.0) - (z>threshold ? cache[(int)z] : 7.787*z/CMAXVAL+16.0/116.0)); + oa[j] = 32.0 * 500.0 * ((x>threshold ? cache[(int)x] : 7.787*x/MAXVAL+16.0/116.0) - (y>threshold ? cache[(int)y] : 7.787*y/MAXVAL+16.0/116.0)); + ob[j] = 32.0 * 200.0 * ((y>threshold ? cache[(int)y] : 7.787*y/MAXVAL+16.0/116.0) - (z>threshold ? cache[(int)z] : 7.787*z/MAXVAL+16.0/116.0)); } } inline void RawImageSource::interpolate_row_g (unsigned short* agh, unsigned short* agv, int i) { for (int j=0; jISGREEN(i,j)) { agh[j] = rawData[i][j]; agv[j] = rawData[i][j]; } @@ -125,10 +125,10 @@ inline void RawImageSource::interpolate_row_g (unsigned short* agh, unsigned sho } inline void RawImageSource::interpolate_row_rb (unsigned short* ar, unsigned short* ab, unsigned short* pg, unsigned short* cg, unsigned short* ng, int i) { - if (ISRED(ri,i,0) || ISRED(ri,i,1)) { + if (ri->ISRED(i,0) || ri->ISRED(i,1)) { // RGRGR or GRGRGR line for (int j=0; jISRED(i,j)) { // red is simple ar[j] = rawData[i][j]; // blue: cross interpolation @@ -178,7 +178,7 @@ inline void RawImageSource::interpolate_row_rb (unsigned short* ar, unsigned sho else { // BGBGB or GBGBGB line for (int j=0; jISBLUE(i,j)) { // red is simple ab[j] = rawData[i][j]; // blue: cross interpolation @@ -230,10 +230,10 @@ inline void RawImageSource::interpolate_row_rb (unsigned short* ar, unsigned sho inline void RawImageSource::interpolate_row_rb_mul_pp (unsigned short* ar, unsigned short* ab, unsigned short* pg, unsigned short* cg, unsigned short* ng, int i, double r_mul, double g_mul, double b_mul, int x1, int width, int skip) { - if (ISRED(ri,i,0) || ISRED(ri,i,1)) { + if (ri->ISRED(i,0) || ri->ISRED(i,1)) { // RGRGR or GRGRGR line for (int j=x1, jx=0; jxISRED(i,j)) { // red is simple ar[jx] = CLIP(r_mul * rawData[i][j]); // blue: cross interpolation @@ -283,7 +283,7 @@ inline void RawImageSource::interpolate_row_rb_mul_pp (unsigned short* ar, unsig else { // BGBGB or GBGBGB line for (int j=x1, jx=0; jxISBLUE(i,j)) { // red is simple ab[jx] = CLIP(b_mul*rawData[i][j]); // blue: cross interpolation diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 500e3757c..c4c7cc862 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -106,8 +106,6 @@ RETINEX, // EvShrHighQuality TRANSFORM, // EvPerspCorr EQUALIZER, // EvEqualizer EQUALIZER, // EvEqlEnabled -DEMOSAIC, // EvDemosaic -DARKFRAME, //EvPreProcess IMPULSEDENOISE, // EvIDNEnabled, IMPULSEDENOISE, // EvIDNThresh, DIRPYRDENOISE, // EvDPDNEnabled, @@ -118,6 +116,16 @@ DIRPYREQUALIZER, // EvDirPyrEqualizer, DIRPYREQUALIZER, // EvDirPyrEqlEnabled, LUMINANCECURVE, // EvLSaturation, LUMINANCECURVE, // EvLaCurve, -LUMINANCECURVE, // EvLbCurve +LUMINANCECURVE, // EvLbCurve, +DEMOSAIC, // EvDemosaic +DARKFRAME, //EvPreProcess +RGBCURVE, // EvSaturation, +RGBCURVE, // EvHSVEqualizerH, +RGBCURVE, // EvHSVEqualizerS, +RGBCURVE, // EvHSVEqualizerV, +RGBCURVE, // EvHSVEqEnabled, +DEFRINGE, // EvDefringeEnabled, +DEFRINGE, // EvDefringeRadius, +DEFRINGE, // EvDefringeThreshold, }; diff --git a/rtengine/refreshmap.h b/rtengine/refreshmap.h index d4193f9ef..f8047a473 100644 --- a/rtengine/refreshmap.h +++ b/rtengine/refreshmap.h @@ -31,6 +31,7 @@ #define LUMINANCECURVE 6 #define SHARPENING 2 #define IMPULSEDENOISE 2 +#define DEFRINGE 2 #define LUMADENOISE 2 #define WHITEBALANCE 255 #define DEMOSAIC 511 diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 860d5c206..55a7f84ff 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -304,17 +304,6 @@ namespace rtengine { * @param s is a struct of basic settings */ int init (const Settings* s); -/** Checks if a raw file is supported - * @param fname the name of the file - * @param rml is a struct constaining informations on the location of the metadata in the raw file - * @param rotation is the default angle of rotation (0, 90, 180, 270) - * @param thumbWidth is the width of the embedded thumbnail file - * @param thumbHeight is the height of the embedded thumbnail file - * @param thumbOffset is the offset of the embedded thumbnail in the raw file - * @param thumbType is the type of the embedded thumbnail (=0: no thumbnail, =1: jpeg format, =2: simple continuous image data in rgbrgb... order) - * @return =0 if not supported */ - int getRawFileBasicInfo (const Glib::ustring& fname, rtengine::RawMetaDataLocation& rml, int& rotation, int& thumbWidth, int& thumbHeight, int& thumbOffset, int& thumbType); - /** Returns the available output profile names * @return a vector of the available output profile names */ std::vector getOutputProfiles (); diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index f60f7a37a..534fb2792 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -33,6 +33,7 @@ #include #include #include +#include extern "C" { #include @@ -98,6 +99,9 @@ Thumbnail* Thumbnail::loadFromMemory (const char* image, int length, int &w, int } tpp->thumbImg = img->resize (w, h, TI_Nearest); + + tpp->autowbTemp=2700; + tpp->autowbGreen=1.0; delete img; tpp->init (); @@ -159,30 +163,31 @@ Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h, // histogram computation tpp->aeHistCompression = 3; tpp->aeHistogram = new unsigned int[65536>>tpp->aeHistCompression]; - memset (tpp->aeHistogram, 0, (65536>>tpp->aeHistCompression)*sizeof(int)); - int ix = 0; - for (int i=0; iheight*img->width; i++) { - tpp->aeHistogram[CurveFactory::igamma_srgb (img->data[ix++])>>tpp->aeHistCompression]++; - tpp->aeHistogram[CurveFactory::igamma_srgb (img->data[ix++])>>tpp->aeHistCompression]++; - tpp->aeHistogram[CurveFactory::igamma_srgb (img->data[ix++])>>tpp->aeHistCompression]++; - } - - // autowb computation - double avg_r = 0; + + double avg_r = 0; double avg_g = 0; double avg_b = 0; int n = 0; - for (int i=1; iheight-1; i++) - for (int j=1; jwidth-1; j++) { - int ofs = 3*(i*img->width + j); - int rtmp=img->data[ofs], gtmp=img->data[ofs+1], btmp=img->data[ofs+2]; - if (rtmp>64000 || gtmp>64000 || btmp>64000) - continue; - avg_r += rtmp; + + memset (tpp->aeHistogram, 0, (65536>>tpp->aeHistCompression)*sizeof(int)); + int ix = 0; + for (int i=0; iheight*img->width; i++) { + int rtmp=CurveFactory::igamma_srgb (img->data[ix++]); + int gtmp=CurveFactory::igamma_srgb (img->data[ix++]); + int btmp=CurveFactory::igamma_srgb (img->data[ix++]); + + if (rtmp<64000 && gtmp<64000 && btmp<64000) { + // autowb computation + avg_r += rtmp; avg_g += gtmp; avg_b += btmp; n++; - } + } + tpp->aeHistogram[rtmp>>tpp->aeHistCompression]++; + tpp->aeHistogram[gtmp>>tpp->aeHistCompression]++; + tpp->aeHistogram[btmp>>tpp->aeHistCompression]++; + } + if (n>0) ColorTemp::mul2temp (avg_r/n, avg_g/n, avg_b/n, tpp->autowbTemp, tpp->autowbGreen); @@ -191,6 +196,288 @@ Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h, return tpp; } +Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, int &w, int &h, int fixwh) +{ + RawImage *ri= new RawImage(fname); + int r = ri->loadRaw(false,false); + if( r ) return NULL; + + rml.exifBase = ri->get_exifBase(); + rml.ciffBase = ri->get_ciffBase(); + rml.ciffLength = ri->get_ciffLen(); + + Thumbnail* tpp = Thumbnail::loadFromMemory(fdata(ri->get_thumbOffset(),ri->get_file()),ri->get_thumbLength(),w,h,fixwh); + + if ( tpp == 0 ) + { + printf("DCRAW: failed4\n"); + return NULL; + } + + if (ri->get_rotateDegree() > 0) { + Image16* rot = tpp->thumbImg->rotate(ri->get_rotateDegree()); + delete tpp->thumbImg; + tpp->thumbImg = rot; + } + + delete ri; + + return tpp; +} + +#define FISRED(filter,row,col) \ + ((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==0 || !filter) +#define FISGREEN(filter,row,col) \ + ((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==1 || !filter) +#define FISBLUE(filter,row,col) \ + ((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==2 || !filter) + +Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, int &w, int &h, int fixwh) +{ + RawImage *ri= new RawImage (fname); + int r = ri->loadRaw(); + if( r ){ + delete ri; + return NULL; + } + int width = ri->get_width(); + int height = ri->get_height(); + rtengine::Thumbnail* tpp = new rtengine::Thumbnail; + + tpp->isRaw = true; + tpp->embProfile = NULL; + tpp->embProfileData = NULL; + tpp->embProfileLength = ri->get_profileLen(); + if (ri->get_profileLen()) + tpp->embProfile = cmsOpenProfileFromMem(ri->get_profile(), + ri->get_profileLen()); //\ TODO check if mutex is needed + + tpp->redMultiplier = ri->get_pre_mul(0); + tpp->greenMultiplier = ri->get_pre_mul(1); + tpp->blueMultiplier = ri->get_pre_mul(2); + + float pre_mul[4], scale_mul[4]; + int cblack[4]; + + ri->scale_colors(); + ri->pre_interpolate(); + + rml.exifBase = ri->get_exifBase(); + rml.ciffBase = ri->get_ciffBase(); + rml.ciffLength = ri->get_ciffLen(); + + tpp->camwbRed = tpp->redMultiplier / ri->get_pre_mul(0); + tpp->camwbGreen = tpp->greenMultiplier / ri->get_pre_mul(1); + tpp->camwbBlue = tpp->blueMultiplier / ri->get_pre_mul(2); + tpp->defGain= 1.0/ MIN(MIN(ri->get_pre_mul(0),ri->get_pre_mul(1)),ri->get_pre_mul(2)); + tpp->gammaCorrected = true; + + unsigned filter = ri->get_filters(); + int firstgreen = 1; + // locate first green location in the first row + while (!FISGREEN(filter,1,firstgreen)) + firstgreen++; + + int skip = 1; + if (fixwh == 1) // fix height, scale width + skip = (ri->get_height() - firstgreen - 1) / h; + else + skip = (ri->get_width() - firstgreen - 1) / w; + if (skip % 2) + skip--; + if (skip < 1) + skip = 1; + + int hskip = skip, vskip = skip; + if (!ri->get_model().compare("D1X")) + hskip *= 2; + + int ix = 0; + int rofs = 0; + int tmpw = (width - 2) / hskip; + int tmph = (height - 2) / vskip; + + DCraw::dcrawImage_t image = ri->get_image(); + + Image16* tmpImg = new Image16(tmpw, tmph); + if (ri->isBayer()) { + for (int row = 1, y = 0; row < height - 1 && y < tmph; row += vskip, y++) { + rofs = row * width; + for (int col = firstgreen, x = 0; col < width - 1 && x < tmpw; col+= hskip, x++) { + int ofs = rofs + col; + int g = image[ofs][1]; + int r, b; + if (FISRED(filter,row,col+1)) { + r = (image[ofs + 1][0] + image[ofs - 1][0]) >> 1; + b = (image[ofs + width][2] + image[ofs - width][2]) >> 1; + } else { + b = (image[ofs + 1][2] + image[ofs - 1][2]) >> 1; + r = (image[ofs + width][0] + image[ofs - width][0]) >> 1; + } + tmpImg->r[y][x] = r; + tmpImg->g[y][x] = g; + tmpImg->b[y][x] = b; + } + } + } else { + for (int row = 1, y = 0; row < height - 1 && y < tmph; row += vskip, y++) { + rofs = row * width; + for (int col = firstgreen, x = 0; col < width - 1 && x < tmpw; col + += hskip, x++) { + int ofs = rofs + col; + tmpImg->r[y][x] = image[ofs][0]; + tmpImg->g[y][x] = image[ofs][1]; + tmpImg->b[y][x] = image[ofs][2]; + } + } + } + + if (ri->get_FujiWidth() != 0) { + int fw = ri->get_FujiWidth() / hskip; + double step = sqrt(0.5); + int wide = fw / step; + int high = (tmph - fw) / step; + Image16* fImg = new Image16(wide, high); + float r, c; + + for (int row = 0; row < high; row++) + for (int col = 0; col < wide; col++) { + unsigned ur = r = fw + (row - col) * step; + unsigned uc = c = (row + col) * step; + if (ur > tmph - 2 || uc > tmpw - 2) + continue; + double fr = r - ur; + double fc = c - uc; + int oofs = (ur * tmpw + uc) * 3; + int fofs = (row * wide + col) * 3; + fImg->r[row][col] = (tmpImg->r[ur][uc] * (1 - fc) + + tmpImg->r[ur][uc + 1] * fc) * (1 - fr) + + (tmpImg->r[ur + 1][uc] * (1 - fc) + + tmpImg->r[ur + 1][uc + 1] * fc) * fr; + fImg->g[row][col] = (tmpImg->g[ur][uc] * (1 - fc) + + tmpImg->g[ur][uc + 1] * fc) * (1 - fr) + + (tmpImg->g[ur + 1][uc] * (1 - fc) + + tmpImg->g[ur + 1][uc + 1] * fc) * fr; + fImg->b[row][col] = (tmpImg->b[ur][uc] * (1 - fc) + + tmpImg->b[ur][uc + 1] * fc) * (1 - fr) + + (tmpImg->b[ur + 1][uc] * (1 - fc) + + tmpImg->b[ur + 1][uc + 1] * fc) * fr; + } + delete tmpImg; + tmpImg = fImg; + } + + if (fixwh == 1) // fix height, scale width + w = tmpw * h / tmph; + else + h = tmph * w / tmpw; + + tpp->thumbImg = tmpImg->resize(w, h, TI_Bilinear); + delete tmpImg; + + if (ri->get_FujiWidth() != 0) + tpp->scale = (double) (height - ri->get_FujiWidth()) / sqrt(0.5) / h; + else + tpp->scale = (double) height / h; + + // generate histogram for auto exposure + tpp->aeHistCompression = 3; + tpp->aeHistogram = new unsigned int[65536 >> tpp->aeHistCompression]; + memset(tpp->aeHistogram, 0, (65536 >> tpp->aeHistCompression) * sizeof(int)); + int radd = 4; + int gadd = 4; + int badd = 4; + if (!filter) + radd = gadd = badd = 1; + for (int i = 8; i < height - 8; i++) { + int start, end; + if (ri->get_FujiWidth() != 0) { + int fw = ri->get_FujiWidth(); + start = ABS(fw-i) + 8; + end = MIN( height + width-fw-i, fw+i) - 8; + } else { + start = 8; + end = width - 8; + } + for (int j = start; j < end; j++) + if (FISGREEN(filter,i,j)) + tpp->aeHistogram[CLIP((int)(tpp->camwbGreen*image[i* width+j][1]))>>tpp->aeHistCompression]+=gadd; + else if (FISRED(filter,i,j)) + tpp->aeHistogram[CLIP((int)(tpp->camwbRed * image[i* width+j][0]))>>tpp->aeHistCompression]+=radd; + else if (FISBLUE(filter,i,j)) + tpp->aeHistogram[CLIP((int)(tpp->camwbBlue *image[i* width+j][2]))>>tpp->aeHistCompression]+=badd; + } + + // generate autoWB + double avg_r = 0; + double avg_g = 0; + double avg_b = 0; + int rn = 0, gn = 0, bn = 0; + + for (int i = 32; i < height - 32; i++) { + int start, end; + if (ri->get_FujiWidth() != 0) { + int fw = ri->get_FujiWidth(); + start = ABS(fw-i) + 32; + end = MIN( height + width-fw-i, fw+i) - 32; + } else { + start = 32; + end = width - 32; + } + for (int j = start; j < end; j++) { + if (FISGREEN(filter,i,j)) { + double d = tpp->defGain * image[i * width + j][1]; + if (d > 64000) + continue; + avg_g += d; + gn++; + } + if (FISRED(filter,i,j)) { + double d = tpp->defGain * image[i * width + j][0]; + if (d > 64000) + continue; + avg_r += d; + rn++; + } + if (FISBLUE(filter,i,j)) { + double d = tpp->defGain * image[i * width + j][2]; + if (d > 64000) + continue; + avg_b += d; + bn++; + } + } + } + + double reds = avg_r / rn * tpp->camwbRed; + double greens = avg_g / gn * tpp->camwbGreen; + double blues = avg_b / bn * tpp->camwbBlue; + + double rm = ri->get_rgb_cam(0, 0) * reds + ri->get_rgb_cam(0, 1) * greens + ri->get_rgb_cam(0, 2) * blues; + double gm = ri->get_rgb_cam(1, 0) * reds + ri->get_rgb_cam(1, 1) * greens + ri->get_rgb_cam(1, 2) * blues; + double bm = ri->get_rgb_cam(2, 0) * reds + ri->get_rgb_cam(2, 1) * greens + ri->get_rgb_cam(2, 2) * blues; + + ColorTemp::mul2temp(rm, gm, bm, tpp->autowbTemp, tpp->autowbGreen); + + if (ri->get_rotateDegree() > 0) { + Image16* rot = tpp->thumbImg->rotate(ri->get_rotateDegree()); + delete tpp->thumbImg; + tpp->thumbImg = rot; + } + + for (int a = 0; a < 3; a++) + for (int b = 0; b < 3; b++) + tpp->colorMatrix[a][b] = ri->get_rgb_cam(a, b); + + tpp->init(); + delete ri; + return tpp; +} +#undef FISRED +#undef FISGREEN +#undef FISBLUE + + void Thumbnail::init () { RawImageSource::inverse33 (colorMatrix, iColorMatrix); @@ -400,13 +687,13 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei if (params.toneCurve.autoexp && aeHistogram) ipf.getAutoExp (aeHistogram, aeHistCompression, logDefGain, params.toneCurve.clip, br, bl); - int* curve1 = new int [65536]; - int* curve2 = new int [65536]; + float* curve1 = new float [65536]; + float* curve2 = new float [65536]; int* curve = new int [65536]; CurveFactory::complexCurve (br, bl/65535.0, params.toneCurve.hlcompr, params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast, logDefGain, isRaw ? 2.2 : 0, true, params.toneCurve.curve, hist16, curve1, curve2, curve, NULL, 16); LabImage* labView = new LabImage (baseImg); - ipf.rgbProc (baseImg, labView, curve1, curve2, curve, shmap); + ipf.rgbProc (baseImg, labView, curve1, curve2, curve, shmap, params.toneCurve.saturation); if (shmap) delete shmap; @@ -420,10 +707,10 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei // luminance processing CurveFactory::complexCurve (0.0, 0.0, 0.0, 0.0, params.labCurve.brightness, params.labCurve.contrast, 0.0, 0.0, false, params.labCurve.lcurve, hist16, curve1, curve2, curve, NULL, 16); ipf.luminanceCurve (labView, labView, curve, 0, fh); - CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.acurve, curve1, 16); - ipf.chrominanceCurve (labView, labView, 0, curve1, 0, fh); - CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.bcurve, curve1, 16); - ipf.chrominanceCurve (labView, labView, 1, curve1, 0, fh); + CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.acurve, curve, 16); + ipf.chrominanceCurve (labView, labView, 0, curve, 0, fh); + CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.bcurve, curve, 16); + ipf.chrominanceCurve (labView, labView, 1, curve, 0, fh); delete [] curve1; delete [] curve2; @@ -633,30 +920,58 @@ bool Thumbnail::writeImage (const Glib::ustring& fname, int format) { if (format==1 || format==3) { // to utilize the 8 bit color range of the thumbnail we brighten it and apply gamma correction - int max = 0; - for (int row=0; rowheight; row++) - for (int col=0; colwidth; col++) { - if (thumbImg->r[row][col]>max) - max = thumbImg->r[row][col]; - if (thumbImg->g[row][col]>max) - max = thumbImg->g[row][col]; - if (thumbImg->b[row][col]>max) - max = thumbImg->b[row][col]; - } - if (max < 16384) - max = 16384; - scaleForSave = 65535*8192 / max; unsigned char* tmpdata = new unsigned char[thumbImg->height*thumbImg->width*3]; - int ix = 0; + int ix = 0,max; + if (gammaCorrected) { + // if it's gamma correct (usually a RAW), we have the problem that there is a lot noise etc. that makes the maximum way too high. + // Strategy is limit a certain percent of pixels so the overall picture quality when scaling to 8 bit is way better + const double BurnOffPct=0.03; // *100 = percent pixels that may be clipped + + // Calc the histogram + unsigned int* hist16 = new unsigned int [65536]; + memset(hist16,0,sizeof(int)*65536); + + for (int row=0; rowheight; row++) + for (int col=0; colwidth; col++) { + hist16[thumbImg->r[row][col]]++; + hist16[thumbImg->g[row][col]]+=2; // Bayer 2x green correction + hist16[thumbImg->b[row][col]]++; + } + + // Go down till we cut off that many pixels + unsigned long cutoff = thumbImg->height * thumbImg->height * 4 * BurnOffPct; + + int max; unsigned long sum=0; + for (max=65535; max>16384 && sumheight; i++) for (int j=0; jwidth; j++) { - tmpdata[ix++] = gammatab[thumbImg->r[i][j]*scaleForSave >> 13]; - tmpdata[ix++] = gammatab[thumbImg->g[i][j]*scaleForSave >> 13]; - tmpdata[ix++] = gammatab[thumbImg->b[i][j]*scaleForSave >> 13]; + tmpdata[ix++] = gammatab[MIN(thumbImg->r[i][j],max) * scaleForSave >> 13]; + tmpdata[ix++] = gammatab[MIN(thumbImg->g[i][j],max) * scaleForSave >> 13]; + tmpdata[ix++] = gammatab[MIN(thumbImg->b[i][j],max) * scaleForSave >> 13]; } } else { + // If it's not gamma corrected (usually a JPG) we take the normal maximum + max=0; + + for (int row=0; rowheight; row++) + for (int col=0; colwidth; col++) { + if (thumbImg->r[row][col]>max) max = thumbImg->r[row][col]; + if (thumbImg->g[row][col]>max) max = thumbImg->g[row][col]; + if (thumbImg->b[row][col]>max) max = thumbImg->b[row][col]; + } + + if (max < 16384) max = 16384; + scaleForSave = 65535*8192 / max; + + // Correction and gamma to 8 Bit for (int i=0; iheight; i++) for (int j=0; jwidth; j++) { tmpdata[ix++] = thumbImg->r[i][j]*scaleForSave >> 21; @@ -664,6 +979,7 @@ bool Thumbnail::writeImage (const Glib::ustring& fname, int format) { tmpdata[ix++] = thumbImg->b[i][j]*scaleForSave >> 21; } } + if (format==1) { FILE* f = g_fopen (fname.c_str(), "wb"); if (!f) { @@ -700,7 +1016,7 @@ bool Thumbnail::writeImage (const Glib::ustring& fname, int format) { // (machine dependency is not really an issue, since we all run on x86 and having exactly the same file is not a requirement) cinfo.dct_method = JDCT_FLOAT; - jpeg_set_quality (&cinfo, 85, true); + jpeg_set_quality (&cinfo, 87, true); jpeg_start_compress(&cinfo, TRUE); int rowlen = thumbImg->width*3; while (cinfo.next_scanline < cinfo.image_height) { diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index d102a0101..0227bda0d 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -128,14 +128,14 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p ipf.getAutoExp (aehist, aehistcompr, imgsrc->getDefGain(), params.toneCurve.clip, br, bl); } - int* curve1 = new int [65536]; - int* curve2 = new int [65536]; + float* curve1 = new float [65536]; + float* curve2 = new float [65536]; int* curve = new int [65536]; CurveFactory::complexCurve (br, bl/65535.0, params.toneCurve.hlcompr, params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast, imgsrc->getDefGain(), imgsrc->getGamma(), true, params.toneCurve.curve, hist16, curve1, curve2, curve, NULL); LabImage* labView = new LabImage (baseImg); - ipf.rgbProc (baseImg, labView, curve1, curve2, curve, shmap); + ipf.rgbProc (baseImg, labView, curve1, curve2, curve, shmap, params.toneCurve.saturation); if (shmap) delete shmap; @@ -153,12 +153,13 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p // luminance processing CurveFactory::complexCurve (0.0, 0.0, 0.0, 0.0, params.labCurve.brightness, params.labCurve.contrast, 0.0, 0.0, false, params.labCurve.lcurve, hist16, curve1, curve2, curve, NULL); ipf.luminanceCurve (labView, labView, curve, 0, fh); - CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.acurve, curve1, 1); - ipf.chrominanceCurve (labView, labView, 0, curve1, 0, fh); - CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.bcurve, curve1, 1); - ipf.chrominanceCurve (labView, labView, 1, curve1, 0, fh); + CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.acurve, curve, 1); + ipf.chrominanceCurve (labView, labView, 0, curve, 0, fh); + CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.bcurve, curve, 1); + ipf.chrominanceCurve (labView, labView, 1, curve, 0, fh); ipf.impulsedenoise (labView); + ipf.defringe (labView); ipf.lumadenoise (labView, buffer); ipf.sharpening (labView, (unsigned short**)buffer); diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc index 3c8e1b55b..695814790 100644 --- a/rtengine/stdimagesource.cc +++ b/rtengine/stdimagesource.cc @@ -464,18 +464,22 @@ ColorTemp StdImageSource::getAutoWB () { double avg_g = 0; double avg_b = 0; int n = 0; - int p = 6; + //int p = 6; for (int i=1; iheight-1; i++) for (int j=1; jwidth-1; j++) { if (img->r[i][j]>64000 || img->g[i][j]>64000 || img->b[i][j]>64000) continue; - avg_r += intpow((double)img->r[i][j], p); + avg_r += SQR((double)img->r[i][j]); + avg_g += SQR((double)img->g[i][j]); + avg_b += SQR((double)img->b[i][j]); + /*avg_r += intpow((double)img->r[i][j], p); avg_g += intpow((double)img->g[i][j], p); - avg_b += intpow((double)img->b[i][j], p); + avg_b += intpow((double)img->b[i][j], p);*/ + n++; } - return ColorTemp (avg_r/n, avg_g/n, avg_b/n); + return ColorTemp (sqrt(avg_r/n), sqrt(avg_g/n), sqrt(avg_b/n)); //return ColorTemp (pow(avg_r/n, 1.0/p), pow(avg_g/n, 1.0/p), pow(avg_b/n, 1.0/p)); } diff --git a/rtexif/nikonattribs.cc b/rtexif/nikonattribs.cc index 3e3d2af9f..218f4f8ad 100644 --- a/rtexif/nikonattribs.cc +++ b/rtexif/nikonattribs.cc @@ -33,6 +33,7 @@ class NAISOInterpreter : public Interpreter { public: NAISOInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[32]; sprintf (buffer, "%d", t->toInt(2)); return buffer; } diff --git a/rtexif/pentaxattribs.cc b/rtexif/pentaxattribs.cc index ab15b73c3..cac5afea7 100644 --- a/rtexif/pentaxattribs.cc +++ b/rtexif/pentaxattribs.cc @@ -232,6 +232,7 @@ class PAFNumberInterpreter: public Interpreter { public: PAFNumberInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[32]; sprintf (buffer, "%0.1f", t->toDouble()/10); return buffer; } @@ -389,6 +390,7 @@ public: s << "\n1/3 EV steps"; return s.str(); }else { + char buffer[1024]; t->toString (buffer); return std::string (buffer); } @@ -694,6 +696,7 @@ class PAMaxApertureInterpreter: public Interpreter { int a = t->toInt(0,BYTE); a &= 0x7F; if(a>1){ + char buffer[32]; sprintf (buffer, "%0.1f", pow(2.0, (a-1)/32.0)); return buffer; }else @@ -706,6 +709,7 @@ class PANominalMinMaxApertureInterpreter: public Interpreter { public: PANominalMinMaxApertureInterpreter(){} virtual std::string toString (Tag* t){ + char buffer[1024]; int a = t->toInt(0,BYTE); int mina = a & 0x0F; int maxa = (a & 0xF0)>>4; @@ -804,6 +808,7 @@ class PAExternalFlashGNInterpreter: public Interpreter { public: PAExternalFlashGNInterpreter(){} virtual std::string toString (Tag* t) { + char buffer[32]; int b = t->toInt(0,BYTE) & 0x1F; sprintf (buffer, "%0.0f", pow(2.,b/16.+4) ); return buffer; @@ -871,10 +876,10 @@ public: if (r!=choices.end()) return r->second; else { + char buffer[1024]; t->toString (buffer); return std::string (buffer); } - return buffer; } }; PAFlashOptionInterpreter paFlashOptionInterpreter; diff --git a/rtexif/rtexif.cc b/rtexif/rtexif.cc index b1f064b54..9d494240c 100644 --- a/rtexif/rtexif.cc +++ b/rtexif/rtexif.cc @@ -1263,7 +1263,7 @@ void ExifManager::parseCIFF (FILE* f, int base, int length, TagDirectory* root) } TagDirectory* ExifManager::parse (FILE* f, int base) { - + setlocale(LC_NUMERIC, "C"); // to set decimal point in sscanf // read tiff header fseek (f, base, SEEK_SET); unsigned short bo; @@ -1562,37 +1562,22 @@ bool extractLensInfo(std::string &fullname,double &minFocal, double &maxFocal, d maxFocal=0.0; maxApertureAtMinFocal=0.0; maxApertureAtMaxFocal=0.0; - - int iAperture = fullname.find("f/"); - if( iAperture != std::string::npos ){ - char meno; - std::istringstream apertures( std::string(fullname,iAperture+2) ); - apertures >> maxApertureAtMinFocal; - if( !apertures.eof()) - apertures >> meno; - if( !apertures.eof()) - apertures >> maxApertureAtMaxFocal; + char buffer[1024]; + strcpy(buffer,fullname.c_str()); + char *pF = strstr(buffer,"f/" ); + if( pF ){ + sscanf(pF+2,"%lf-%lf",&maxApertureAtMinFocal,&maxApertureAtMaxFocal); if(maxApertureAtMinFocal >0. && maxApertureAtMaxFocal==0.) maxApertureAtMaxFocal= maxApertureAtMinFocal; - int eFocal = fullname.rfind("mm",iAperture); - if( eFocal != -1 ){ - int iFocal = fullname.rfind(' ',eFocal); // find first space leading focal length - if( iFocal == std::string::npos ) - iFocal = 0; - - std::istringstream focals( std::string(fullname,iFocal,eFocal-iFocal) ); - focals >> minFocal; - if( !focals.eof()) - focals >> meno; - if( !focals.eof()) - focals >> maxFocal; - if(minFocal >0. && maxFocal==0.0) - maxFocal=minFocal; - - return true; + char *pMM = pF-3; + while( pMM[0]!= 'm' && pMM[1]!= 'm' && pMM>buffer) pMM--; + if( pMM[0]== 'm' && pMM[1]== 'm' ){ + char *sp=pMM; + while( *sp != ' ' && sp > buffer )sp--; + sscanf(sp+1,"%lf-%lf",&minFocal,&maxFocal); + return true; } - return false; } return false; } diff --git a/rtexif/rtexif.h b/rtexif/rtexif.h index 1c9228e02..fc231b021 100644 --- a/rtexif/rtexif.h +++ b/rtexif/rtexif.h @@ -204,8 +204,6 @@ class ExifManager { }; class Interpreter { - protected: - char buffer[1024]; public: Interpreter () {} virtual std::string toString (Tag* t) { return ""; } @@ -216,6 +214,7 @@ class StdInterpreter : public Interpreter { public: StdInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[1024]; t->toString (buffer); std::string s(buffer); std::string::size_type p1 = s.find_first_not_of(' '); @@ -242,6 +241,7 @@ class ChoiceInterpreter : public Interpreter { if (r!=choices.end()) return r->second; else { + char buffer[1024]; t->toString (buffer); return std::string (buffer); } diff --git a/rtexif/sonyminoltaattribs.cc b/rtexif/sonyminoltaattribs.cc index c4a5d1402..9923bbf7e 100644 --- a/rtexif/sonyminoltaattribs.cc +++ b/rtexif/sonyminoltaattribs.cc @@ -229,6 +229,8 @@ class SALensIDInterpreter : public IntLensInterpreter< int > { choices.insert(p_t(57, "Sony AF DT 50mm f/1.8 SAM")); choices.insert(p_t(58, "Sony AF DT 30mm f/2.8 SAM Macro")); choices.insert(p_t(59, "Sony AF 28-75mm f/2.8 SAM")); + choices.insert(p_t(60, "Carl Zeiss Distagon T* 24mm f/2 ZA SSM")); + choices.insert(p_t(61, "Sony AF 85mm f/2.8 SAM")); choices.insert(p_t(128, "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF)")); choices.insert(p_t(128, "Tamron AF 28-300mm f/3.5-6.3")); choices.insert(p_t(128, "Tamron AF 28-200mm f/3.8-5.6 XR Di Aspherical (IF) Macro ")); diff --git a/rtexif/stdattribs.cc b/rtexif/stdattribs.cc index 7e5e5878c..053991c5a 100644 --- a/rtexif/stdattribs.cc +++ b/rtexif/stdattribs.cc @@ -243,6 +243,7 @@ class FNumberInterpreter : public Interpreter { public: FNumberInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[32]; sprintf (buffer, "%0.1f", t->toDouble()); return buffer; } @@ -253,6 +254,7 @@ class ApertureInterpreter : public Interpreter { public: ApertureInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[32]; sprintf (buffer, "%0.1f", pow(2.0, t->toDouble()/2.0)); return buffer; } @@ -263,6 +265,7 @@ class ExposureBiasInterpreter : public Interpreter { public: ExposureBiasInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[32]; sprintf (buffer, "%+0.2f", t->toDouble()); return buffer; } @@ -273,6 +276,7 @@ class ShutterSpeedInterpreter : public Interpreter { public: ShutterSpeedInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[32]; double d = pow (2.0, -t->toDouble()); if (d > 0.0 && d < 0.9) sprintf (buffer, "1/%0.0f", 1.0 / d); @@ -287,6 +291,7 @@ class ExposureTimeInterpreter : public Interpreter { public: ExposureTimeInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[32]; double d = t->toDouble(); if (d > 0.0 && d < 0.9) sprintf (buffer, "1/%0.0f", 1.0 / d); @@ -301,6 +306,7 @@ class FocalLengthInterpreter : public Interpreter { public: FocalLengthInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[32]; sprintf (buffer, "%0.1f", t->toDouble()); return buffer; } @@ -311,6 +317,7 @@ class UserCommentInterpreter : public Interpreter { public: UserCommentInterpreter () {} virtual std::string toString (Tag* t) { + char buffer[1024]; if (!strncmp((char*)t->getValue(), "ASCII\0\0\0",8)) strncpy (buffer, (char*)t->getValue()+8, t->getCount()-8); else @@ -318,6 +325,7 @@ class UserCommentInterpreter : public Interpreter { return buffer; } virtual void fromString (Tag* t, const std::string& value) { + char buffer[1024]; memcpy (buffer, "ASCII\0\0\0", 8); strcpy (buffer+8, value.c_str()); t->fromString (buffer, value.size() + 9); @@ -330,6 +338,7 @@ public: CFAInterpreter(){} virtual std::string toString (Tag* t) { char colors[]="RGB"; + char buffer[1024]; for( int i=0; i< t->getCount();i++){ unsigned char c = t->toInt(i,BYTE); buffer[i]= c<3 ?colors[c]:' '; diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt index 06f751323..719d3921f 100644 --- a/rtgui/CMakeLists.txt +++ b/rtgui/CMakeLists.txt @@ -1,6 +1,6 @@ set (BASESOURCEFILES - batchtoolpanelcoord.cc paramsedited.cc cropwindow.cc previewhandler.cc previewwindow.cc navigator.cc indclippedpanel.cc filterpanel.cc + editwindow.cc batchtoolpanelcoord.cc paramsedited.cc cropwindow.cc previewhandler.cc previewwindow.cc navigator.cc indclippedpanel.cc filterpanel.cc cursormanager.cc rtwindow.cc renamedlg.cc recentbrowser.cc placesbrowser.cc filepanel.cc editorpanel.cc batchqueuepanel.cc ilabel.cc thumbbrowserbase.cc adjuster.cc filebrowserentry.cc filebrowser.cc filethumbnailbuttonset.cc cachemanager.cc cacheimagedata.cc shcselector.cc perspective.cc @@ -26,7 +26,7 @@ set (BASESOURCEFILES batchqueue.cc lwbutton.cc lwbuttonset.cc batchqueuebuttonset.cc browserfilter.cc exiffiltersettings.cc profilestore.cc partialpastedlg.cc rawprocess.cc preprocess.cc - equalizer.cc dirpyrequalizer.cc + equalizer.cc dirpyrequalizer.cc hsvequalizer.cc defringe.cc popupcommon.cc popupbutton.cc popuptogglebutton.cc) if (WIN32) diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index 80d23c3b1..e28a366e5 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -23,9 +23,9 @@ #define ADDSET_CA 19 #define ADDSET_VIGN_AMOUNT 20 #define ADDSET_LC_SATURATION 21 +#define ADDSET_TC_SATURATION 22 // When adding items, make sure to update ADDSET_PARAM_NUM -#define ADDSET_PARAM_NUM 22 // THIS IS USED AS A DELIMITER!! - +#define ADDSET_PARAM_NUM 23 // THIS IS USED AS A DELIMITER!! #endif diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc index 4146ca78d..af730d1dd 100644 --- a/rtgui/batchqueue.cc +++ b/rtgui/batchqueue.cc @@ -42,7 +42,7 @@ BatchQueue::BatchQueue () : processing(NULL), listener(NULL) { cancel->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::cancelItems), &selected)); head->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::headItems), &selected)); tail->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::tailItems), &selected)); - selall->signal_activate().connect (sigc::mem_fun(*this, &BatchQueue::selectAll)); + selall->signal_activate().connect (sigc::mem_fun(*this, &BatchQueue::selectAll)); } void BatchQueue::rightClicked (ThumbBrowserEntryBase* entry) { @@ -50,39 +50,138 @@ void BatchQueue::rightClicked (ThumbBrowserEntryBase* entry) { pmenu->popup (3, 0); } -void BatchQueue::addEntry (BatchQueueEntry* entry, bool head) { +void BatchQueue::addEntries ( std::vector &entries, bool head) +{ + for( std::vector::iterator entry = entries.begin(); entry != entries.end();entry++ ){ + (*entry)->setParent (this); + (*entry)->resize (options.thumbSize); + Glib::ustring tempFile = getTempFilenameForParams( (*entry)->filename ); - entry->setParent (this); - entry->resize (options.thumbSize); + // recovery save + if( !(*entry)->params.save( tempFile ) ) + (*entry)->savedParamsFile = tempFile; - entry->selected = false; - if (!head) - fd.push_back (entry); - else { - std::vector::iterator pos; - for (pos=fd.begin(); pos!=fd.end(); pos++) - if (!(*pos)->processing) { - fd.insert (pos, entry); - break; - } - if (pos==fd.end()) - fd.push_back (entry); - } - - if (entry->thumbnail) - entry->thumbnail->imageEnqueued (); - - BatchQueueButtonSet* bqbs = new BatchQueueButtonSet (entry); - bqbs->setButtonListener (this); - entry->addButtonSet (bqbs); + (*entry)->selected = false; + if (!head) + fd.push_back (*entry); + else { + std::vector::iterator pos; + for (pos=fd.begin(); pos!=fd.end(); pos++) + if (!(*pos)->processing) { + fd.insert (pos, *entry); + break; + } + if (pos==fd.end()) + fd.push_back (*entry); + } + if ((*entry)->thumbnail) + (*entry)->thumbnail->imageEnqueued (); + BatchQueueButtonSet* bqbs = new BatchQueueButtonSet (*entry); + bqbs->setButtonListener (this); + (*entry)->addButtonSet (bqbs); + } + saveBatchQueue( ); arrangeFiles (); queue_draw (); notifyListener (); } -int deleteitem (void* data) { +bool BatchQueue::saveBatchQueue( ) +{ + Glib::ustring savedQueueFile; + savedQueueFile = options.rtdir+"/batch/queue"; + FILE *f = g_fopen (safe_locale_from_utf8(savedQueueFile).c_str(), "wt"); + if (f==NULL) + return false; + + for (std::vector::iterator pos=fd.begin(); pos!=fd.end(); pos++){ + BatchQueueEntry* bqe = reinterpret_cast(*pos); + fprintf(f,"%s;%s\n", bqe->filename.c_str(),bqe->savedParamsFile.c_str() ); + } + fclose (f); + return true; +} + +bool BatchQueue::loadBatchQueue( ) +{ + Glib::ustring savedQueueFile; + savedQueueFile = options.rtdir+"/batch/queue"; + FILE *f = g_fopen (safe_locale_from_utf8(savedQueueFile).c_str(), "rt"); + + if (f==NULL) + return false; + char buffer[1024]; + unsigned numLoaded=0; + while (fgets (buffer, sizeof(buffer), f)){ + char *p = strchr(buffer,';' ); + if( p ){ + char *le = buffer + strlen(buffer); + while( --le > buffer && (*le == '\n' || *le == '\r') ); + Glib::ustring source(buffer, p-buffer ); + Glib::ustring paramsFile(p+1, (le +1)- (p+1) ); + + rtengine::procparams::ProcParams pparams; + if( pparams.load( paramsFile ) ) + continue; + + ::Thumbnail *thumb = cacheMgr->getEntry( source ); + if( thumb ){ + rtengine::ProcessingJob* job = rtengine::ProcessingJob::create(source, thumb->getType() == FT_Raw, pparams); + + int prevh = options.maxThumbnailHeight; + int prevw = prevh; + guint8* prev = NULL; + double tmpscale; + rtengine::IImage8* img = thumb->processThumbImage(pparams, options.maxThumbnailHeight, tmpscale); + if (img) { + prevw = img->getWidth(); + prevh = img->getHeight(); + prev = new guint8[prevw * prevh * 3]; + memcpy(prev, img->getData(), prevw * prevh * 3); + img->free(); + } + BatchQueueEntry *entry = new BatchQueueEntry(job, pparams,source, prev, prevw, prevh, thumb); + entry->setParent(this); + entry->resize(options.thumbSize); + entry->savedParamsFile = paramsFile; + entry->selected = false; + fd.push_back(entry); + + BatchQueueButtonSet* bqbs = new BatchQueueButtonSet(entry); + bqbs->setButtonListener(this); + entry->addButtonSet(bqbs); + numLoaded++; + } + } + } + fclose(f); + arrangeFiles (); + queue_draw (); + return numLoaded > 0; +} + +Glib::ustring BatchQueue::getTempFilenameForParams( const Glib::ustring filename ) +{ + time_t rawtime; + struct tm *timeinfo; + char stringTimestamp [80]; + time ( &rawtime ); + timeinfo = localtime ( &rawtime ); + strftime (stringTimestamp,sizeof(stringTimestamp),"_%Y%m%d%H%M%S_",timeinfo); + Glib::ustring savedParamPath; + savedParamPath = options.rtdir+"/batch/"; + g_mkdir_with_parents (savedParamPath.c_str(), 0755); + savedParamPath += Glib::path_get_basename (filename); + savedParamPath += stringTimestamp; + savedParamPath += paramFileExtension; + return savedParamPath; +} + +int deleteitem (void* data) +{ + ::remove( safe_locale_from_utf8( ((BatchQueueEntry*)data)->savedParamsFile).c_str () ); gdk_threads_enter (); delete (BatchQueueEntry*)data; gdk_threads_leave (); @@ -108,6 +207,9 @@ void BatchQueue::cancelItems (std::vector* items) { fd[i]->selected = false; lastClicked = NULL; selected.clear (); + + saveBatchQueue( ); + redraw (); notifyListener (); } @@ -129,6 +231,7 @@ void BatchQueue::headItems (std::vector* items) { } } } + saveBatchQueue( ); redraw (); } @@ -144,6 +247,7 @@ void BatchQueue::tailItems (std::vector* items) { fd.push_back (entry); } } + saveBatchQueue( ); redraw (); } @@ -222,6 +326,8 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) { listener->imageProcessingReady (processing->filename); } } + // save temporary params file name: delete as last thing + Glib::ustring processedParams = processing->savedParamsFile; // delete from the queue delete processing; @@ -247,6 +353,18 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) { // remove button set next->removeButtonSet (); } + if( saveBatchQueue( ) ){ + ::remove( safe_locale_from_utf8(processedParams).c_str () ); + // Delete all files in directory \batch when finished, just to be sure to remove zombies + if( fd.size()==0 ){ + std::vector names; + Glib::ustring batchdir = options.rtdir+"/batch/"; + Glib::RefPtr dir = Gio::File::create_for_path (batchdir); + safe_build_file_list (dir, names, batchdir); + for(std::vector::iterator iter=names.begin(); iter != names.end();iter++ ) + ::remove( safe_locale_from_utf8(*iter).c_str () ); + } + } redraw (); notifyListener (); gdk_threads_leave (); diff --git a/rtgui/batchqueue.h b/rtgui/batchqueue.h index 990e2f821..629b556e2 100644 --- a/rtgui/batchqueue.h +++ b/rtgui/batchqueue.h @@ -56,12 +56,13 @@ class BatchQueue : public ThumbBrowserBase, Glib::ustring obtainFileName (const Glib::ustring& origFileName); Glib::ustring autoCompleteFileName (const Glib::ustring& fileName, const Glib::ustring& format); + Glib::ustring getTempFilenameForParams( const Glib::ustring filename ); + bool saveBatchQueue( ); public: BatchQueue (); - void addEntry (BatchQueueEntry* entry, bool head=false); - + void addEntries (std::vector &entries, bool head=false); void cancelItems (std::vector* items); void headItems (std::vector* items); void tailItems (std::vector* items); @@ -79,6 +80,7 @@ class BatchQueue : public ThumbBrowserBase, void setBatchQueueListener (BatchQueueListener* l) { listener = l; } void notifyListener (); + bool loadBatchQueue (); }; #endif diff --git a/rtgui/batchqueueentry.h b/rtgui/batchqueueentry.h index 61f5ef2a4..f4703ce7d 100644 --- a/rtgui/batchqueueentry.h +++ b/rtgui/batchqueueentry.h @@ -42,6 +42,7 @@ public: Thumbnail* thumbnail; rtengine::ProcessingJob* job; rtengine::procparams::ProcParams params; + Glib::ustring savedParamsFile; double progress; Glib::ustring outFileName; SaveFormat saveFormat; diff --git a/rtgui/batchqueuepanel.cc b/rtgui/batchqueuepanel.cc index e73e3853b..a427b0e83 100644 --- a/rtgui/batchqueuepanel.cc +++ b/rtgui/batchqueuepanel.cc @@ -148,6 +148,8 @@ BatchQueuePanel::BatchQueuePanel () { batchQueue->setBatchQueueListener (this); show_all (); + batchQueue->loadBatchQueue (); + batchQueue->notifyListener (); } void BatchQueuePanel::arrangementButtonPressed () { @@ -222,9 +224,9 @@ void BatchQueuePanel::stopBatchProc () { updateTab (batchQueue->getEntries().size()); } -void BatchQueuePanel::addBatchQueueJob (BatchQueueEntry* bqe, bool head) { +void BatchQueuePanel::addBatchQueueJobs ( std::vector &entries, bool head) { - batchQueue->addEntry (bqe, head); + batchQueue->addEntries (entries, head); if (stop->get_active () && autoStart->get_active ()) startBatchProc (); diff --git a/rtgui/batchqueuepanel.h b/rtgui/batchqueuepanel.h index 4a85e0e69..9a9c6f373 100644 --- a/rtgui/batchqueuepanel.h +++ b/rtgui/batchqueuepanel.h @@ -59,7 +59,7 @@ class BatchQueuePanel : public Gtk::VBox, void setParent (RTWindow* p) { parent = p; } void arrangementButtonPressed (); - void addBatchQueueJob (BatchQueueEntry* bqe, bool head=false); + void addBatchQueueJobs (std::vector &entries , bool head=false); // batchqueuelistener interface void queueSizeChanged (int qsize); diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index a4fe97d94..5a3bb7167 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -120,7 +120,7 @@ void BatchToolPanelCoordinator::initSession () { pparams = selected[0]->getProcParams (); coarse->initBatchBehavior (); - curve->setAdjusterBehavior (options.baBehav[ADDSET_TC_EXPCOMP], options.baBehav[ADDSET_TC_BRIGHTNESS], options.baBehav[ADDSET_TC_BLACKLEVEL], options.baBehav[ADDSET_TC_CONTRAST]); + curve->setAdjusterBehavior (options.baBehav[ADDSET_TC_EXPCOMP], options.baBehav[ADDSET_TC_BRIGHTNESS], options.baBehav[ADDSET_TC_BLACKLEVEL], options.baBehav[ADDSET_TC_CONTRAST], options.baBehav[ADDSET_TC_SATURATION]); lcurve->setAdjusterBehavior (options.baBehav[ADDSET_LC_BRIGHTNESS], options.baBehav[ADDSET_LC_CONTRAST], options.baBehav[ADDSET_LC_SATURATION]); whitebalance->setAdjusterBehavior (options.baBehav[ADDSET_WB_TEMPERATURE], options.baBehav[ADDSET_WB_GREEN]); vignetting->setAdjusterBehavior (options.baBehav[ADDSET_VIGN_AMOUNT]); diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index e0d569f5b..76a4ba296 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -73,7 +73,7 @@ CropWindow::CropWindow (ImageArea* parent, rtengine::StagedImageProcessor* ipc_) bZoomIn = new LWButton (safe_create_from_png (argv0+"/images/gtk-zoom-in.png"), 0, NULL, LWButton::Left, LWButton::Center, "Zoom In"); bZoomOut = new LWButton (safe_create_from_png (argv0+"/images/gtk-zoom-out.png"), 1, NULL, LWButton::Left, LWButton::Center, "Zoom Out"); bZoom100 = new LWButton (safe_create_from_png (argv0+"/images/gtk-zoom-100.png"), 2, NULL, LWButton::Left, LWButton::Center, "Zoom 100/%"); - bZoomFit = new LWButton (safe_create_from_png (argv0+"/images/gtk-zoom-fit.png"), 3, NULL, LWButton::Left, LWButton::Center, "Zoom Fit"); + //bZoomFit = new LWButton (safe_create_from_png (argv0+"/images/gtk-zoom-fit.png"), 3, NULL, LWButton::Left, LWButton::Center, "Zoom Fit"); bClose = new LWButton (safe_create_from_png (argv0+"/images/gtk-close.png"), 4, NULL, LWButton::Right, LWButton::Center, "Close"); buttonSet.add (bZoomIn); @@ -97,6 +97,8 @@ CropWindow::CropWindow (ImageArea* parent, rtengine::StagedImageProcessor* ipc_) cropHandler.setPosition (0,0); cropHandler.setEnabled (true); cropHandler.setCropHandlerListener (this); + + state = SNormal; } @@ -635,9 +637,22 @@ void CropWindow::expose (Cairo::RefPtr cr) { t3.set (); bool showcs = iarea->indClippedPanel->showClippedShadows(); bool showch = iarea->indClippedPanel->showClippedHighlights(); + + // If ALT was pressed, auto-enable highlight and shadow + // TODO: Add linux/MacOS specific functions for alternative + #ifdef WIN32 + if (GetKeyState(VK_MENU)<0) { + showcs=true; showch=true; + } + #endif + if (showcs || showch) { Glib::RefPtr tmp = cropHandler.cropPixbuf->copy (); guint8* pix = tmp->get_pixels(); + + #ifdef _OPENMP + #pragma omp for + #endif for (int i=0; iget_height(); i++) for (int j=0; jget_width(); j++) { guint8* curr = pix + i*tmp->get_rowstride () + j*3; diff --git a/rtgui/cropwindow.h b/rtgui/cropwindow.h index 59b7129fc..396227a4a 100644 --- a/rtgui/cropwindow.h +++ b/rtgui/cropwindow.h @@ -53,7 +53,7 @@ class CropWindow : public LWButtonListener, public CropHandlerListener { // decoration Cairo::RefPtr resizeSurface; - LWButton *bZoomIn, *bZoomOut, *bZoom100, *bZoomFit, *bClose; + LWButton *bZoomIn, *bZoomOut, *bZoom100, /**bZoomFit,*/ *bClose; LWButtonSet buttonSet; Glib::ustring cropLabel; int backColor; diff --git a/rtgui/curveeditor.cc b/rtgui/curveeditor.cc index 6d2b6b11b..2ea495a37 100644 --- a/rtgui/curveeditor.cc +++ b/rtgui/curveeditor.cc @@ -40,11 +40,10 @@ CurveEditor::CurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup) { group = ceGroup; if (group && text.size()) - curveType = Gtk::manage (new PopUpToggleButton(text + ":", true)); + curveType = Gtk::manage (new PopUpToggleButton(text + ":")); else curveType = Gtk::manage (new PopUpToggleButton()); - curveType->set_image_position(Gtk::POS_RIGHT); // Order set in the same order than "enum CurveType". Shouldn't change, for compatibility reason curveType->addEntry(argv0+"/images/curveType-linear.png", M("CURVEEDITOR_LINEAR")); // 0 Linear curveType->addEntry(argv0+"/images/curveType-spline.png", M("CURVEEDITOR_CUSTOM")); // 1 Spline diff --git a/rtgui/curveeditorgroup.cc b/rtgui/curveeditorgroup.cc index f94800d70..051a36d23 100644 --- a/rtgui/curveeditorgroup.cc +++ b/rtgui/curveeditorgroup.cc @@ -210,7 +210,6 @@ void CurveEditorGroup::newLine() { curve_reset->signal_clicked().connect( sigc::mem_fun(*this, &CurveEditorGroup::curveResetPressed) ); headerBox->pack_end (*curve_reset, Gtk::PACK_SHRINK, 0); - curve_reset->signal_clicked().connect( sigc::mem_fun(*this, &CurveEditorGroup::curveResetPressed) ); } int j = numberOfPackedCurve; diff --git a/rtgui/defringe.cc b/rtgui/defringe.cc new file mode 100644 index 000000000..2abea2a6c --- /dev/null +++ b/rtgui/defringe.cc @@ -0,0 +1,150 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * 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 . + */ +#include +#include +#include + +using namespace rtengine; +using namespace rtengine::procparams; + +Defringe::Defringe () : ToolPanel () { + + enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED"))); + enabled->set_active (false); + enabled->show (); + pack_start (*enabled); + + Gtk::HSeparator *hsep1 = Gtk::manage (new Gtk::HSeparator()); + hsep1->show (); + pack_start (*hsep1); + + enaConn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &Defringe::enabledChanged) ); + //edgConn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &Defringe::edgeChanged) ); + + radius = Gtk::manage (new Adjuster (M("TP_DEFRINGE_RADIUS"), 0.5, 5.0, 0.1, 2.0)); + threshold = Gtk::manage (new Adjuster (M("TP_DEFRINGE_THRESHOLD"), 0, 100, 1, 25)); + radius->setAdjusterListener (this); + threshold->setAdjusterListener (this); + radius->show(); + threshold->show(); + + pack_start (*radius); + pack_start (*threshold); +} + +void Defringe::read (const ProcParams* pp, const ParamsEdited* pedited) { + + disableListener (); + + if (pedited) { + radius->setEditedState (pedited->defringe.radius ? Edited : UnEdited); + threshold->setEditedState (pedited->defringe.threshold ? Edited : UnEdited); + enabled->set_inconsistent (!pedited->defringe.enabled); + } + + enaConn.block (true); + enabled->set_active (pp->defringe.enabled); + enaConn.block (false); + + lastEnabled = pp->defringe.enabled; + + radius->setValue (pp->defringe.radius); + threshold->setValue (pp->defringe.threshold); + + enableListener (); +} + +void Defringe::write (ProcParams* pp, ParamsEdited* pedited) { + + pp->defringe.radius = radius->getValue (); + pp->defringe.threshold = (int)threshold->getValue (); + pp->defringe.enabled = enabled->get_active(); + + if (pedited) { + pedited->defringe.radius = radius->getEditedState (); + pedited->defringe.threshold = threshold->getEditedState (); + pedited->defringe.enabled = !enabled->get_inconsistent(); + } +} + +void Defringe::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) { + + radius->setDefault (defParams->defringe.radius); + threshold->setDefault (defParams->defringe.threshold); + + if (pedited) { + radius->setDefaultEditedState (pedited->defringe.radius ? Edited : UnEdited); + threshold->setDefaultEditedState (pedited->defringe.threshold ? Edited : UnEdited); + } + else { + radius->setDefaultEditedState (Irrelevant); + threshold->setDefaultEditedState (Irrelevant); + } +} + +void Defringe::adjusterChanged (Adjuster* a, double newval) { + + if (listener && enabled->get_active()) { + + if (a==radius) + listener->panelChanged (EvLDNRadius, Glib::ustring::format (std::setw(2), std::fixed, std::setprecision(1), a->getValue())); + else if (a==threshold) + listener->panelChanged (EvLDNEdgeTolerance, Glib::ustring::format ((int)a->getValue())); + } +} + +void Defringe::enabledChanged () { + + if (batchMode) { + if (enabled->get_inconsistent()) { + enabled->set_inconsistent (false); + enaConn.block (true); + enabled->set_active (false); + enaConn.block (false); + } + else if (lastEnabled) + enabled->set_inconsistent (true); + + lastEnabled = enabled->get_active (); + } + + if (listener) { + if (enabled->get_active ()) + listener->panelChanged (EvLDNEnabled, M("GENERAL_ENABLED")); + else + listener->panelChanged (EvLDNEnabled, M("GENERAL_DISABLED")); + } +} + +void Defringe::setBatchMode (bool batchMode) { + + ToolPanel::setBatchMode (batchMode); + radius->showEditedCB (); + threshold->showEditedCB (); +} + +/*void Defringe::setAdjusterBehavior (bool bthresholdtoladd) { + + if (!thresholdtolAdd && bthresholdtoladd) + threshold->setLimits (-10000, 10000, 100, 0); + else if (thresholdtolAdd && !bthresholdtoladd) + threshold->setLimits (100, 10000, 100, 1000); + + thresholdtolAdd = bthresholdtoladd; +}*/ diff --git a/rtgui/defringe.h b/rtgui/defringe.h new file mode 100644 index 000000000..4d41d8bc6 --- /dev/null +++ b/rtgui/defringe.h @@ -0,0 +1,52 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * 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 . + */ +#ifndef _DEFRINGE_H_ +#define _DEFRINGE_H_ + +#include +#include +#include + +class Defringe : public Gtk::VBox, public AdjusterListener, public ToolPanel { + + protected: + Adjuster* radius; + Adjuster* threshold; + Gtk::CheckButton* enabled; + bool lastEnabled; + sigc::connection enaConn; + bool edges; + bool thresholdtolAdd; + + public: + + Defringe (); + + void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited=NULL); + void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited=NULL); + void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL); + void setBatchMode (bool batchMode); + + void adjusterChanged (Adjuster* a, double newval); + void enabledChanged (); + + void setAdjusterBehavior (bool bthresholdtoladd); +}; + +#endif diff --git a/rtgui/dirpyrequalizer.cc b/rtgui/dirpyrequalizer.cc index 06630b951..eec259bf7 100644 --- a/rtgui/dirpyrequalizer.cc +++ b/rtgui/dirpyrequalizer.cc @@ -68,10 +68,7 @@ DirPyrEqualizer::DirPyrEqualizer () : ToolPanel() { Gtk::HSeparator *separator3 = Gtk::manage (new Gtk::HSeparator()); pack_start(*separator3, Gtk::PACK_SHRINK, 2); - std::stringstream ss; - - ss << M("TP_DIRPYREQUALIZER_THRESHOLD") ; - multiplier[4] = new Adjuster (ss.str(), 0, 1, 0.01, 0.0); + multiplier[4] = new Adjuster (M("TP_DIRPYREQUALIZER_THRESHOLD"), 0, 1, 0.01, 0.0); multiplier[4]->setAdjusterListener(this); pack_start(*multiplier[4]); diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index c567fe1b5..406effe40 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -340,17 +340,33 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) { // try to load the last saved parameters from the cache or from the paramfile file ProcParams* ldprof = NULL; + + Glib::ustring defProf = openThm->getType()==FT_Raw ? options.defProfRaw : options.defProfImg; + + const CacheImageData* cfs=openThm->getCacheImageData(); + if (!options.customProfileBuilder.empty() && !openThm->hasProcParams() && cfs && cfs->exifValid) { + std::ostringstream strm; + strm << Glib::ustring("\"") << options.customProfileBuilder << Glib::ustring("\" \"") << openThm->getFileName() << Glib::ustring("\" \""); + strm << options.rtdir << Glib::ustring("/") << options.profilePath << Glib::ustring("/") << defProf << Glib::ustring(".pp3"); + strm << Glib::ustring("\" ") << cfs->fnumber << Glib::ustring(" ") << cfs->shutter << Glib::ustring(" "); + strm << cfs->focalLen << Glib::ustring(" ") << cfs->iso << Glib::ustring(" \""); + strm << cfs->lens << Glib::ustring("\" \"") << cfs->camera << Glib::ustring("\""); + + bool success = safe_spawn_command_line_sync (strm.str()); + + // Now they SHOULD be there, so try to load them + if (success) openThm->loadProcParams(); + } + if (openThm->hasProcParams()) { ldprof = new ProcParams (); *ldprof = openThm->getProcParams (); } + rtengine::ImageSource* is=isrc->getImageSource(); is->setProgressListener( this ); // initialize profile - if (openThm->getType()!=FT_Raw) - profilep->initProfile (options.defProfImg, ldprof, NULL); - else - profilep->initProfile (options.defProfRaw, ldprof, NULL); + profilep->initProfile (defProf, ldprof, NULL); openThm->addThumbnailListener (this); info_toggled (); @@ -361,10 +377,15 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) { beforeAfterToggled(); } + // If in single tab mode, the main crop window is not constructed the very first time + // since there was no resize event if (iarea->imageArea->mainCropWindow) { - iarea->imageArea->mainCropWindow->cropHandler.newImage(ipc); + iarea->imageArea->mainCropWindow->cropHandler.newImage(ipc); iarea->imageArea->mainCropWindow->initialImageArrived(); + } else { + Gtk::Allocation alloc; + iarea->imageArea->on_resized(alloc); } } @@ -886,6 +907,8 @@ bool EditorPanel::idle_sendToGimp( ProgressConnector *pc){ SaveFormat sf; sf.format = "tif"; sf.tiffBits = 16; + sf.tiffUncompressed = true; + sf.saveParams = true; Glib::ustring fileName = Glib::ustring::compose ("%1.%2", fname, sf.format); diff --git a/rtgui/editwindow.cc b/rtgui/editwindow.cc new file mode 100644 index 000000000..23bdb4dc0 --- /dev/null +++ b/rtgui/editwindow.cc @@ -0,0 +1,187 @@ +/* +* This file is part of RawTherapee. +* +* 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 . +*/ + +#include +#include +#include +#include +#include + +static EditWindow* editWnd = NULL; + +// Check if the system has more than one display and option is set +bool EditWindow::isMultiDisplayEnabled() { + return options.multiDisplayMode>0 && Gdk::Screen::get_default()->get_n_monitors ()>1; +} + +// Should only be created once, auto-creates window on correct display +EditWindow* EditWindow::getInstance(RTWindow* p) +{ + + if ( editWnd == NULL ) + { + static Glib::Mutex smutex_; + Glib::Mutex::Lock lock(smutex_); + if ( editWnd == 0 ) + { + editWnd = new EditWindow(p); + + // Determine the other display and maximize the window on that + const Glib::RefPtr< Gdk::Window >& wnd=p->get_window(); + int monNo=p->get_screen()->get_monitor_at_window (wnd); + + Gdk::Rectangle lMonitorRect; + editWnd->get_screen()->get_monitor_geometry(monNo==0 ? 1:0, lMonitorRect); + editWnd->move(lMonitorRect.get_x(), lMonitorRect.get_y()); + editWnd->maximize(); + editWnd->show(); + } else { + editWnd->show_all(); + } + } + + return editWnd; +} + +EditWindow::EditWindow (RTWindow* p) : parent(p) , isFullscreen(false) { + +#ifdef GLIBMM_EXCEPTIONS_ENABLED + try { set_default_icon_from_file (argv0+"/images/logoicon16.png"); + } catch(Glib::Exception& ex) { printf ("%s\n", ex.what().c_str()); } +#else + { std::auto_ptr error; + set_default_icon_from_file (argv0+"/images/logoicon16.png", error); + } +#endif //GLIBMM_EXCEPTIONS_ENABLED + + set_title("RawTherapee "+ M("EDITWINDOW_TITLE")); + property_allow_shrink() = true; + set_modal(false); + set_resizable(true); + + property_destroy_with_parent().set_value(false); + signal_window_state_event().connect( sigc::mem_fun(*this, &EditWindow::on_window_state_event) ); + + mainNB = Gtk::manage (new Gtk::Notebook ()); + mainNB->set_scrollable (true); + mainNB->signal_switch_page().connect_notify( sigc::mem_fun(*this, &EditWindow::on_mainNB_switch_page) ); + + signal_key_press_event().connect( sigc::mem_fun(*this, &EditWindow::keyPressed) ); + + Gtk::VBox* mainBox = Gtk::manage (new Gtk::VBox ()); + mainBox->pack_start (*mainNB); + + add (*mainBox); + show_all (); +} + +void EditWindow::on_realize () { + Gtk::Window::on_realize (); + + cursorManager.init (get_window()); +} + +bool EditWindow::on_window_state_event(GdkEventWindowState* event) { + if (!event->new_window_state) { + // Window mode + options.windowMaximized = false; + } + else if (event->new_window_state & (GDK_WINDOW_STATE_MAXIMIZED|GDK_WINDOW_STATE_FULLSCREEN)) { + // Fullscreen mode + options.windowMaximized = true; + } + return true; +} + +void EditWindow::on_mainNB_switch_page(GtkNotebookPage* page, guint page_num) { + if (page_num > 1) { + EditorPanel *ep = (EditorPanel *)mainNB->get_nth_page(page_num); + ep->setAspect(); + } +} + +void EditWindow::addEditorPanel (EditorPanel* ep, const std::string &name) { + if (epanels.find(name)!=epanels.end()) { + // remove existing panel + mainNB->remove_page (*epanels[name]); + epanels.erase (name); + filesEdited.erase (name); + } + + ep->setParent (parent); + + // construct closeable tab for the image + Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); + hb->pack_start (*Gtk::manage (new Gtk::Image (Gtk::Stock::FILE, Gtk::ICON_SIZE_MENU))); + hb->pack_start (*Gtk::manage (new Gtk::Label (name))); + Gtk::Button* closeb = Gtk::manage (new Gtk::Button ()); + closeb->set_image (*Gtk::manage(new Gtk::Image (Gtk::Stock::CLOSE, Gtk::ICON_SIZE_MENU))); + closeb->set_relief (Gtk::RELIEF_NONE); + closeb->set_focus_on_click (false); + // make the button as small as possible + Glib::RefPtr style = Gtk::RcStyle::create (); + style->set_xthickness (0); + style->set_ythickness (0); + + closeb->modify_style (style); + closeb->signal_clicked().connect( sigc::bind (sigc::mem_fun(*this, &EditWindow::remEditorPanel) , ep)); + hb->pack_end (*closeb); + hb->set_spacing (2); + hb->show_all (); + + mainNB->append_page (*ep, *hb); + mainNB->set_current_page (mainNB->page_num (*ep)); + mainNB->set_tab_reorderable (*ep, true); + + epanels[ name ] = ep; + filesEdited.insert ( name ); + parent->fpanel->refreshEditedState (filesEdited); +} + +void EditWindow::remEditorPanel (EditorPanel* ep) { + epanels.erase (ep->getShortName()); + filesEdited.erase (ep->getShortName ()); + parent->fpanel->refreshEditedState (filesEdited); + + mainNB->remove_page (*ep); + // TODO: save options if wanted +} + +bool EditWindow::keyPressed (GdkEventKey* event) { + if(event->keyval == GDK_F11) { + toggleFullscreen(); + return true; + } else { + EditorPanel* ep = (EditorPanel*)mainNB->get_nth_page (mainNB->get_current_page()); + return ep->handleShortcutKey (event); + } +} + +void EditWindow::toggleFullscreen () { + isFullscreen ? unfullscreen() : fullscreen(); + isFullscreen = !isFullscreen; +} + +bool EditWindow::on_delete_event(GdkEventAny* event) { + for ( std::set ::iterator iter = filesEdited.begin(); iter != filesEdited.end();iter++ ) { + remEditorPanel(epanels[*iter]); + } + + hide (); + return true; +} + diff --git a/rtgui/editwindow.h b/rtgui/editwindow.h new file mode 100644 index 000000000..d3beb703b --- /dev/null +++ b/rtgui/editwindow.h @@ -0,0 +1,57 @@ +/* + * This file is part of RawTherapee. + * + * 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 . + */ +#ifndef _EDITWINDOW_ +#define _EDITWINDOW_ + +#include +#include +#include +#include + +class EditWindow : public Gtk::Window { + + private: + RTWindow* parent; + + Gtk::Notebook* mainNB; + std::set filesEdited; + std::map epanels; + + bool isFullscreen; + void toggleFullscreen (); + + public: + // Check if the system has more than one display and option is set + static bool isMultiDisplayEnabled(); + + // Should only be created once, auto-creates window on correct display + static EditWindow* getInstance(RTWindow* p); + + EditWindow (RTWindow* p); + + void addEditorPanel (EditorPanel* ep,const std::string &name); + void remEditorPanel (EditorPanel* ep); + + bool keyPressed (GdkEventKey* event); + bool on_delete_event(GdkEventAny* event); + bool on_window_state_event(GdkEventWindowState* event); + void on_mainNB_switch_page(GtkNotebookPage* page, guint page_num); + + void on_realize (); +}; + +#endif diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index 766ebb751..b7cb61da3 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -195,14 +195,14 @@ void FileBrowser::addEntry_ (FileBrowserEntry* entry) { entry->getThumbButtonSet()->setRank (entry->thumbnail->getRank()); entry->getThumbButtonSet()->setInTrash (entry->thumbnail->getStage()==1); entry->getThumbButtonSet()->setButtonListener (this); - entry->resize (options.thumbSize); + entry->resize (getCurrentThumbSize()); // find place in abc order std::vector::iterator i = fd.begin(); while (i!=fd.end() && *entry < *((FileBrowserEntry*)*i)) i++; - fd.insert (i, entry); + fd.insert (i, entry); initEntry (entry); redraw (); @@ -249,7 +249,6 @@ void FileBrowser::close () { for (int i=0; ithumbnail->decreaseRef (); delete fd[i]; } fd.clear (); diff --git a/rtgui/filebrowserentry.cc b/rtgui/filebrowserentry.cc index e8e818020..27ba33f72 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -48,6 +48,7 @@ FileBrowserEntry::FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname) editedIcon = safe_create_from_file (argv0+"/images/edited.png"); recentlySavedIcon = safe_create_from_file (argv0+"/images/saved.png"); enqueuedIcon = safe_create_from_file (argv0+"/images/processing.png"); + iconsLoaded = true; } if (thm) @@ -68,8 +69,10 @@ FileBrowserEntry::~FileBrowserEntry () { } thumbImageUpdater->removeJobs (this); - if (thumbnail) + if (thumbnail){ thumbnail->removeThumbnailListener (this); + thumbnail->decreaseRef (); + } } void FileBrowserEntry::refreshThumbnailImage () { @@ -186,6 +189,7 @@ void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengi if ( feih == 0 || feih->destroyed ) { + img->free(); return; } diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index 65fdf7e0a..f837e595d 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -45,6 +45,7 @@ int _directoryUpdater (void* cat) { #endif FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb) : selectedDirectoryId(1), listener(NULL), fslistener(NULL), hasValidCurrentEFS(false), filterPanel(NULL), coarsePanel(cp), toolBar(tb) { + inTabMode=false; // construct and initialize thumbnail browsers fileBrowser = new FileBrowser(); @@ -219,8 +220,8 @@ void FileCatalog::closeDir () { } #endif - // ignore old requests - ++selectedDirectoryId; + // ignore old requests + ++selectedDirectoryId; // terminate thumbnail preview loading previewLoader->removeAllJobs (); @@ -285,22 +286,29 @@ void FileCatalog::dirSelected (const Glib::ustring& dirname, const Glib::ustring } } -void FileCatalog::_refreshProgressBar () { +void FileCatalog::enableTabMode(bool enable) { + inTabMode = enable; - // check if progress bar is visible -/* Glib::ListHandle list = buttonBar2->get_children (); - Glib::ListHandle::iterator i = list.begin (); - for (; i!=list.end() && *i!=progressBar; i++); - if (i==list.end()) { - buttonBar2->pack_start (*progressBar, Gtk::PACK_SHRINK, 4); - buttonBar2->reorder_child (*progressBar, 2); + if (!inTabMode) progressBar->hide (); // just needed once + + fileBrowser->enableTabMode(inTabMode); + + redrawAll(); +} + +void FileCatalog::_refreshProgressBar () { + // In tab mode, no progress bar at all + // Also mention that this progress bar only measures the FIRST pass (quick thumbnails) + // The second, usually longer pass is done multithreaded down in the single entries and is NOT measured by this + if (!inTabMode) { + if (previewsToLoad>0) { + progressBar->set_fraction ((double)previewsLoaded / previewsToLoad); + progressBar->show (); + } else { + progressBar->set_fraction (1.0); + progressBar->hide (); + } } -*/ - progressBar->show (); - if (previewsToLoad>0) - progressBar->set_fraction ((double)previewsLoaded / previewsToLoad); - else - progressBar->set_fraction (1.0); } int refreshpb (void* data) { @@ -365,8 +373,8 @@ void FileCatalog::_previewsFinished () { redrawAll (); previewsToLoad = 0; previewsLoaded = 0; -// removeIfThere (buttonBar2, progressBar); progressBar->hide (); + if (filterPanel) { filterPanel->set_sensitive (true); if ( !hasValidCurrentEFS ){ @@ -409,6 +417,11 @@ void FileCatalog::refreshAll () { fileBrowser->refreshThumbImages (); } +void FileCatalog::refreshHeight () { + int newHeight=fileBrowser->getEffectiveHeight(); + set_size_request(0, newHeight); +} + void FileCatalog::_openImage (std::vector tmb) { if (enabled && listener!=NULL) { @@ -478,6 +491,7 @@ void FileCatalog::deleteRequested (std::vector tbe) { void FileCatalog::developRequested (std::vector tbe) { if (listener) { + std::vector entries; for (size_t i=0; ithumbnail->getProcParams(); rtengine::ProcessingJob* pjob = rtengine::ProcessingJob::create (tbe[i]->filename, tbe[i]->thumbnail->getType()==FT_Raw, params); @@ -489,14 +503,15 @@ void FileCatalog::developRequested (std::vector tbe) { guint8* prev = new guint8 [pw*ph*3]; memcpy (prev, img->getData (), pw*ph*3); img->free(); - listener->addBatchQueueJob (new BatchQueueEntry (pjob, params, tbe[i]->filename, prev, pw, ph, tbe[i]->thumbnail)); + entries.push_back(new BatchQueueEntry (pjob, params, tbe[i]->filename, prev, pw, ph, tbe[i]->thumbnail)); } else { int pw, ph; tbe[i]->thumbnail->getThumbnailSize (pw, ph); - listener->addBatchQueueJob (new BatchQueueEntry (pjob, params, tbe[i]->filename, NULL, pw, ph, tbe[i]->thumbnail)); + entries.push_back(new BatchQueueEntry (pjob, params, tbe[i]->filename, NULL, pw, ph, tbe[i]->thumbnail)); } } + listener->addBatchQueueJobs( entries ); } } @@ -838,14 +853,14 @@ bool FileCatalog::trashIsEmpty () { void FileCatalog::zoomIn () { - fileBrowser->zoomIn (); + refreshHeight(); } void FileCatalog::zoomOut () { - fileBrowser->zoomOut (); + refreshHeight(); } void FileCatalog::refreshEditedState (const std::set& efiles) { diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h index 0eaf3c01c..b9cdb9fc6 100644 --- a/rtgui/filecatalog.h +++ b/rtgui/filecatalog.h @@ -62,10 +62,8 @@ class FileCatalog : public Gtk::VBox, Glib::ustring selectedDirectory; int selectedDirectoryId; bool enabled; - - // Restore PreviewLoader if the new threadsafe is not that threadsafe ;-) - //PreviewLoader previewLoader; - //PreviewMultiLoader previewLoader; + bool inTabMode; // Tab mode has e.g. different progress bar handling + FileSelectionListener* listener; FileSelectionChangeListener* fslistener; ImageAreaToolListener* iatlistener; @@ -145,9 +143,11 @@ class FileCatalog : public Gtk::VBox, Glib::ustring lastSelectedDir () { return selectedDirectory; } void setEnabled (bool e); // if not enabled, it does not open image + void enableTabMode(bool enable); // sets progress bar void redrawAll (); void refreshAll (); + void refreshHeight (); void openRequested (std::vector tbe); void deleteRequested (std::vector tbe); @@ -179,6 +179,8 @@ class FileCatalog : public Gtk::VBox, void openPrevImage () { fileBrowser->openPrevImage(); } bool handleShortcutKey (GdkEventKey* event); + + }; #endif diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index c59e6c716..a365d7141 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -162,18 +162,16 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnectorreturnValue() && thm) { - if (options.tabbedUI){ - EditorPanel* epanel = Gtk::manage (new EditorPanel ()); - parent->addEditorPanel (epanel,Glib::path_get_basename (thm->getFileName())); - epanel->open(thm, pc->returnValue() ); - } - else{ - parent->SetEditorCurrent(); - parent->epanel->open(thm, pc->returnValue() ); - } + if (options.tabbedUI) { + EditorPanel* epanel = Gtk::manage (new EditorPanel ()); + parent->addEditorPanel (epanel,Glib::path_get_basename (thm->getFileName())); + epanel->open(thm, pc->returnValue() ); + } else { + parent->SetEditorCurrent(); + parent->epanel->open(thm, pc->returnValue() ); + } - - }else { + } else { Glib::ustring msg_ = Glib::ustring("") + M("MAIN_MSG_CANNOTLOAD") + " \"" + thm->getFileName() + "\" .\n"; Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); msgd.run (); @@ -208,10 +206,10 @@ void FilePanel::open (const Glib::ustring& d) { dirBrowser->open (Glib::path_get_dirname(d), Glib::path_get_basename(d)); } -bool FilePanel::addBatchQueueJob (BatchQueueEntry* bqe) { +bool FilePanel::addBatchQueueJobs ( std::vector &entries ) { if (parent) - parent->addBatchQueueJob (bqe); + parent->addBatchQueueJobs (entries); return true; } diff --git a/rtgui/filepanel.h b/rtgui/filepanel.h index 0cef8b289..383e4a14d 100644 --- a/rtgui/filepanel.h +++ b/rtgui/filepanel.h @@ -73,7 +73,7 @@ class FilePanel : public Gtk::HPaned, // interface fileselectionlistener bool fileSelected (Thumbnail* thm); - bool addBatchQueueJob (BatchQueueEntry* bqe); + bool addBatchQueueJobs ( std::vector &entries ); void optionsChanged (); bool imageLoaded( Thumbnail* thm, ProgressConnector * ); diff --git a/rtgui/fileselectionlistener.h b/rtgui/fileselectionlistener.h index d0a029037..1558a943d 100644 --- a/rtgui/fileselectionlistener.h +++ b/rtgui/fileselectionlistener.h @@ -26,7 +26,7 @@ class FileSelectionListener { public: virtual bool fileSelected (Thumbnail* thm) =0; - virtual bool addBatchQueueJob (BatchQueueEntry* bqe) =0; + virtual bool addBatchQueueJobs ( std::vector &entries ) =0; }; #endif diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 368f0135f..7702031ae 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -74,7 +74,9 @@ void drawCrop (Cairo::RefPtr cr, int imx, int imy, int imw, int double c2x = (cparams.x+cparams.w-1-startx)*scale; double c2y = (cparams.y+cparams.h-1-starty)*scale; - cr->set_source_rgba (0, 0, 0, 2.0/3.0); + cr->set_source_rgba (options.cutOverlayBrush[0], options.cutOverlayBrush[1], options.cutOverlayBrush[2], options.cutOverlayBrush[3]); + + // TODO: not sure if this is right. Seems to leave a thin border on the left/top, but might be bug in calling code cr->rectangle (imx+0.5, imy+0.5, imw, c1y); cr->rectangle (imx+0.5, imy+0.5+c2y, imw, imh-c2y); cr->rectangle (imx+0.5, imy+0.5+c1y, c1x, c2y-c1y+1); diff --git a/rtgui/hsvequalizer.cc b/rtgui/hsvequalizer.cc new file mode 100644 index 000000000..c9e9b29fd --- /dev/null +++ b/rtgui/hsvequalizer.cc @@ -0,0 +1,363 @@ +/* + * This file is part of RawTherapee. + * + * 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 . + * + * 2010 Ilya Popov + */ + +#include + +using namespace rtengine; +using namespace rtengine::procparams; + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +HSVEqualizer::HSVEqualizer () : ToolPanel () { + + enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED"))); + enabled->set_active (true); + pack_start(*enabled); + enaConn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &HSVEqualizer::enabledToggled) ); + + Gtk::HSeparator *hsvsepa = Gtk::manage (new Gtk::HSeparator()); + pack_start(*hsvsepa, Gtk::PACK_SHRINK, 2); + hsvsepa->show (); + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); + hb->set_border_width (4); + hb->show (); + Gtk::Label* hsvselect = Gtk::manage (new Gtk::Label (M("TP_HSVEQUALIZER_CHANNEL")+":")); + hsvselect->show (); + hsvchannel = Gtk::manage (new Gtk::ComboBoxText ()); + hsvchannel->append_text (M("TP_HSVEQUALIZER_SAT")); + hsvchannel->append_text (M("TP_HSVEQUALIZER_VAL")); + hsvchannel->append_text (M("TP_HSVEQUALIZER_HUE")); + hsvchannel->show (); + hb->pack_start(*hsvselect, Gtk::PACK_SHRINK, 4); + hb->pack_start(*hsvchannel); + + Gtk::Button * neutralButton = Gtk::manage (new Gtk::Button(M("TP_HSVEQUALIZER_NEUTRAL"))); + hb->pack_start(*neutralButton, Gtk::PACK_SHRINK, 2); + neutralPressedConn = neutralButton->signal_pressed().connect( sigc::mem_fun(*this, &HSVEqualizer::neutralPressed)); + + + pack_start (*hb); + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + /* + Gtk::HBox * buttonBox17 = Gtk::manage (new Gtk::HBox()); + pack_start(*buttonBox17, Gtk::PACK_SHRINK, 2); + + Gtk::Button * neutralButton = Gtk::manage (new Gtk::Button(M("TP_HSVEQUALIZER_NEUTRAL"))); + buttonBox17->pack_start(*neutralButton, Gtk::PACK_SHRINK, 2); + neutralPressedConn = neutralButton->signal_pressed().connect( sigc::mem_fun(*this, &HSVEqualizer::neutralPressed)); + + buttonBox17->show(); + */ + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Gtk::HSeparator *hsvsepb = Gtk::manage (new Gtk::HSeparator()); + pack_start(*hsvsepb, Gtk::PACK_SHRINK, 2); + hsvsepb->show (); + + satbox = new Gtk::VBox (); + sat[0] = new Adjuster (M("TP_HSVEQUALIZER1"), -100, 100, 0.1, 0); + sat[1] = new Adjuster (M("TP_HSVEQUALIZER2"), -100, 100, 0.1, 0); + sat[2] = new Adjuster (M("TP_HSVEQUALIZER3"), -100, 100, 0.1, 0); + sat[3] = new Adjuster (M("TP_HSVEQUALIZER4"), -100, 100, 0.1, 0); + sat[4] = new Adjuster (M("TP_HSVEQUALIZER5"), -100, 100, 0.1, 0); + sat[5] = new Adjuster (M("TP_HSVEQUALIZER6"), -100, 100, 0.1, 0); + sat[6] = new Adjuster (M("TP_HSVEQUALIZER7"), -100, 100, 0.1, 0); + sat[7] = new Adjuster (M("TP_HSVEQUALIZER8"), -100, 100, 0.1, 0); + for(int i = 0; i < 8; i++) + { + sat[i]->setAdjusterListener(this); + satbox->pack_start(*sat[i]); + } + + //show_all_children (); + satbox->show (); + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + valbox = new Gtk::VBox (); + val[0] = new Adjuster (M("TP_HSVEQUALIZER1"), -100, 100, 0.1, 0); + val[1] = new Adjuster (M("TP_HSVEQUALIZER2"), -100, 100, 0.1, 0); + val[2] = new Adjuster (M("TP_HSVEQUALIZER3"), -100, 100, 0.1, 0); + val[3] = new Adjuster (M("TP_HSVEQUALIZER4"), -100, 100, 0.1, 0); + val[4] = new Adjuster (M("TP_HSVEQUALIZER5"), -100, 100, 0.1, 0); + val[5] = new Adjuster (M("TP_HSVEQUALIZER6"), -100, 100, 0.1, 0); + val[6] = new Adjuster (M("TP_HSVEQUALIZER7"), -100, 100, 0.1, 0); + val[7] = new Adjuster (M("TP_HSVEQUALIZER8"), -100, 100, 0.1, 0); + for(int i = 0; i < 8; i++) + { + val[i]->setAdjusterListener(this); + valbox->pack_start(*val[i]); + } + + //show_all_children (); + valbox->show (); + //%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + huebox = new Gtk::VBox (); + + + hue[0] = new Adjuster (M("TP_HSVEQUALIZER1"), -100, 100, 0.1, 0); + hue[1] = new Adjuster (M("TP_HSVEQUALIZER2"), -100, 100, 0.1, 0); + hue[2] = new Adjuster (M("TP_HSVEQUALIZER3"), -100, 100, 0.1, 0); + hue[3] = new Adjuster (M("TP_HSVEQUALIZER4"), -100, 100, 0.1, 0); + hue[4] = new Adjuster (M("TP_HSVEQUALIZER5"), -100, 100, 0.1, 0); + hue[5] = new Adjuster (M("TP_HSVEQUALIZER6"), -100, 100, 0.1, 0); + hue[6] = new Adjuster (M("TP_HSVEQUALIZER7"), -100, 100, 0.1, 0); + hue[7] = new Adjuster (M("TP_HSVEQUALIZER8"), -100, 100, 0.1, 0); + for(int i = 0; i < 8; i++) + { + hue[i]->setAdjusterListener(this); + huebox->pack_start(*hue[i]); + } + + //huebox->show_all_children (); + huebox->show (); + //%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + huebox->reference (); + valbox->reference (); + satbox->reference (); + + //enaConn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &HSVEqualizer::enabled_toggled) ); + hsvchannel->signal_changed().connect( sigc::mem_fun(*this, &HSVEqualizer::hsvchannelChanged) ); +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +HSVEqualizer::~HSVEqualizer () { + for (int i=0;i<8;i++) + { + delete hue[i]; + delete val[i]; + delete sat[i]; + } +} + + +void HSVEqualizer::read (const ProcParams* pp, const ParamsEdited* pedited) { + + disableListener (); + + if (pedited) { + for (int i=0; i<8; i++) { + sat[i]->setEditedState (pedited->hsvequalizer.sat[i] ? Edited : UnEdited); + val[i]->setEditedState (pedited->hsvequalizer.val[i] ? Edited : UnEdited); + hue[i]->setEditedState (pedited->hsvequalizer.hue[i] ? Edited : UnEdited); + } + enabled->set_inconsistent (!pedited->hsvequalizer.enabled); + } + + enaConn.block (true); + enabled->set_active (pp->hsvequalizer.enabled); + enaConn.block (false); + lastEnabled = pp->hsvequalizer.enabled; + + for (int i=0; i<8; i++) { + sat[i]->setValue (pp->hsvequalizer.sat[i]); + val[i]->setValue (pp->hsvequalizer.val[i]); + hue[i]->setValue (pp->hsvequalizer.hue[i]); + } + + if (pedited && !pedited->hsvequalizer.hsvchannel) + hsvchannel->set_active (3); + else if (pp->hsvequalizer.hsvchannel=="sat") + hsvchannel->set_active (0); + else if (pp->hsvequalizer.hsvchannel=="val") + hsvchannel->set_active (1); + else if (pp->hsvequalizer.hsvchannel=="hue") + hsvchannel->set_active (2); + + enableListener (); +} + +void HSVEqualizer::write (ProcParams* pp, ParamsEdited* pedited) { + + pp->hsvequalizer.enabled = enabled->get_active (); + for (int i=0; i<8; i++) { + pp->hsvequalizer.sat[i] = sat[i]->getValue(); + pp->hsvequalizer.val[i] = val[i]->getValue(); + pp->hsvequalizer.hue[i] = hue[i]->getValue(); + } + + if (hsvchannel->get_active_row_number()==0) + pp->hsvequalizer.hsvchannel = "sat"; + else if (hsvchannel->get_active_row_number()==1) + pp->hsvequalizer.hsvchannel = "val"; + else if (hsvchannel->get_active_row_number()==2) + pp->hsvequalizer.hsvchannel = "hue"; + + if (pedited) { + pedited->hsvequalizer.enabled = !enabled->get_inconsistent();//from dirpyreq + for (int i=0; i<8; i++) { + pedited->hsvequalizer.sat[i] = sat[i]->getEditedState (); + pedited->hsvequalizer.val[i] = val[i]->getEditedState (); + pedited->hsvequalizer.hue[i] = hue[i]->getEditedState (); + } + } +} + +void HSVEqualizer::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) { + + for (int i = 0; i < 8; i++) { + sat[i]->setDefault(defParams->hsvequalizer.sat[i]); + val[i]->setDefault(defParams->hsvequalizer.val[i]); + hue[i]->setDefault(defParams->hsvequalizer.hue[i]); + } + + if (pedited) { + for (int i = 0; i < 8; i++) { + sat[i]->setDefaultEditedState(pedited->hsvequalizer.sat[i] ? Edited : UnEdited); + val[i]->setDefaultEditedState(pedited->hsvequalizer.val[i] ? Edited : UnEdited); + hue[i]->setDefaultEditedState(pedited->hsvequalizer.hue[i] ? Edited : UnEdited); + } + } + else { + for (int i = 0; i < 8; i++) { + sat[i]->setDefaultEditedState(Irrelevant); + val[i]->setDefaultEditedState(Irrelevant); + hue[i]->setDefaultEditedState(Irrelevant); + } + } +} + +void HSVEqualizer::adjusterChanged (Adjuster* a, double newval) { + + if (listener && enabled->get_active()) { + std::stringstream ss; + ss << "("; + int i; + if (hsvchannel->get_active_row_number()==0) { + for (i = 0; i < 8; i++) { + if (i > 0) { + ss << ", "; + } + if (i == 4) { + ss << "\n"; + } + ss << static_cast(sat[i]->getValue()); + } + ss << ")"; + listener->panelChanged (EvHSVEqualizerS, ss.str()); + } + else if (hsvchannel->get_active_row_number()==1) { + for (i = 0; i < 8; i++) { + if (i > 0) { + ss << ", "; + } + if (i == 4) { + ss << "\n"; + } + ss << static_cast(val[i]->getValue()); + } + ss << ")"; + listener->panelChanged (EvHSVEqualizerV, ss.str()); + } + else if (hsvchannel->get_active_row_number()==2) { + for (i = 0; i < 8; i++) { + if (i > 0) { + ss << ", "; + } + if (i == 4) { + ss << "\n"; + } + ss << static_cast(hue[i]->getValue()); + } + ss << ")"; + listener->panelChanged (EvHSVEqualizerH, ss.str()); + } + + //listener->panelChanged (EvHSVEqualizer, ss.str()); + } +} + +void HSVEqualizer::enabledToggled () { + + if (batchMode) { + if (enabled->get_inconsistent()) { + enabled->set_inconsistent (false); + enaConn.block (true); + enabled->set_active (false); + enaConn.block (false); + } + else if (lastEnabled) + enabled->set_inconsistent (true); + + lastEnabled = enabled->get_active (); + } + + if (listener) { + if (enabled->get_active ()) + listener->panelChanged (EvHSVEqEnabled, M("GENERAL_ENABLED")); + else + listener->panelChanged (EvHSVEqEnabled, M("GENERAL_DISABLED")); + } +} + + +void HSVEqualizer::hsvchannelChanged () { + + removeIfThere (this, satbox, false); + removeIfThere (this, valbox, false); + removeIfThere (this, huebox, false); + + if (hsvchannel->get_active_row_number()==0) + pack_start (*satbox); + else if (hsvchannel->get_active_row_number()==1) + pack_start (*valbox); + else if (hsvchannel->get_active_row_number()==2) + pack_start (*huebox); + +} + +void HSVEqualizer::setBatchMode (bool batchMode) { + + ToolPanel::setBatchMode (batchMode); + + for (int i = 0; i < 8; i++) { + sat[i]->showEditedCB(); + val[i]->showEditedCB(); + hue[i]->showEditedCB(); + } + + hsvchannel->append_text (M("GENERAL_UNCHANGED")); +} + +void HSVEqualizer::neutralPressed () { + if (hsvchannel->get_active_row_number()==0) + for (int i = 0; i < 8; i++) { + sat[i]->setValue(0); + adjusterChanged(sat[i], 0); + } + else if (hsvchannel->get_active_row_number()==1) + for (int i = 0; i < 8; i++) { + val[i]->setValue(0); + adjusterChanged(val[i], 0); + } + else if (hsvchannel->get_active_row_number()==2) + for (int i = 0; i < 8; i++) { + hue[i]->setValue(0); + adjusterChanged(hue[i], 0); + } + + +} diff --git a/rtgui/hsvequalizer.h b/rtgui/hsvequalizer.h new file mode 100644 index 000000000..468c710c6 --- /dev/null +++ b/rtgui/hsvequalizer.h @@ -0,0 +1,68 @@ +/* + * This file is part of RawTherapee. + * + * 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 . + * + * 2010 Ilya Popov + */ + +#ifndef HSVEQUALIZER_H_INCLUDED +#define HSVEQUALIZER_H_INCLUDED + +#include +#include +#include +#include + + +class HSVEqualizer : public Gtk::VBox, public AdjusterListener, public ToolPanel +{ + +protected: + + Gtk::CheckButton * enabled; + Gtk::ComboBoxText* hsvchannel; + + Gtk::VBox* satbox; + Gtk::VBox* valbox; + Gtk::VBox* huebox; + + Adjuster* sat[8]; + Adjuster* val[8]; + Adjuster* hue[8]; + + sigc::connection enaConn; + sigc::connection neutralPressedConn; + + bool lastEnabled; + +public: + + HSVEqualizer (); + virtual ~HSVEqualizer (); + + void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited=NULL); + void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited=NULL); + void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL); + void setBatchMode (bool batchMode); + + void adjusterChanged (Adjuster* a, double newval); + void enabledToggled (); + void hsvchannelChanged (); + + void neutralPressed (); + +}; + +#endif diff --git a/rtgui/icmpanel.cc b/rtgui/icmpanel.cc index 5dd894061..82b2f486e 100644 --- a/rtgui/icmpanel.cc +++ b/rtgui/icmpanel.cc @@ -37,6 +37,9 @@ ICMPanel::ICMPanel () : ToolPanel(), iunchanged(NULL), icmplistener(NULL) { ilab->set_markup (Glib::ustring("") + M("TP_ICM_INPUTPROFILE") + ""); pack_start (*ilab, Gtk::PACK_SHRINK, 4); + inone = Gtk::manage (new Gtk::RadioButton (M("TP_ICM_INPUTNONE"))); + pack_start (*inone, Gtk::PACK_SHRINK, 4); + iembedded = Gtk::manage (new Gtk::RadioButton (M("TP_ICM_INPUTEMBEDDED"))); pack_start (*iembedded, Gtk::PACK_SHRINK, 4); @@ -53,6 +56,7 @@ ICMPanel::ICMPanel () : ToolPanel(), iunchanged(NULL), icmplistener(NULL) { opts = icamera->get_group(); iembedded->set_group (opts); ifromfile->set_group (opts); + inone->set_group (opts); igamma = Gtk::manage (new Gtk::CheckButton (M("TP_ICM_GAMMABEFOREINPUT"))); igamma->set_sensitive (false); @@ -137,7 +141,11 @@ void ICMPanel::read (const ProcParams* pp, const ParamsEdited* pedited) { disableListener (); ipc.block (true); - if (pp->icm.input == "(embedded)" || ((pp->icm.input == "(camera)" || pp->icm.input=="") && icamera->get_state()==Gtk::STATE_INSENSITIVE)) { + if (pp->icm.input == "(none)" && icamera->get_state()!=Gtk::STATE_INSENSITIVE) { + inone->set_active (true); + igamma->set_sensitive (false); + } + else if (pp->icm.input == "(embedded)" || ((pp->icm.input == "(camera)" || pp->icm.input=="") && icamera->get_state()==Gtk::STATE_INSENSITIVE)) { iembedded->set_active (true); igamma->set_sensitive (false); } @@ -179,7 +187,9 @@ void ICMPanel::read (const ProcParams* pp, const ParamsEdited* pedited) { void ICMPanel::write (ProcParams* pp, ParamsEdited* pedited) { - if (iembedded->get_active ()) + if (inone->get_active()) + pp->icm.input = "(none)"; + else if (iembedded->get_active ()) pp->icm.input = "(embedded)"; else if (icamera->get_active ()) pp->icm.input = "(camera)"; @@ -211,7 +221,11 @@ void ICMPanel::wpChanged () { void ICMPanel::ipChanged () { std::string profname; - if (iembedded->get_active ()) { + if (inone->get_active()) { + profname = "(none)"; + igamma->set_sensitive (false); + } + else if (iembedded->get_active ()) { profname = "(embedded)"; igamma->set_sensitive (false); } diff --git a/rtgui/icmpanel.h b/rtgui/icmpanel.h index 38a91562a..d022e9b4c 100644 --- a/rtgui/icmpanel.h +++ b/rtgui/icmpanel.h @@ -30,7 +30,8 @@ class ICMPanelListener { class ICMPanel : public Gtk::VBox, public ToolPanel { - private: + private: + Gtk::RadioButton* inone; Gtk::RadioButton* iembedded; Gtk::RadioButton* icamera; Gtk::RadioButton* ifromfile; diff --git a/rtgui/imagearea.cc b/rtgui/imagearea.cc index ede4567a4..b5506f1f7 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -229,8 +229,10 @@ void ImageArea::unGrabFocus () { } void ImageArea::addCropWindow () { - + if (!mainCropWindow) return; // if called but no image is loaded, it would crash + CropWindow* cw = new CropWindow (this, ipc); + cw->zoom11(); cw->setCropGUIListener (cropgl); cw->setPointerMotionListener (pmlistener); cropWins.push_front (cw); @@ -248,10 +250,13 @@ void ImageArea::addCropWindow () { cw->setPosition (col*get_width()/K + hBorder/2 + layer*30, row*get_height()/K + vBorder/2 + layer*30); } else { - cw->setSize (lastClosedX, lastClosedY); - cw->setPosition (lastClosedW, lastClosedH); + cw->setPosition (lastClosedX, lastClosedY); + cw->setSize(lastClosedW, lastClosedH); } - + int x0,y0,w,h,wc,hc; + mainCropWindow->getCropRectangle(x0,y0,w,h ); + cw->getCropSize(wc,hc); + cw->setCropPosition(x0+w/2-wc/2,y0+h/2-hc/2); mainCropWindow->setObservedCropWin (cropWins.front()); queue_draw (); } diff --git a/rtgui/impulsedenoise.cc b/rtgui/impulsedenoise.cc index 8f82e360e..f09cce743 100644 --- a/rtgui/impulsedenoise.cc +++ b/rtgui/impulsedenoise.cc @@ -29,7 +29,7 @@ ImpulseDenoise::ImpulseDenoise () : ToolPanel() { enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED"))); enabled->set_active (false); - thresh = Gtk::manage (new Adjuster (M("TP_DETAIL_AMOUNT"), 0, 100, 1, 10)); + thresh = Gtk::manage (new Adjuster (M("TP_IMPULSEDENOISE_THRESH"), 0, 100, 1, 10)); pack_start (*enabled); pack_start (*Gtk::manage (new Gtk::HSeparator())); @@ -86,7 +86,7 @@ void ImpulseDenoise::adjusterChanged (Adjuster* a, double newval) { if (listener && enabled->get_active()) { - listener->panelChanged (EvCDNRadius, Glib::ustring::format (std::setw(2), std::fixed, std::setprecision(1), a->getValue())); + listener->panelChanged (EvIDNThresh, Glib::ustring::format (std::setw(2), std::fixed, std::setprecision(1), a->getValue())); } } diff --git a/rtgui/multilangmgr.cc b/rtgui/multilangmgr.cc index 44e81b6b1..02fdd0707 100644 --- a/rtgui/multilangmgr.cc +++ b/rtgui/multilangmgr.cc @@ -37,7 +37,7 @@ bool MultiLangMgr::load (Glib::ustring fname, MultiLangMgr* fb) { char* buffer = new char[2048]; - while ((buffer = fgets (buffer, 2048, f))) { + while (fgets (buffer, 2048, f) != 0) { // find separator int seppos = 0; while (buffer[seppos]!=0 && buffer[seppos]!=';') diff --git a/rtgui/navigator.cc b/rtgui/navigator.cc index cda896052..8de4a3e5a 100644 --- a/rtgui/navigator.cc +++ b/rtgui/navigator.cc @@ -100,7 +100,7 @@ void Navigator::rgb2hsv (int r, int g, int b, int &h, int &s, int &v) { volatile double var_G = g / 255.0; volatile double var_B = b / 255.0; - volatile double var_Min = MIN(MIN(var_R,var_G),var_B); + /*volatile double var_Min = MIN(MIN(var_R,var_G),var_B); volatile double var_Max = MAX(MAX(var_R,var_G),var_B); double del_Max = var_Max - var_Min; double V = (var_Max + var_Min) / 2; @@ -120,6 +120,27 @@ void Navigator::rgb2hsv (int r, int g, int b, int &h, int &s, int &v) { else if ( var_G == var_Max ) H = (1.0 / 3.0) + del_R - del_B; else if ( var_B == var_Max ) H = (2.0 / 3.0) + del_G - del_R; + if ( H < 0 ) H += 1; + if ( H > 1 ) H -= 1; + }*/ + + double var_Min = MIN(MIN(var_R,var_G),var_B); + double var_Max = MAX(MAX(var_R,var_G),var_B); + double del_Max = var_Max - var_Min; + double V = var_Max; + double H, S; + if (fabs(del_Max)<0.001) { + H = 0; + S = 0; + } + else { + S = del_Max/var_Max; + + if ( var_R == var_Max ) H = (var_G - var_B)/del_Max; + else if ( var_G == var_Max ) H = 2.0 + (var_B - var_R)/del_Max; + else if ( var_B == var_Max ) H = 4.0 + (var_R - var_G)/del_Max; + H /= 6.0; + if ( H < 0 ) H += 1; if ( H > 1 ) H -= 1; } diff --git a/rtgui/options.cc b/rtgui/options.cc index fbb4065e6..52358685f 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -76,6 +76,7 @@ void Options::setDefaults () { multiUser = false; version = 290; thumbSize = 80; + thumbSizeTab = 80; showHistory = true; showFilePanelState = 0; showInfo = false; @@ -120,6 +121,10 @@ void Options::setDefaults () { overlayedFileNames = true; showFileNames = true; tabbedUI = false; + multiDisplayMode = 0; + + cutOverlayBrush = std::vector (4); + cutOverlayBrush[3] = 0.667; int babehav[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}; baBehav = std::vector (babehav, babehav+ADDSET_PARAM_NUM); @@ -212,10 +217,12 @@ if (keyFile.has_group ("Profiles")) { if (keyFile.has_key ("Profiles", "SaveParamsWithFile")) saveParamsFile = keyFile.get_boolean ("Profiles", "SaveParamsWithFile"); if (keyFile.has_key ("Profiles", "SaveParamsToCache")) saveParamsCache = keyFile.get_boolean ("Profiles", "SaveParamsToCache"); if (keyFile.has_key ("Profiles", "LoadParamsFromLocation")) paramsLoadLocation = (PPLoadLocation)keyFile.get_integer ("Profiles", "LoadParamsFromLocation"); + if (keyFile.has_key ("Profiles", "CustomProfileBuilder")) customProfileBuilder = keyFile.get_string ("Profiles", "CustomProfileBuilder"); } if (keyFile.has_group ("File Browser")) { if (keyFile.has_key ("File Browser", "ThumbnailSize")) thumbSize = keyFile.get_integer ("File Browser", "ThumbnailSize"); + if (keyFile.has_key ("File Browser", "ThumbnailSizeTab")) thumbSizeTab = keyFile.get_integer ("File Browser", "ThumbnailSizeTab"); if (keyFile.has_key ("File Browser", "BrowseOnlyRaw")) fbOnlyRaw = keyFile.get_boolean ("File Browser", "BrowseOnlyRaw"); if (keyFile.has_key ("File Browser", "BrowserShowsDate")) fbShowDateTime = keyFile.get_boolean ("File Browser", "BrowserShowsDate"); if (keyFile.has_key ("File Browser", "BrowserShowsExif")) fbShowBasicExif = keyFile.get_boolean ("File Browser", "BrowserShowsExif"); @@ -266,7 +273,9 @@ if (keyFile.has_group ("GUI")) { if (keyFile.has_key ("GUI", "FrameColor")) bgcolor = keyFile.get_integer ("GUI", "FrameColor"); if (keyFile.has_key ("GUI", "ProcessingQueueEnbled"))procQueueEnabled = keyFile.get_boolean ("GUI", "ProcessingQueueEnbled"); if (keyFile.has_key ("GUI", "ToolPanelsExpanded")) tpOpen = keyFile.get_integer_list ("GUI", "ToolPanelsExpanded"); + if (keyFile.has_key ("GUI", "MultiDisplayMode")) multiDisplayMode = keyFile.get_integer ("GUI", "MultiDisplayMode"); //if (keyFile.has_key ("GUI", "CurvePanelsExpanded")) crvOpen = keyFile.get_integer_list ("GUI", "CurvePanelsExpanded"); + if (keyFile.has_key ("GUI", "CutOverlayBrush")) cutOverlayBrush = keyFile.get_double_list ("GUI", "CutOverlayBrush"); } @@ -326,6 +335,7 @@ int Options::saveToFile (Glib::ustring fname) { keyFile.set_boolean ("File Browser", "BrowserShowsExif", fbShowBasicExif); keyFile.set_boolean ("File Browser", "BrowserShowsHidden", fbShowHidden); keyFile.set_integer ("File Browser", "ThumbnailSize", thumbSize); + keyFile.set_integer ("File Browser", "ThumbnailSizeTab", thumbSizeTab); keyFile.set_integer ("File Browser", "MaxPreviewHeight", maxThumbnailHeight); keyFile.set_integer ("File Browser", "MaxCacheEntries", maxCacheEntries); keyFile.set_integer ("File Browser", "ThumbnailFormat", (int)thumbnailFormat); @@ -371,6 +381,7 @@ int Options::saveToFile (Glib::ustring fname) { keyFile.set_boolean ("Profiles", "SaveParamsWithFile", saveParamsFile); keyFile.set_boolean ("Profiles", "SaveParamsToCache", saveParamsCache); keyFile.set_integer ("Profiles", "LoadParamsFromLocation", paramsLoadLocation); + keyFile.set_string ("Profiles", "CustomProfileBuilder", customProfileBuilder); keyFile.set_string ("GUI", "Font", font); keyFile.set_integer ("GUI", "WindowWidth", windowWidth); @@ -395,6 +406,9 @@ int Options::saveToFile (Glib::ustring fname) { keyFile.set_boolean ("GUI", "ProcessingQueueEnbled", procQueueEnabled); Glib::ArrayHandle tpopen = tpOpen; keyFile.set_integer_list ("GUI", "ToolPanelsExpanded", tpopen); + keyFile.set_integer ("GUI", "MultiDisplayMode", multiDisplayMode); + keyFile.set_double_list ("GUI", "CutOverlayBrush", cutOverlayBrush); + //Glib::ArrayHandle crvopen = crvOpen; //keyFile.set_integer_list ("GUI", "CurvePanelsExpanded", crvopen); @@ -455,7 +469,7 @@ void Options::load () { // out which are the parent translations. Furthermore, there must be a file for each locale () -- you cannot have // 'French (CA)' unless there is a file 'French'. - Glib::ustring defaultTranslation = argv0 + "/languages/default"; + Glib::ustring defaultTranslation = argv0 + "/languages/default"; Glib::ustring languageTranslation = ""; Glib::ustring localeTranslation = ""; diff --git a/rtgui/options.h b/rtgui/options.h index da848cd50..26b1889cc 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -84,7 +84,7 @@ class Options { bool multiUser; static Glib::ustring rtdir; int version; - int thumbSize; + int thumbSize,thumbSizeTab; bool showHistory; int showFilePanelState; // 0: normal, 1: maximized, 2: normal, 3: hidden bool showInfo; @@ -107,6 +107,7 @@ class Options { Glib::ustring gimpDir; Glib::ustring psDir; Glib::ustring customEditorProg; + Glib::ustring customProfileBuilder; int editorToSendTo; int maxThumbnailHeight; int maxCacheEntries; @@ -130,9 +131,11 @@ class Options { bool overlayedFileNames; bool showFileNames; bool tabbedUI; + int previewSizeTab,previewSizeBrowser; + int multiDisplayMode; // 0=none, 1=Edit panels on other display + std::vector cutOverlayBrush; // Red;Green;Blue;Alpha , all ranging 0..1 - - Options (); + Options (); Options* copyFrom (Options* other); void setDefaults (); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 1e11e93bb..b0afae6c2 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -32,6 +32,7 @@ void ParamsEdited::set (bool v) { toneCurve.brightness = v; toneCurve.black = v; toneCurve.contrast = v; + toneCurve.saturation = v; toneCurve.shcompr = v; toneCurve.hlcompr = v; toneCurve.autoexp = v; @@ -71,6 +72,9 @@ void ParamsEdited::set (bool v) { lumaDenoise.edgetolerance = v; colorDenoise.enabled = v; colorDenoise.amount = v; + defringe.enabled = v; + defringe.radius = v; + defringe.threshold = v; impulseDenoise.enabled = v; impulseDenoise.thresh = v; dirpyrDenoise.enabled = v; @@ -137,12 +141,18 @@ void ParamsEdited::set (bool v) { raw.dcbEnhance = v; equalizer.enabled = v; dirpyrequalizer.enabled = v; - - for(int i = 0; i < 5; i++) - { + hsvequalizer.enabled = v; + for(int i = 0; i < 8; i++) { equalizer.c[i] = v; - dirpyrequalizer.mult[i] = v; } + for(int i = 0; i < 5; i++) { + dirpyrequalizer.mult[i] = v; + } + for(int i = 0; i < 8; i++) { + hsvequalizer.sat[i] = v; + hsvequalizer.val[i] = v; + hsvequalizer.hue[i] = v; + } exif.clear (); iptc.clear (); } @@ -163,7 +173,8 @@ void ParamsEdited::initFrom (const std::vector toneCurve.brightness = toneCurve.brightness && p.toneCurve.brightness == other.toneCurve.brightness; toneCurve.black = toneCurve.black && p.toneCurve.black == other.toneCurve.black; toneCurve.contrast = toneCurve.contrast && p.toneCurve.contrast == other.toneCurve.contrast; - toneCurve.shcompr = toneCurve.shcompr && p.toneCurve.shcompr == other.toneCurve.shcompr; + toneCurve.saturation = toneCurve.saturation && p.toneCurve.saturation == other.toneCurve.saturation; + toneCurve.shcompr = toneCurve.shcompr && p.toneCurve.shcompr == other.toneCurve.shcompr; toneCurve.hlcompr = toneCurve.hlcompr && p.toneCurve.hlcompr == other.toneCurve.hlcompr; toneCurve.autoexp = toneCurve.autoexp && p.toneCurve.autoexp == other.toneCurve.autoexp; toneCurve.clip = toneCurve.clip && p.toneCurve.clip == other.toneCurve.clip; @@ -202,6 +213,9 @@ void ParamsEdited::initFrom (const std::vector lumaDenoise.edgetolerance = lumaDenoise.edgetolerance && p.lumaDenoise.edgetolerance == other.lumaDenoise.edgetolerance; colorDenoise.enabled = colorDenoise.enabled && p.colorDenoise.enabled == other.colorDenoise.enabled; colorDenoise.amount = colorDenoise.amount && p.colorDenoise.amount == other.colorDenoise.amount; + defringe.enabled = defringe.enabled && p.defringe.enabled == other.defringe.enabled; + defringe.radius = defringe.radius && p.defringe.radius == other.defringe.radius; + defringe.threshold = defringe.threshold && p.defringe.threshold == other.defringe.threshold; impulseDenoise.enabled = impulseDenoise.enabled && p.impulseDenoise.enabled == other.impulseDenoise.enabled; impulseDenoise.thresh = impulseDenoise.thresh && p.impulseDenoise.thresh == other.impulseDenoise.thresh; @@ -284,6 +298,12 @@ void ParamsEdited::initFrom (const std::vector for(int i = 0; i < 8; i++) { dirpyrequalizer.mult[i] = dirpyrequalizer.mult[i] && p.dirpyrequalizer.mult[i] == other.dirpyrequalizer.mult[i]; } + hsvequalizer.enabled = hsvequalizer.enabled && p.hsvequalizer.enabled == other.hsvequalizer.enabled; + for(int i = 0; i < 8; i++) { + hsvequalizer.sat[i] = hsvequalizer.sat[i] && p.hsvequalizer.sat[i] == other.hsvequalizer.sat[i]; + hsvequalizer.val[i] = hsvequalizer.val[i] && p.hsvequalizer.val[i] == other.hsvequalizer.val[i]; + hsvequalizer.hue[i] = hsvequalizer.hue[i] && p.hsvequalizer.hue[i] == other.hsvequalizer.hue[i]; + } // exif = exif && p.exif==other.exif // iptc = other.iptc; } @@ -295,6 +315,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten if (toneCurve.brightness) toEdit.toneCurve.brightness = options.baBehav[ADDSET_TC_BRIGHTNESS] ? toEdit.toneCurve.brightness + mods.toneCurve.brightness : mods.toneCurve.brightness; if (toneCurve.black) toEdit.toneCurve.black = options.baBehav[ADDSET_TC_BLACKLEVEL] ? toEdit.toneCurve.black + mods.toneCurve.black : mods.toneCurve.black; if (toneCurve.contrast) toEdit.toneCurve.contrast = options.baBehav[ADDSET_TC_CONTRAST] ? toEdit.toneCurve.contrast + mods.toneCurve.contrast : mods.toneCurve.contrast; + if (toneCurve.saturation) toEdit.toneCurve.saturation = options.baBehav[ADDSET_TC_SATURATION] ? toEdit.toneCurve.saturation + mods.toneCurve.saturation : mods.toneCurve.saturation; if (toneCurve.shcompr) toEdit.toneCurve.shcompr = mods.toneCurve.shcompr; if (toneCurve.hlcompr) toEdit.toneCurve.hlcompr = mods.toneCurve.hlcompr; if (toneCurve.autoexp) toEdit.toneCurve.autoexp = mods.toneCurve.autoexp; @@ -335,6 +356,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten if (colorDenoise.enabled) toEdit.colorDenoise.enabled = mods.colorDenoise.enabled; if (colorDenoise.amount) toEdit.colorDenoise.amount = mods.colorDenoise.amount; + if (defringe.enabled) toEdit.defringe.enabled = mods.defringe.enabled; + if (defringe.radius) toEdit.defringe.radius = mods.defringe.radius; + if (defringe.threshold) toEdit.defringe.threshold = mods.defringe.threshold; + if (impulseDenoise.enabled) toEdit.impulseDenoise.enabled = mods.impulseDenoise.enabled; if (impulseDenoise.thresh) toEdit.impulseDenoise.thresh = mods.impulseDenoise.thresh; @@ -412,9 +437,15 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten if(equalizer.c[i]) toEdit.equalizer.c[i] = mods.equalizer.c[i]; } if (dirpyrequalizer.enabled) toEdit.dirpyrequalizer.enabled = mods.dirpyrequalizer.enabled; - for(int i = 0; i < 8; i++) { + for(int i = 0; i < 5; i++) { if(dirpyrequalizer.mult[i]) toEdit.dirpyrequalizer.mult[i] = mods.dirpyrequalizer.mult[i]; } + if (hsvequalizer.enabled) toEdit.hsvequalizer.enabled = mods.hsvequalizer.enabled; + for(int i = 0; i < 8; i++) { + if(hsvequalizer.sat[i]) toEdit.hsvequalizer.sat[i] = mods.hsvequalizer.sat[i]; + if(hsvequalizer.val[i]) toEdit.hsvequalizer.val[i] = mods.hsvequalizer.val[i]; + if(hsvequalizer.hue[i]) toEdit.hsvequalizer.hue[i] = mods.hsvequalizer.hue[i]; + } // if (exif) toEdit.exif==mo.exif = mods.exif==other.exif; // if (iptc;) toEdit.iptc==other.iptc; = mods.iptc==other.iptc;; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 4e7f745c8..bad4f2281 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -31,7 +31,8 @@ class ToneCurveParamsEdited { bool brightness; bool black; bool contrast; - bool shcompr; + bool saturation; + bool shcompr; bool hlcompr; bool autoexp; bool clip; @@ -108,6 +109,14 @@ class ColorDenoiseParamsEdited { bool amount; }; +class DefringeParamsEdited { + +public: + bool enabled; + bool radius; + bool threshold; +}; + class ImpulseDenoiseParamsEdited { public: @@ -252,6 +261,16 @@ public: bool mult[8]; }; +class HSVEqualizerParamsEdited { + +public: + bool enabled; + bool sat[6]; + bool val[6]; + bool hue[6]; + int hsvchannel; +}; + class RAWParamsEdited { public: @@ -293,8 +312,9 @@ class ParamsEdited { LumaDenoiseParamsEdited lumaDenoise; ColorDenoiseParamsEdited colorDenoise; + DefringeParamsEdited defringe; DirPyrDenoiseParamsEdited dirpyrDenoise; - ImpulseDenoiseParamsEdited impulseDenoise; + ImpulseDenoiseParamsEdited impulseDenoise; SHParamsEdited sh; CropParamsEdited crop; @@ -312,6 +332,7 @@ class ParamsEdited { EqualizerParamsEdited equalizer; RAWParamsEdited raw; DirPyrEqualizerParamsEdited dirpyrequalizer; + HSVEqualizerParamsEdited hsvequalizer; std::vector exif; std::vector iptc; diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index b903365af..88dd47e32 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -51,6 +51,7 @@ PartialPasteDlg::PartialPasteDlg () { colorboost = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORBOOST"))); colorden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORDENOISE"))); dirpyrden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYRDENOISE"))); + hsveq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_HSVEQUALIZER"))); // options in lens: distortion = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DISTORTION"))); @@ -97,6 +98,7 @@ PartialPasteDlg::PartialPasteDlg () { vboxes[2]->pack_start (*colormixer, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*colorshift, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*colorboost, Gtk::PACK_SHRINK, 2); + vboxes[2]->pack_start (*hsveq, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*colorden, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*dirpyrden, Gtk::PACK_SHRINK, 2); @@ -160,7 +162,8 @@ PartialPasteDlg::PartialPasteDlg () { colormixerConn = colormixer->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true)); colorshiftConn = colorshift->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true)); colorboostConn = colorboost->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true)); - colordenConn = colorden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true)); + hsveqConn = hsveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true)); + colordenConn = colorden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true)); dirpyrdenConn = dirpyrden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true)); distortionConn = distortion->signal_toggled().connect (sigc::bind (sigc::mem_fun(*lens, &Gtk::CheckButton::set_inconsistent), true)); @@ -242,6 +245,7 @@ void PartialPasteDlg::colorToggled () { colormixer->set_active (color->get_active ()); colorshift->set_active (color->get_active ()); colorboost->set_active (color->get_active ()); + hsveq->set_active (color->get_active ()); colorden->set_active (color->get_active ()); dirpyrden->set_active (color->get_active ()); @@ -324,6 +328,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r if (colormixer->get_active ()) dst->chmixer = src->chmixer; if (colorshift->get_active ()) dst->colorShift = src->colorShift; if (colorboost->get_active ()) dst->colorBoost = src->colorBoost; + if (hsveq->get_active ()) dst->hsvequalizer = src->hsvequalizer; if (colorden->get_active ()) dst->colorDenoise = src->colorDenoise; if (dirpyrden->get_active ()) dst->dirpyrDenoise = src->dirpyrDenoise; diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h index 2ea23772a..127b83833 100644 --- a/rtgui/partialpastedlg.h +++ b/rtgui/partialpastedlg.h @@ -51,6 +51,7 @@ class PartialPasteDlg : public Gtk::Dialog { Gtk::CheckButton* colormixer; Gtk::CheckButton* colorshift; Gtk::CheckButton* colorboost; + Gtk::CheckButton* hsveq; Gtk::CheckButton* colorden; Gtk::CheckButton* dirpyrden; @@ -73,7 +74,7 @@ class PartialPasteDlg : public Gtk::Dialog { sigc::connection basicConn, luminanceConn, colorConn, lensConn, compositionConn, metaicmConn; sigc::connection wbConn, exposureConn, hlrecConn; - sigc::connection sharpenConn, impdenConn, lumadenConn, labcurveConn, shConn, dirpyreqConn, waveqConn; + sigc::connection sharpenConn, impdenConn, lumadenConn, labcurveConn, shConn, dirpyreqConn, waveqConn, hsveqConn; sigc::connection colormixerConn, colorshiftConn, colorboostConn, colordenConn, dirpyrdenConn; sigc::connection distortionConn, cacorrConn, vignettingConn; sigc::connection coarserotConn, finerotConn, cropConn, resizeConn; diff --git a/rtgui/popupbutton.cc b/rtgui/popupbutton.cc index bc201ce77..0ef2bfc95 100644 --- a/rtgui/popupbutton.cc +++ b/rtgui/popupbutton.cc @@ -28,10 +28,8 @@ * * Parameters: * label = label displayed in the button - * imRight = 0: the image is displayed at the left of the label (default) - * 1: the image is displayed at the right of the label */ -PopUpButton::PopUpButton (const Glib::ustring& label, bool imgRight) : Gtk::Button(), PopUpCommon(this, label, imgRight) { } +PopUpButton::PopUpButton (const Glib::ustring& label) : Gtk::Button(), PopUpCommon(this, label) { } void PopUpButton::show() { PopUpCommon::show(); diff --git a/rtgui/popupbutton.h b/rtgui/popupbutton.h index 3cf981a16..fbb1ef67a 100644 --- a/rtgui/popupbutton.h +++ b/rtgui/popupbutton.h @@ -27,7 +27,7 @@ class PopUpButton : public Gtk::Button, public PopUpCommon { public: - PopUpButton (const Glib::ustring& label = "", bool imgRight=false); + PopUpButton (const Glib::ustring& label = ""); void show (); void set_tooltip_text (const Glib::ustring &text); }; diff --git a/rtgui/popupcommon.cc b/rtgui/popupcommon.cc index ac8d40d7b..3f24e03ed 100644 --- a/rtgui/popupcommon.cc +++ b/rtgui/popupcommon.cc @@ -23,15 +23,18 @@ #include #include -PopUpCommon::PopUpCommon (Gtk::Button* thisButton, const Glib::ustring& label, bool imgRight) { +extern Glib::ustring argv0; + +PopUpCommon::PopUpCommon (Gtk::Button* thisButton, const Glib::ustring& label) { button = thisButton; hasMenu = false; + menuSymbol = 0; + imageContainer = Gtk::manage( new Gtk::HBox()); + button->add(*imageContainer); if (label.size()) { - hasText = true; - button->set_label(label + " "); + Gtk::Label* buttonLabel = Gtk::manage ( new Gtk::Label(label + " ") ); + imageContainer->pack_start(*buttonLabel, Gtk::PACK_SHRINK, 0); } - else - hasText = false; // Create the list entry imagePaths.clear(); images.clear(); @@ -41,7 +44,6 @@ PopUpCommon::PopUpCommon (Gtk::Button* thisButton, const Glib::ustring& label, b menu = 0; buttonImage = 0; buttonHint = ""; - imageRight = imgRight; // By default, image is on the left in the menu } PopUpCommon::~PopUpCommon () { @@ -54,6 +56,7 @@ PopUpCommon::~PopUpCommon () { delete *i; } if (menu) delete menu; + if (menuSymbol) delete menuSymbol; if (buttonImage) delete buttonImage; } @@ -79,13 +82,7 @@ bool PopUpCommon::addEntry (Glib::ustring imagePath, Glib::ustring label) { // Create the image for the button buttonImage = new Gtk::Image(imagePath); // Use the first image by default - if (hasText) { - button->set_image_position(imageRight ? Gtk::POS_RIGHT : Gtk::POS_LEFT); - button->set_image(*buttonImage); - } - else { - button->add(*buttonImage); - } + imageContainer->pack_start(*buttonImage,Gtk::PACK_EXPAND_WIDGET); selected = 0; } newItem->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &PopUpCommon::entrySelected), currPos-1)); @@ -93,6 +90,8 @@ bool PopUpCommon::addEntry (Glib::ustring imagePath, Glib::ustring label) { // When there is at least 2 choice, we add the RMB connector if (images.size() == 2) { button->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &PopUpCommon::showMenu) ); + menuSymbol = new Gtk::Image(safe_locale_from_utf8(argv0+"/images/menuSymbol.png")); + imageContainer->pack_start(*menuSymbol,Gtk::PACK_SHRINK, 2); hasMenu = true; } // The item has been created @@ -128,7 +127,7 @@ void PopUpCommon::show() { menu->reposition(); setButtonHint(); menu->show_all(); - button->show(); + button->show_all(); } void PopUpCommon::setButtonHint() { diff --git a/rtgui/popupcommon.h b/rtgui/popupcommon.h index 2a23c6d24..6bd8258f2 100644 --- a/rtgui/popupcommon.h +++ b/rtgui/popupcommon.h @@ -32,7 +32,7 @@ public: typedef sigc::signal type_signal_changed; type_signal_changed signal_changed(); - PopUpCommon (Gtk::Button* button, const Glib::ustring& label = "", bool imgRight=false); + PopUpCommon (Gtk::Button* button, const Glib::ustring& label = ""); ~PopUpCommon (); bool addEntry (Glib::ustring imagePath, Glib::ustring label); bool setSelected (int entryNum); @@ -54,11 +54,11 @@ private: std::vector items; Glib::ustring buttonHint; Gtk::Image* buttonImage; + Gtk::Image* menuSymbol; + Gtk::HBox* imageContainer; Gtk::Menu* menu; Gtk::Button* button; int selected; - bool hasText; - bool imageRight; bool hasMenu; void showMenu(GdkEventButton* event); diff --git a/rtgui/popuptogglebutton.cc b/rtgui/popuptogglebutton.cc index 27e0bff30..7a9051d26 100644 --- a/rtgui/popuptogglebutton.cc +++ b/rtgui/popuptogglebutton.cc @@ -28,10 +28,8 @@ * * Parameters: * label = label displayed in the button - * imRight = 0: the image is displayed at the left of the label (default) - * 1: the image is displayed at the right of the label */ -PopUpToggleButton::PopUpToggleButton (const Glib::ustring& label, bool imgRight) : Gtk::ToggleButton(), PopUpCommon(this, label, imgRight) { } +PopUpToggleButton::PopUpToggleButton (const Glib::ustring& label) : Gtk::ToggleButton(), PopUpCommon(this, label) { } void PopUpToggleButton::show() { PopUpCommon::show(); diff --git a/rtgui/popuptogglebutton.h b/rtgui/popuptogglebutton.h index bc18a888f..86f94e6c8 100644 --- a/rtgui/popuptogglebutton.h +++ b/rtgui/popuptogglebutton.h @@ -27,7 +27,7 @@ class PopUpToggleButton : public Gtk::ToggleButton, public PopUpCommon { public: - PopUpToggleButton (const Glib::ustring& label = "", bool imgRight=false); + PopUpToggleButton (const Glib::ustring& label = ""); void show (); void set_tooltip_text (const Glib::ustring &text); }; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index cceb47ed2..26cd99588 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -34,7 +34,8 @@ Preferences::Preferences (RTWindow *rtwindow):parent(rtwindow) { moptions.copyFrom (&options); - set_size_request (650, 650); + // Do not increase height, since it's not visible on e.g. smaller netbook screens + set_size_request (650, 600); set_border_width (4); Gtk::VBox* mainvb = get_vbox (); @@ -95,8 +96,8 @@ Gtk::Widget* Preferences::getBatchProcPanel () { behscrollw->set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); Gtk::Frame* behFrame = Gtk::manage (new Gtk::Frame (M("PREFERENCES_BEHAVIOR"))); behFrame->add (*behscrollw); - mvbpp->pack_start (*behFrame); -// mvbpp->pack_start (*behFrame, Gtk::PACK_SHRINK, 2); + //mvbpp->pack_start (*behFrame); + mvbpp->pack_start (*behFrame, Gtk::PACK_EXPAND_WIDGET, 4); Gtk::TreeView* behTreeView = Gtk::manage (new Gtk::TreeView ()); behscrollw->add (*behTreeView); @@ -133,6 +134,7 @@ Gtk::Widget* Preferences::getBatchProcPanel () { appendBehavList (mi, M("TP_EXPOSURE_BRIGHTNESS"), ADDSET_TC_BRIGHTNESS, false); appendBehavList (mi, M("TP_EXPOSURE_BLACKLEVEL"), ADDSET_TC_BLACKLEVEL, false); appendBehavList (mi, M("TP_EXPOSURE_CONTRAST"), ADDSET_TC_CONTRAST, false); + appendBehavList (mi, M("TP_EXPOSURE_SATURATION"), ADDSET_TC_SATURATION, false); mi = behModel->append (); mi->set_value (behavColumns.label, M("TP_SHADOWSHLIGHTS_LABEL")); @@ -190,6 +192,9 @@ Gtk::Widget* Preferences::getBatchProcPanel () { behTreeView->expand_all (); + chOverwriteOutputFile = new Gtk::CheckButton (M("PREFERENCES_OVERWRITEOUTPUTFILE")); + mvbpp->pack_start(*chOverwriteOutputFile, Gtk::PACK_SHRINK, 4); + return mvbpp; } @@ -325,6 +330,7 @@ Gtk::Widget* Preferences::getGeneralPanel () { editorLayout->append_text (M("PREFERENCES_SINGLETAB")); editorLayout->append_text (M("PREFERENCES_MULTITAB")); + editorLayout->append_text (M("PREFERENCES_MULTITABDUALMON")); editorLayout->set_active (1); hbworkflow->pack_start (*flayoutlab, Gtk::PACK_SHRINK, 4); @@ -756,7 +762,11 @@ void Preferences::storePreferences () { for (Gtk::TreeIter adjs=sections->children().begin(); adjs!=sections->children().end(); adjs++) moptions.baBehav[adjs->get_value (behavColumns.addsetid)] = adjs->get_value (behavColumns.badd); - moptions.tabbedUI = (bool)editorLayout->get_active_row_number(); + int editorMode=editorLayout->get_active_row_number(); + moptions.tabbedUI = (editorMode>0); + moptions.multiDisplayMode = editorMode==2 ? 1:0; + + moptions.overwriteOutputFile = chOverwriteOutputFile->get_active (); } void Preferences::fillPreferences () { @@ -830,7 +840,11 @@ void Preferences::fillPreferences () { saveParamsCache->set_active (moptions.saveParamsCache); loadParamsPreference->set_active (moptions.paramsLoadLocation); - editorLayout->set_active(moptions.tabbedUI); + if (!moptions.tabbedUI) + editorLayout->set_active(0); + else + editorLayout->set_active(moptions.multiDisplayMode ? 2 : 1); + darkFrameDir->set_filename( moptions.rtSettings.darkFramesPath ); updateDFinfos(); @@ -850,6 +864,8 @@ void Preferences::fillPreferences () { setc.block (false); tconn.block (false); dfconn.block (false); + + chOverwriteOutputFile->set_active (moptions.overwriteOutputFile); } void Preferences::loadPressed () { diff --git a/rtgui/preferences.h b/rtgui/preferences.h index 6fd81c6a4..4b9d78ed2 100644 --- a/rtgui/preferences.h +++ b/rtgui/preferences.h @@ -98,6 +98,8 @@ class Preferences : public Gtk::Dialog { Gtk::Button* delExt; Gtk::CheckButton* overlayedFileNames; + Gtk::CheckButton* chOverwriteOutputFile; + Gtk::CheckButton* saveParamsFile; Gtk::CheckButton* saveParamsCache; Gtk::ComboBoxText* loadParamsPreference; diff --git a/rtgui/previewloader.cc b/rtgui/previewloader.cc index c8a5fa337..288ce79e0 100644 --- a/rtgui/previewloader.cc +++ b/rtgui/previewloader.cc @@ -65,9 +65,9 @@ public: Impl() { - int threadCount=1; + int threadCount=2; #ifdef _OPENMP - threadCount=omp_get_num_procs(); + threadCount=int(omp_get_num_procs()*1.5); #endif threadPool_=new Glib::ThreadPool(threadCount,0); diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index 6dd3cfe40..344680cef 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -20,6 +20,7 @@ #include #include #include +#include RTWindow::RTWindow () { @@ -96,9 +97,8 @@ RTWindow::RTWindow () { // filling bottom box Gtk::LinkButton* rtWeb = Gtk::manage (new Gtk::LinkButton ("http://rawtherapee.com")); - Gtk::Button* preferences = Gtk::manage (new Gtk::Button (M("MAIN_BUTTON_PREFERENCES"))); + Gtk::Button* preferences = Gtk::manage (new Gtk::Button (M("MAIN_BUTTON_PREFERENCES")+"...")); preferences->set_image (*Gtk::manage(new Gtk::Image (Gtk::StockID("gtk-preferences"), Gtk::ICON_SIZE_BUTTON))); - preferences->set_relief (Gtk::RELIEF_NONE); preferences->signal_clicked().connect( sigc::mem_fun(*this, &RTWindow::showPreferences) ); is_fullscreen = false; btn_fullscreen = Gtk::manage( new Gtk::Button(M("MAIN_BUTTON_FULLSCREEN"))); @@ -115,12 +115,11 @@ RTWindow::RTWindow () { style->set_xthickness (0); style->set_ythickness (0); rtWeb->modify_style (style); - preferences->modify_style (style); add (*mainBox); show_all (); - if(options.tabbedUI) + if(options.tabbedUI || EditWindow::isMultiDisplayEnabled()) epanel->hide_all(); } @@ -153,50 +152,59 @@ void RTWindow::on_mainNB_switch_page(GtkNotebookPage* page, guint page_num) { } void RTWindow::addEditorPanel (EditorPanel* ep, const std::string &name) { + if (EditWindow::isMultiDisplayEnabled()) { + EditWindow * wndEdit = EditWindow::getInstance(this); + wndEdit->show_all(); + wndEdit->addEditorPanel(ep,name); + } else { + ep->setParent (this); - ep->setParent (this); + // construct closeable tab for the image + Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); + hb->pack_start (*Gtk::manage (new Gtk::Image (Gtk::Stock::FILE, Gtk::ICON_SIZE_MENU))); + hb->pack_start (*Gtk::manage (new Gtk::Label (name))); + Gtk::Button* closeb = Gtk::manage (new Gtk::Button ()); + closeb->set_image (*Gtk::manage(new Gtk::Image (Gtk::Stock::CLOSE, Gtk::ICON_SIZE_MENU))); + closeb->set_relief (Gtk::RELIEF_NONE); + closeb->set_focus_on_click (false); + // make the button as small as possible + Glib::RefPtr style = Gtk::RcStyle::create (); + style->set_xthickness (0); + style->set_ythickness (0); - // construct closeable tab for the image - Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); - hb->pack_start (*Gtk::manage (new Gtk::Image (Gtk::Stock::FILE, Gtk::ICON_SIZE_MENU))); - hb->pack_start (*Gtk::manage (new Gtk::Label (name))); - Gtk::Button* closeb = Gtk::manage (new Gtk::Button ()); - closeb->set_image (*Gtk::manage(new Gtk::Image (Gtk::Stock::CLOSE, Gtk::ICON_SIZE_MENU))); - closeb->set_relief (Gtk::RELIEF_NONE); - closeb->set_focus_on_click (false); - // make the button as small as possible - Glib::RefPtr style = Gtk::RcStyle::create (); - style->set_xthickness (0); - style->set_ythickness (0); + closeb->modify_style (style); + closeb->signal_clicked().connect( sigc::bind (sigc::mem_fun(*this, &RTWindow::remEditorPanel) , ep)); + hb->pack_end (*closeb); + hb->set_spacing (2); + hb->show_all (); - closeb->modify_style (style); - closeb->signal_clicked().connect( sigc::bind (sigc::mem_fun(*this, &RTWindow::remEditorPanel) , ep)); - hb->pack_end (*closeb); - hb->set_spacing (2); - hb->show_all (); + mainNB->append_page (*ep, *hb); + //ep->setAspect (); + mainNB->set_current_page (mainNB->page_num (*ep)); + mainNB->set_tab_reorderable (*ep, true); - mainNB->append_page (*ep, *hb); - //ep->setAspect (); - mainNB->set_current_page (mainNB->page_num (*ep)); - mainNB->set_tab_reorderable (*ep, true); - - epanels[ name ] = ep; - filesEdited.insert ( name ); - fpanel->refreshEditedState (filesEdited); + epanels[ name ] = ep; + filesEdited.insert ( name ); + fpanel->refreshEditedState (filesEdited); + } } void RTWindow::remEditorPanel (EditorPanel* ep) { + if (EditWindow::isMultiDisplayEnabled()) { + EditWindow * wndEdit = EditWindow::getInstance(this); + wndEdit->remEditorPanel(ep); + } else { + //ep->saveOptions (); + epanels.erase (ep->getShortName()); + filesEdited.erase (ep->getShortName ()); + fpanel->refreshEditedState (filesEdited); - //ep->saveOptions (); - epanels.erase (ep->getFileName()); - filesEdited.erase (ep->getFileName ()); - fpanel->refreshEditedState (filesEdited); + mainNB->remove_page (*ep); - mainNB->remove_page (*ep); - - if (mainNB->get_current_page () == mainNB->page_num (*bpanel)) - mainNB->set_current_page (mainNB->page_num (*fpanel)); - // TODO: ask what to do: close & apply, close & apply selection, close & revert, cancel + if (mainNB->get_current_page () == mainNB->page_num (*bpanel)) + mainNB->set_current_page (mainNB->page_num (*fpanel)); + // TODO: ask what to do: close & apply, close & apply selection, close & revert, cancel + } } bool RTWindow::keyPressed (GdkEventKey* event) { @@ -224,7 +232,15 @@ void RTWindow::imageDeveloped (Glib::ustring fname) { void RTWindow::addBatchQueueJob (BatchQueueEntry* bqe, bool head) { - bpanel->addBatchQueueJob (bqe, head); + std::vector entries; + entries.push_back(bqe); + bpanel->addBatchQueueJobs (entries, head); + fpanel->queue_draw (); +} + +void RTWindow::addBatchQueueJobs (std::vector &entries) { + + bpanel->addBatchQueueJobs (entries, false); fpanel->queue_draw (); } @@ -335,8 +351,7 @@ void RTWindow::MoveFileBrowserToMain() FileCatalog *fCatalog = fpanel->fileCatalog; epanel->catalogPane->remove(*fCatalog); fpanel->ribbonPane->add(*fCatalog); - fCatalog->fileBrowser->setArrangement(ThumbBrowserBase::TB_Vertical); - fCatalog->redrawAll(); + fCatalog->enableTabMode(false); } } @@ -347,22 +362,22 @@ void RTWindow::MoveFileBrowserToEditor() FileCatalog *fCatalog = fpanel->fileCatalog; fpanel->ribbonPane->remove(*fCatalog); epanel->catalogPane->add(*fCatalog); - fCatalog->fileBrowser->setArrangement(ThumbBrowserBase::TB_Horizontal); - fCatalog->redrawAll(); + fCatalog->enableTabMode(true); + fCatalog->refreshHeight(); } } bool RTWindow::on_expose_event_epanel(GdkEventExpose* event) { - if(!options.tabbedUI) + if(!options.tabbedUI && !EditWindow::isMultiDisplayEnabled()) MoveFileBrowserToEditor(); - return false; // Gtk::VBox::on_expose_event(event); + return false; // Gtk::VBox::on_expose_event(event); } bool RTWindow::on_expose_event_fpanel(GdkEventExpose* event) { - if(!options.tabbedUI) + if(!options.tabbedUI && !EditWindow::isMultiDisplayEnabled()) MoveFileBrowserToMain(); return false; // Gtk::HPaned::on_expose_event(event); } diff --git a/rtgui/rtwindow.h b/rtgui/rtwindow.h index afd4af067..59d9f6def 100644 --- a/rtgui/rtwindow.h +++ b/rtgui/rtwindow.h @@ -30,7 +30,6 @@ class RTWindow : public Gtk::Window, public rtengine::ProgressListener{ private: Gtk::Notebook* mainNB; - FilePanel* fpanel; BatchQueuePanel* bpanel; std::set filesEdited; std::map epanels; @@ -50,6 +49,7 @@ class RTWindow : public Gtk::Window, public rtengine::ProgressListener{ void remEditorPanel (EditorPanel* ep); void addBatchQueueJob (BatchQueueEntry* bqe, bool head=false); + void addBatchQueueJobs (std::vector &entries); bool keyPressed (GdkEventKey* event); bool on_delete_event(GdkEventAny* event); @@ -65,7 +65,10 @@ class RTWindow : public Gtk::Window, public rtengine::ProgressListener{ void setProgressState (int state); void error (Glib::ustring descr); rtengine::ProgressListener* getProgressListener () { return pldBridge; } + EditorPanel* epanel; + FilePanel* fpanel; + void SetEditorCurrent(); void SetMainCurrent(); void MoveFileBrowserToEditor(); diff --git a/rtgui/safegtk.cc b/rtgui/safegtk.cc index 5660ae799..8c441862a 100644 --- a/rtgui/safegtk.cc +++ b/rtgui/safegtk.cc @@ -187,3 +187,24 @@ bool safe_spawn_command_line_async (const Glib::ustring& cmd_utf8) #endif return success; } + +bool safe_spawn_command_line_sync (const Glib::ustring& cmd_utf8) +{ + std::string cmd; + std::string stdOut; + std::string stdErr; + + bool success = false; + + int exitStatus=-1; + try { + cmd = Glib::filename_from_utf8(cmd_utf8); + printf ("command line: |%s|\n", cmd.c_str()); + + // if it crashes here on windows, make sure you have the GTK runtime files gspawn-win32-helper*.exe files in RT directory + Glib::spawn_command_line_sync (cmd,NULL,NULL, &exitStatus); + } catch (Glib::Exception& ex) { + printf ("%s\n", ex.what().c_str()); + } + return (exitStatus==0); +} diff --git a/rtgui/safegtk.h b/rtgui/safegtk.h index 18030db38..b9b597aaa 100644 --- a/rtgui/safegtk.h +++ b/rtgui/safegtk.h @@ -24,6 +24,7 @@ void safe_build_file_list (Glib::RefPtr &dir, std::vector &dir, std::vector &subDirs, bool add_hidden); bool safe_spawn_command_line_async (const Glib::ustring& cmd_utf8); +bool safe_spawn_command_line_sync (const Glib::ustring& cmd_utf8); Glib::ustring safe_locale_to_utf8 (const std::string& src); // from rtengine std::string safe_locale_from_utf8 (const Glib::ustring& utf8_str); diff --git a/rtgui/thumbbrowserbase.cc b/rtgui/thumbbrowserbase.cc index cea0bbc83..99ca1a4f5 100644 --- a/rtgui/thumbbrowserbase.cc +++ b/rtgui/thumbbrowserbase.cc @@ -24,7 +24,7 @@ ThumbBrowserBase::ThumbBrowserBase () : lastClicked(NULL), previewHeight(options.thumbSize) { - + inTabMode=false; // corresponding to take thumbSize inW = -1; inH = -1; Gtk::HBox* hb1 = new Gtk::HBox (); @@ -467,19 +467,22 @@ void ThumbBrowserBase::zoomChanged (bool zoomIn) { int newHeight; int i=0; + int optThumbSize=getCurrentThumbSize(); if (zoomIn) for (i=0; i options.thumbSize) + if (newHeight > optThumbSize) break; } else for (i=options.thumbnailZoomRatios.size()-1; i>=0; i--) { newHeight = (int)(options.thumbnailZoomRatios[i] * options.maxThumbnailHeight); - if (newHeight < options.thumbSize) + if (newHeight < optThumbSize) break; } - previewHeight = options.thumbSize = newHeight; + previewHeight = newHeight; + if (inTabMode) options.thumbSizeTab = newHeight; else options.thumbSize = newHeight; + for (int i=0; iresize (previewHeight); redraw (); @@ -487,12 +490,15 @@ void ThumbBrowserBase::zoomChanged (bool zoomIn) { gdk_window_process_updates (get_window()->gobj(), true); #endif } + +int ThumbBrowserBase::getCurrentThumbSize() { return inTabMode ? options.thumbSizeTab : options.thumbSize; } + void ThumbBrowserBase::refreshThumbImages () { for (int i=0; iresize (previewHeight);// TODO!!! Might be performance bottleneck - fd[i]->refreshThumbnailImage (); + fd[i]->refreshThumbnailImage (); // TODO: This might cause crashes on some installations } redraw (); @@ -518,6 +524,24 @@ void ThumbBrowserBase::setArrangement (Arrangement a) { redraw (); } +void ThumbBrowserBase::enableTabMode(bool enable) { + inTabMode = enable; + arrangement = inTabMode ? ThumbBrowserBase::TB_Horizontal : ThumbBrowserBase::TB_Vertical; + + if (options.thumbSizeTab!=options.thumbSize) { + for (int i=0; iresize (getCurrentThumbSize()); + } + + redraw (); + + // Scroll to selected position if going into ribbon mode + if (inTabMode && !selected.empty()) { + int h=selected[0]->getStartX(); + hscroll.set_value (MIN(h, hscroll.get_adjustment()->get_upper())); + } +} + void ThumbBrowserBase::initEntry (ThumbBrowserEntryBase* entry) { entry->setOffset ((int)(hscroll.get_value()), (int)(vscroll.get_value())); @@ -534,6 +558,14 @@ void ThumbBrowserBase::setScrollPosition (double h, double v) { vscroll.set_value (v>vscroll.get_adjustment()->get_upper() ? vscroll.get_adjustment()->get_upper() : v); } +// needed for auto-height in single tab +int ThumbBrowserBase::getEffectiveHeight() { + int h=0; + if (fd.size()>0) h=fd[0]->getEffectiveHeight(); + return h; +} + + /*void PreviewImgUpdater::processCustomOrder () { // find first filtered entry, if any diff --git a/rtgui/thumbbrowserbase.h b/rtgui/thumbbrowserbase.h index 801a96756..60b1f24ce 100644 --- a/rtgui/thumbbrowserbase.h +++ b/rtgui/thumbbrowserbase.h @@ -55,7 +55,10 @@ class ThumbBrowserBase : public Gtk::VBox { Gtk::VScrollbar vscroll; int inW, inH; - + + bool inTabMode; // Tab mode has e.g. different preview heights + int getCurrentThumbSize(); // depending on filmstrip/file browser mode + void resizeThumbnailArea (int w, int h); void internalAreaResized (Gtk::Allocation& req); void buttonPressed (int x, int y, int button, GdkEventType type, int state, int clx, int cly, int clw, int clh); @@ -90,6 +93,7 @@ class ThumbBrowserBase : public Gtk::VBox { void zoomIn () { zoomChanged (true); } void zoomOut () { zoomChanged (false); } + int getEffectiveHeight (); const std::vector& getEntries () { return fd; } void styleChanged (const Glib::RefPtr& style); @@ -104,6 +108,8 @@ class ThumbBrowserBase : public Gtk::VBox { void setScrollPosition (double h, double v); void setArrangement (Arrangement a); + void enableTabMode(bool enable); // set both thumb sizes and arrangements + virtual bool checkFilter (ThumbBrowserEntryBase* entry) { return true; } virtual void rightClicked (ThumbBrowserEntryBase* entry) {} virtual void doubleClicked (ThumbBrowserEntryBase* entry) {} diff --git a/rtgui/thumbbrowserentrybase.cc b/rtgui/thumbbrowserentrybase.cc index e94f2605b..7d3f23035 100644 --- a/rtgui/thumbbrowserentrybase.cc +++ b/rtgui/thumbbrowserentrybase.cc @@ -271,6 +271,9 @@ void ThumbBrowserEntryBase::resize (int h) { // dimensions of the info text getTextSizes (infow, infoh); preh -= infoh + textGap; + + // If the text size was selected very high in preferences this may go negative + if (preh<0) preh=30; } calcThumbnailSize (); diff --git a/rtgui/thumbbrowserentrybase.h b/rtgui/thumbbrowserentrybase.h index 6562633d0..9b06dbb3d 100644 --- a/rtgui/thumbbrowserentrybase.h +++ b/rtgui/thumbbrowserentrybase.h @@ -101,6 +101,10 @@ protected: void addButtonSet (LWButtonSet* bs); int getMinimalHeight () { return height; } int getMinimalWidth () { return width; } + + int getEffectiveHeight () { return fnlabh+dtlabh+exlabh+textGap+exp_height; } + int getStartX () { return startx; } + bool inside (int x, int y); bool insideWindow (int x, int y, int w, int h); void setPosition (int x, int y, int w, int h); diff --git a/rtgui/thumbimageupdater.cc b/rtgui/thumbimageupdater.cc index 38720095f..1f87418a8 100644 --- a/rtgui/thumbimageupdater.cc +++ b/rtgui/thumbimageupdater.cc @@ -97,7 +97,7 @@ public: // nothing to do; could be jobs have been removed if ( jobs_.empty() ) { - DEBUG("processing: nothing to do (%d,%d)",paused_,jobs_.empty()); + DEBUG("processing: nothing to do (%d)",jobs_.empty()); return; } @@ -114,12 +114,15 @@ public: } // see if any none upgrade jobs exist - for ( i = jobs_.begin(); i != jobs_.end(); ++i) + if ( i == jobs_.end() ) { - if ( !i->upgrade_ ) + for ( i = jobs_.begin(); i != jobs_.end(); ++i) { - DEBUG("processing(not-upgrade) %s",i->thumbnail_->getFileName().c_str()); - break; + if ( !i->upgrade_ ) + { + DEBUG("processing(not-upgrade) %s",i->thumbnail_->getFileName().c_str()); + break; + } } } diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc index cb73bd1bf..c55a494fb 100644 --- a/rtgui/thumbnail.cc +++ b/rtgui/thumbnail.cc @@ -99,7 +99,7 @@ void Thumbnail::_generateThumbnailImage () { // 2. if we don't find that then just grab the real image. bool quick = false; rtengine::RawMetaDataLocation ri; - if ( initial_ ) + if ( initial_ && options.internalThumbIfUntouched) { quick = true; tpp = rtengine::Thumbnail::loadQuickFromRaw (fname, ri, tw, th, 1); @@ -489,13 +489,16 @@ void Thumbnail::setFileName (const Glib::ustring fn) { void Thumbnail::addThumbnailListener (ThumbnailListener* tnl) { + increaseRef(); listeners.push_back (tnl); } void Thumbnail::removeThumbnailListener (ThumbnailListener* tnl) { std::vector::iterator f = std::find (listeners.begin(), listeners.end(), tnl); - if (f!=listeners.end()) + if (f!=listeners.end()) { listeners.erase (f); + decreaseRef(); + } } diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc index 01359dde3..67bb46329 100644 --- a/rtgui/tonecurve.cc +++ b/rtgui/tonecurve.cc @@ -55,7 +55,7 @@ ToneCurve::ToneCurve () : ToolPanel(), expAdd(false), blackAdd(false), brAdd(fal pack_start (*hlcompr); //----------- Black Level ---------------------------------- - black = Gtk::manage (new Adjuster (M("TP_EXPOSURE_BLACKLEVEL"), 0, 32768, 1, 0)); + black = Gtk::manage (new Adjuster (M("TP_EXPOSURE_BLACKLEVEL"), -16384, 32768, 1, 0)); pack_start (*black); shcompr = Gtk::manage (new Adjuster (M("TP_EXPOSURE_COMPRSHADOWS"), 0, 100, 1, 50)); pack_start (*shcompr); @@ -67,7 +67,8 @@ ToneCurve::ToneCurve () : ToolPanel(), expAdd(false), blackAdd(false), brAdd(fal pack_start (*brightness); contrast = Gtk::manage (new Adjuster (M("TP_EXPOSURE_CONTRAST"), -100, 100, 1, 0)); pack_start (*contrast); - + saturation = Gtk::manage (new Adjuster (M("TP_EXPOSURE_SATURATION"), -100, 100, 1, 0)); + pack_start (*saturation); //----------- Curve ------------------------------ pack_start (*Gtk::manage (new Gtk::HSeparator())); @@ -91,6 +92,7 @@ ToneCurve::ToneCurve () : ToolPanel(), expAdd(false), blackAdd(false), brAdd(fal hlcompr->setAdjusterListener (this); shcompr->setAdjusterListener (this); contrast->setAdjusterListener (this); + saturation->setAdjusterListener (this); } void ToneCurve::read (const ProcParams* pp, const ParamsEdited* pedited) { @@ -104,7 +106,8 @@ void ToneCurve::read (const ProcParams* pp, const ParamsEdited* pedited) { shcompr->setEditedState (pedited->toneCurve.shcompr ? Edited : UnEdited); brightness->setEditedState (pedited->toneCurve.brightness ? Edited : UnEdited); contrast->setEditedState (pedited->toneCurve.contrast ? Edited : UnEdited); - autolevels->set_inconsistent (!pedited->toneCurve.autoexp); + saturation->setEditedState (pedited->toneCurve.saturation ? Edited : UnEdited); + autolevels->set_inconsistent (!pedited->toneCurve.autoexp); clipDirty = pedited->toneCurve.clip; shape->setUnChanged (!pedited->toneCurve.curve); } @@ -121,7 +124,8 @@ void ToneCurve::read (const ProcParams* pp, const ParamsEdited* pedited) { shcompr->setValue (pp->toneCurve.shcompr); brightness->setValue (pp->toneCurve.brightness); contrast->setValue (pp->toneCurve.contrast); - shape->setCurve (pp->toneCurve.curve); + saturation->setValue (pp->toneCurve.saturation); + shape->setCurve (pp->toneCurve.curve); enableListener (); } @@ -136,6 +140,7 @@ void ToneCurve::write (ProcParams* pp, ParamsEdited* pedited) { pp->toneCurve.shcompr = (int)shcompr->getValue (); pp->toneCurve.brightness = (int)brightness->getValue (); pp->toneCurve.contrast = (int)contrast->getValue (); + pp->toneCurve.saturation = (int)saturation->getValue (); pp->toneCurve.curve = shape->getCurve (); if (pedited) { @@ -145,7 +150,8 @@ void ToneCurve::write (ProcParams* pp, ParamsEdited* pedited) { pedited->toneCurve.shcompr = shcompr->getEditedState (); pedited->toneCurve.brightness = brightness->getEditedState (); pedited->toneCurve.contrast = contrast->getEditedState (); - pedited->toneCurve.autoexp = !autolevels->get_inconsistent(); + pedited->toneCurve.saturation = saturation->getEditedState (); + pedited->toneCurve.autoexp = !autolevels->get_inconsistent(); pedited->toneCurve.clip = clipDirty; pedited->toneCurve.curve = !shape->isUnChanged (); } @@ -159,6 +165,7 @@ void ToneCurve::setDefaults (const ProcParams* defParams, const ParamsEdited* pe hlcompr->setDefault (defParams->toneCurve.hlcompr); shcompr->setDefault (defParams->toneCurve.shcompr); contrast->setDefault (defParams->toneCurve.contrast); + saturation->setDefault (defParams->toneCurve.saturation); if (pedited) { expcomp->setDefaultEditedState (pedited->toneCurve.expcomp ? Edited : UnEdited); @@ -167,6 +174,7 @@ void ToneCurve::setDefaults (const ProcParams* defParams, const ParamsEdited* pe shcompr->setDefaultEditedState (pedited->toneCurve.shcompr ? Edited : UnEdited); brightness->setDefaultEditedState (pedited->toneCurve.brightness ? Edited : UnEdited); contrast->setDefaultEditedState (pedited->toneCurve.contrast ? Edited : UnEdited); + saturation->setDefaultEditedState (pedited->toneCurve.saturation ? Edited : UnEdited); } else { expcomp->setDefaultEditedState (Irrelevant); @@ -175,6 +183,7 @@ void ToneCurve::setDefaults (const ProcParams* defParams, const ParamsEdited* pe shcompr->setDefaultEditedState (Irrelevant); brightness->setDefaultEditedState (Irrelevant); contrast->setDefaultEditedState (Irrelevant); + saturation->setDefaultEditedState (Irrelevant); } } @@ -209,6 +218,8 @@ void ToneCurve::adjusterChanged (Adjuster* a, double newval) { listener->panelChanged (EvBlack, costr); else if (a==contrast) listener->panelChanged (EvContrast, costr); + else if (a==saturation) + listener->panelChanged (EvSaturation, costr); else if (a==hlcompr) listener->panelChanged (EvHLCompr, costr); else if (a==shcompr) @@ -272,6 +283,7 @@ void ToneCurve::waitForAutoExp () { hlcompr->setEnabled (false); shcompr->setEnabled (false); contrast->setEnabled (false); + saturation->setEnabled (false); curveEditorG->set_sensitive (false); } @@ -301,6 +313,7 @@ void ToneCurve::enableAll () { hlcompr->setEnabled (true); shcompr->setEnabled (true); contrast->setEnabled (true); + saturation->setEnabled (true); curveEditorG->set_sensitive (true); } @@ -329,11 +342,12 @@ void ToneCurve::setBatchMode (bool batchMode) { shcompr->showEditedCB (); brightness->showEditedCB (); contrast->showEditedCB (); - + saturation->showEditedCB (); + curveEditorG->setBatchMode (batchMode); } -void ToneCurve::setAdjusterBehavior (bool expadd, bool bradd, bool blackadd, bool contradd) { +void ToneCurve::setAdjusterBehavior (bool expadd, bool bradd, bool blackadd, bool contradd, bool satadd) { if ((!expAdd && expadd) || (expAdd && !expadd)) expcomp->setLimits (-5, 5, 0.01, 0); @@ -345,11 +359,14 @@ void ToneCurve::setAdjusterBehavior (bool expadd, bool bradd, bool blackadd, boo brightness->setLimits (-100, 100, 1, 0); if ((!contrAdd && contradd) || (contrAdd && !contradd)) contrast->setLimits (-100, 100, 1, 0); - + if ((!satAdd && satadd) || (satAdd && !satadd)) + saturation->setLimits (-100, 100, 1, 0); + expAdd = expadd; blackAdd = blackadd; brAdd = bradd; contrAdd = contradd; + satAdd = satadd; } void ToneCurve::updateCurveBackgroundHistogram (unsigned* hist) { diff --git a/rtgui/tonecurve.h b/rtgui/tonecurve.h index 6af309cc1..0f3ed8eff 100644 --- a/rtgui/tonecurve.h +++ b/rtgui/tonecurve.h @@ -38,7 +38,9 @@ class ToneCurve : public Gtk::VBox, public AdjusterListener, public ToolPanel, p Adjuster* hlcompr; Adjuster* shcompr; Adjuster* contrast; - bool expAdd, blackAdd, brAdd, contrAdd, clipDirty, lastAuto; + Adjuster* saturation; + + bool expAdd, blackAdd, brAdd, contrAdd, satAdd, clipDirty, lastAuto; sigc::connection autoconn; CurveEditorGroup* curveEditorG; CurveEditor* shape; @@ -53,7 +55,7 @@ class ToneCurve : public Gtk::VBox, public AdjusterListener, public ToolPanel, p void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited=NULL); void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL); void setBatchMode (bool batchMode); - void setAdjusterBehavior (bool expadd, bool bradd, bool blackadd, bool contradd); + void setAdjusterBehavior (bool expadd, bool bradd, bool blackadd, bool contradd, bool satadd); void adjusterChanged (Adjuster* a, double newval); void autolevels_toggled (); diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index 9a8a200af..18d8d987b 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -37,6 +37,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) { lumadenoise = Gtk::manage (new LumaDenoise ()); colordenoise = Gtk::manage (new ColorDenoise ()); impulsedenoise = Gtk::manage (new ImpulseDenoise ()); + defringe = Gtk::manage (new Defringe ()); dirpyrdenoise = Gtk::manage (new DirPyrDenoise ()); sharpening = Gtk::manage (new Sharpening ()); lcurve = Gtk::manage (new LCurve ()); @@ -58,6 +59,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) { iptcpanel = Gtk::manage (new IPTCPanel ()); equalizer = Gtk::manage (new Equalizer ()); dirpyrequalizer = Gtk::manage (new DirPyrEqualizer ()); + hsvequalizer = Gtk::manage (new HSVEqualizer ()); rawprocess = Gtk::manage (new RawProcess ()); preprocess = Gtk::manage (new PreProcess ()); @@ -69,11 +71,13 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) { addPanel (detailsPanel, sharpening, M("TP_SHARPENING_LABEL")); toolPanels.push_back (sharpening); addPanel (colorPanel, colorboost, M("TP_COLORBOOST_LABEL")); toolPanels.push_back (colorboost); addPanel (colorPanel, colorshift, M("TP_COLORSHIFT_LABEL")); toolPanels.push_back (colorshift); - addPanel (exposurePanel, lcurve, M("TP_LABCURVE_LABEL")); toolPanels.push_back (lcurve); + addPanel (colorPanel, hsvequalizer, M("TP_HSVEQUALIZER_LABEL")); toolPanels.push_back (hsvequalizer); + addPanel (exposurePanel, lcurve, M("TP_LABCURVE_LABEL")); toolPanels.push_back (lcurve); addPanel (detailsPanel, impulsedenoise, M("TP_IMPULSEDENOISE_LABEL")); toolPanels.push_back (impulsedenoise); addPanel (detailsPanel, lumadenoise, M("TP_LUMADENOISE_LABEL")); toolPanels.push_back (lumadenoise); addPanel (detailsPanel, colordenoise, M("TP_COLORDENOISE_LABEL")); toolPanels.push_back (colordenoise); addPanel (detailsPanel, dirpyrdenoise, M("TP_DIRPYRDENOISE_LABEL")); toolPanels.push_back (dirpyrdenoise); + addPanel (detailsPanel, defringe, M("TP_DEFRINGE_LABEL")); toolPanels.push_back (defringe); addPanel (detailsPanel, dirpyrequalizer, M("TP_DIRPYREQUALIZER_LABEL")); toolPanels.push_back (dirpyrequalizer); addPanel (detailsPanel, equalizer, M("TP_EQUALIZER_LABEL")); toolPanels.push_back (equalizer); addPanel (transformPanel, crop, M("TP_CROP_LABEL")); toolPanels.push_back (crop); diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index e17c1940d..5fd2d1b53 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +56,7 @@ #include #include #include +#include #include #include @@ -89,12 +91,14 @@ class ToolPanelCoordinator : public ToolPanelListener, ShadowsHighlights* shadowshighlights; LumaDenoise* lumadenoise; ColorDenoise* colordenoise; + Defringe* defringe; ImpulseDenoise* impulsedenoise; DirPyrDenoise* dirpyrdenoise; Sharpening* sharpening; LCurve* lcurve; Equalizer * equalizer; DirPyrEqualizer * dirpyrequalizer; + HSVEqualizer * hsvequalizer; RawProcess* rawprocess; PreProcess* preprocess; diff --git a/rtstart b/rtstart index 5de7f84bc..6b9850004 100755 --- a/rtstart +++ b/rtstart @@ -1,4 +1,4 @@ #!/bin/bash RT_BINDIR=`dirname "$0"` export LD_LIBRARY_PATH=${RT_BINDIR} -cd "${RT_BINDIR}" && ./rt +cd "${RT_BINDIR}" && ./rt "$@" diff --git a/tools/RTProfileBuilderSample.cs b/tools/RTProfileBuilderSample.cs new file mode 100644 index 000000000..0573df459 --- /dev/null +++ b/tools/RTProfileBuilderSample.cs @@ -0,0 +1,275 @@ +#region Usings +using System; +using System.Text; +using System.IO; +using System.Globalization; +using System.Diagnostics; +using System.Configuration; +using System.Collections; +using System.Collections.Specialized; +#endregion + +// *** Raw Therapee sample Custom Profile builder (version 2010-11-15) *** +// WARNING: PP3 format may change in the future versions! If this happens there will probably be no automatic migration path, you'll have to adjust on your own. +// This is a sample, and therefore not supported by the RT team (just by oduis) +// +// How to use: +// 1. Modify the GetCorrectedSettings function below according to your needs. +// 2. Download and install Microsoft .Net Runtime (latest version is 4.0 as of writing), if it's not already on your machine. +// You can get it for free via Windows Update or from microsoft.com. No need for Visual Studio etc. +// 3. Open a command line and compile this CS-File using the C# 32bit compiler. It is usually installed somewhere here: +// C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe +// Call csc.exe (C#-Compiler) with your .CS file as parameter like this (one big line): +// +// C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc +// /r:C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.dll +// /r:C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Configuration.dll +// RTProfileBuilderSample.cs +// +// (On most machines it already works with "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc RTProfileBuilderSample.cs") +// CSC will compile it and emit an EXE. +// 4. Open your RT options files and find the entry [Profiles]/CustomProfileBuilder +// 5. Enter the path to your newly built exe here. On Windows, don't forget double slashes (e.g. "C:\\MyDir\\Mybuilder.exe") +// And you're done! The EXE is only called on opening the image editor and there is no PP3 already +// +// If you want to use EXIFTOOL to gather more details information to build queries: +// 1. Download exiftool.exe from http://www.sno.phy.queensu.ca/~phil/exiftool/ +// 2. Rename it to exiftool.exe (NOT exiftool(-k).. or something!) +// 3. Copy the RTProfilerBuilder.exe.config next to your own EXE. If you renamed it, rename config to "(Yourname).exe.config" +// 4. Open the config with notepad (it's an XML file). Set ExifToolPath to your downloaded and renamed exe +// +// If you want to know what parameters are available, call "exiftool.exe -tab -short" +// +// This description is for Windows. The C# code does not use anything fancy, will probably work with MONO on Linux/OSX, too + +namespace RTProfilerBuilder { + /// Main class. Mostly change GetCorrectedSettings. + class RTProfileBuilder { + + /// Adds the Nikkor zoom distortion correction profile. + /// First array is list of focal lengths, second array is the RT setting that should correct the + /// distortion for the corresponding focal length. Values between these values are automatically interpolated. + /// The focal length values must already be ordered. The number of sample points is not limited. + static DistortionCorrectProf distNikkor24120f4 = new DistortionCorrectProf( + new double[] { 24, 28, 35, 50, 70, 85, 120 }, + new double[] { -0.1, -0.063, -0.012, 0.018, 0.034, 0.04, 0.048 } + ); + + + /// This is your personalisation function + /// Full EXIF from EXIFTOOL (if configured). + /// Entry, like "Sharpening/Radius" + /// Current value (from default file) + /// FNumberExposure in seconds + /// Focal length in MMISO value + /// Lens from EXIFCamera from EXIF + /// The value to be written. Simply take the current value if you have nothing to touch. + static string GetCorrectedSetting(NameValueCollection exif, string sectionEntry, string value, + double fNumber, double exposureSecs, double focalLength, long iso, string lens, string camera) { + + string s; + + // We don't do anything to the value if it's not our camera + if (camera.EndsWith("NIKON D700", StringComparison.InvariantCultureIgnoreCase) && lens.Contains("24.0-120.0 mm f/4.0")) { + switch (sectionEntry) { + // Here is the place to adjust your settings + // Pretty simple: "SectionName/EntryName" in options file + + case "Vignetting Correction/Amount": + value = (fNumber < 8 && focalLength < 30) ? "30" : "0"; + break; + + case "RAW/CA": + value = ToBool(fNumber < 11); // Means "Enabled if fnumber<11, otherwise disabled" + break; + + case "Impulse Denoising/Enabled": + value = ToBool(iso >= 3200); + break; + + case "HLRecovery/Enabled": + value = ToBool(iso >= 1600); // Dynamic range decreases, so we'll probably need it + break; + + case "Color Boost/Amount": + if (iso >= 6400) value = "0"; // Colors will get poppy anyway... + break; + + case "Distortion/Amount": + // we already checked in the IF upstairs that this is "our" lens + value = distNikkor24120f4.GetDistortionAmount(focalLength); + break; + + // Add other parameters here. Mention this is case sensitive! + + default: break; // we don't touch values we don't care about + } + } // end if camera=xxx + + + // This is for camera independend settings + switch (sectionEntry) { + // These are parsed from EXIFTOOL and XMP in DNG (see http://en.wikipedia.org/wiki/Extensible_Metadata_Platform) + case "IPTC/City": + s = exif.Get("City"); + if (!String.IsNullOrEmpty(s)) value = s; + break; + + case "IPTC/Country": + s = exif.Get("Country"); + if (!String.IsNullOrEmpty(s)) value = s; + break; + + case "IPTC/Caption": + case "IPTC/Title": + s = exif.Get("Headline"); + if (!String.IsNullOrEmpty(s)) value = s; + break; + + // Add other parameters here. Mention this is case sensitive! + + default: break; // we don't touch values we don't care about + } + return value; + } + + #region * Main and Helpers + static string ToBool(bool condition) { return condition ? "true" : "false"; } + static string ToFloat(float f) { return f.ToString(CultureInfo.InvariantCulture); } + + /// Reads default file and parses it. No need to touch it for your personal settings. + /// Command line args + /// 0 on all OK. + static int Main(string[] args) { + int exitCode = 0; + + try { + #region Parse input parameters + int argNo = 0; + + // Name of RAW/JPG to process + string sourceFile = args[argNo++]; + + // What the user selected as his base profile + string defaultProfileFilePath = args[argNo++]; + + // Note that old C++ has no automatic number globalization + double fNumber = double.Parse(args[argNo++], CultureInfo.InvariantCulture); + double exposureSecs = double.Parse(args[argNo++], CultureInfo.InvariantCulture); + double focalLength = double.Parse(args[argNo++], CultureInfo.InvariantCulture); + long iso = long.Parse(args[argNo++], CultureInfo.InvariantCulture); + + string lens = args[argNo++]; + string camera = args[argNo++]; + #endregion + + // Read default file as basis + string[] lines = File.ReadAllLines(defaultProfileFilePath); + + NameValueCollection nvEXIF = ParseFullExifData(sourceFile); + + // File should be Windows ANSI + using (TextWriter tw = new StreamWriter(sourceFile + ".pp3", false, Encoding.Default)) { + string section = ""; + + foreach (string line in lines) { + string l = line.Trim(); + if (!String.IsNullOrEmpty(line)) { + + if (l.StartsWith("[")) + section = l.Trim(new char[] { '[', ']' }); + else if (char.IsLetterOrDigit(l[0]) && l.Contains("=")) { + int valPos = l.IndexOf("=") + 1; + + string newValue = GetCorrectedSetting(nvEXIF, section + "/" + l.Substring(0, valPos - 1), l.Substring(valPos).Trim(), + fNumber, exposureSecs, focalLength, iso, lens, camera); + + // Merge in new value + l = l.Substring(0, valPos) + (newValue ?? ""); + } + } + + tw.WriteLine(l); + } + } + + } catch (Exception ex) { + Console.WriteLine("Error: " + ex.ToString()); // can be seen in the RT console window + + exitCode = 1; + } + + return exitCode; + } + + + static NameValueCollection ParseFullExifData(string filePath) { + NameValueCollection nv = new NameValueCollection(); + + string exifToolPath = ConfigurationManager.AppSettings["ExifToolPath"]; + if (!String.IsNullOrEmpty(exifToolPath)) { + ProcessStartInfo psi = new ProcessStartInfo(exifToolPath, "\"" + filePath + "\" -tab -short"); + psi.CreateNoWindow = false; + psi.UseShellExecute = false; + psi.RedirectStandardOutput = true; + + Process p = Process.Start(psi); + + using (StreamReader sr = p.StandardOutput) { + while (!sr.EndOfStream) { + string line = sr.ReadLine(); + if (line.Contains("\t")) { + string[] split = line.Split('\t'); + nv.Add(split[0], split[1]); + } + } + } + + p.WaitForExit(); + } + + return nv; + } + + #endregion + } + + #region DistortionCorrectProf + /// Holds a distortion correction profile for one lens. Uses sample points (focal length vs. dist. correction) as input. + class DistortionCorrectProf { + double[] adFocLen, adCorrect; + + /// Parses array to internal structure + /// Focal lengths + /// Correction factors + public DistortionCorrectProf(double[] focLen, double[] correct) { + if (focLen == null || correct == null || focLen.Length != correct.Length || focLen.Length < 2) + throw new Exception("DistortionCorrectProf inputs must be valid and of the same lenghts, at least 2 points"); + + adFocLen = focLen; adCorrect = correct; + + for (int i = 0; i < adFocLen.Length - 1; i++) + if (adFocLen[i] >= adFocLen[i + 1]) throw new Exception("The distortion correction focal length points must be ordered!"); + } + + /// Calculates regession value of RT distortion amount for the given focal length. + /// Input focal length. + /// Distortion in RT format. + public string GetDistortionAmount(double focalLength) { + // if it's out of area (which should just happing with e.g. rounding errors), return flat defaults. + if (focalLength <= adFocLen[0]) return adCorrect[0].ToString("G", CultureInfo.InvariantCulture); + if (focalLength >= adFocLen[adFocLen.Length - 1]) return adCorrect[adFocLen.Length - 1].ToString("G", CultureInfo.InvariantCulture); + + for (int i = 0; i < adFocLen.Length - 1; i++) { + if (focalLength >= adFocLen[i] && focalLength < adFocLen[i + 1]) { + // from the sample curves taken so far, it it safe to take a simple linear interpolation here + double corr = adCorrect[i] + (adCorrect[i + 1] - adCorrect[i]) * (focalLength - adFocLen[i]) / (adFocLen[i + 1] - adFocLen[i]); + return corr.ToString("G3", CultureInfo.InvariantCulture); + } + } + + return ""; // should never happen + } + } + #endregion +} diff --git a/tools/RTProfileBuilderSample.exe.config b/tools/RTProfileBuilderSample.exe.config new file mode 100644 index 000000000..2dbb6b973 --- /dev/null +++ b/tools/RTProfileBuilderSample.exe.config @@ -0,0 +1,8 @@ + + + + + + +