diff --git a/rtdata/dcpprofiles/Canon EOS 1300D.dcp b/rtdata/dcpprofiles/Canon EOS 1300D.dcp index e6fa7ac41..52e961776 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 1300D.dcp and b/rtdata/dcpprofiles/Canon EOS 1300D.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 20D.dcp b/rtdata/dcpprofiles/Canon EOS 20D.dcp index 1ce4c5d0b..578517437 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 20D.dcp and b/rtdata/dcpprofiles/Canon EOS 20D.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 40D.dcp b/rtdata/dcpprofiles/Canon EOS 40D.dcp index a6117dfa5..288ce384b 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 40D.dcp and b/rtdata/dcpprofiles/Canon EOS 40D.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 50D.dcp b/rtdata/dcpprofiles/Canon EOS 50D.dcp index a99da9e61..5e80fe47b 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 50D.dcp and b/rtdata/dcpprofiles/Canon EOS 50D.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 600D.dcp b/rtdata/dcpprofiles/Canon EOS 600D.dcp index bd8bae0a7..711064951 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 600D.dcp and b/rtdata/dcpprofiles/Canon EOS 600D.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 60D.dcp b/rtdata/dcpprofiles/Canon EOS 60D.dcp index 24e7e04b6..ad14659ff 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 60D.dcp and b/rtdata/dcpprofiles/Canon EOS 60D.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 6D Mark II.dcp b/rtdata/dcpprofiles/Canon EOS 6D Mark II.dcp index 69a131bd3..18ddfeb95 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 6D Mark II.dcp and b/rtdata/dcpprofiles/Canon EOS 6D Mark II.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 6D.dcp b/rtdata/dcpprofiles/Canon EOS 6D.dcp index 01cf29e93..de1f74f22 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 6D.dcp and b/rtdata/dcpprofiles/Canon EOS 6D.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 7D Mark II.dcp b/rtdata/dcpprofiles/Canon EOS 7D Mark II.dcp index 1c153e82a..84b5838da 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 7D Mark II.dcp and b/rtdata/dcpprofiles/Canon EOS 7D Mark II.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS 7D.dcp b/rtdata/dcpprofiles/Canon EOS 7D.dcp index dd31e64f5..1f20c02d5 100644 Binary files a/rtdata/dcpprofiles/Canon EOS 7D.dcp and b/rtdata/dcpprofiles/Canon EOS 7D.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS Rebel T3i.dcp b/rtdata/dcpprofiles/Canon EOS Rebel T3i.dcp deleted file mode 100644 index bd8bae0a7..000000000 Binary files a/rtdata/dcpprofiles/Canon EOS Rebel T3i.dcp and /dev/null differ diff --git a/rtdata/dcpprofiles/Canon PowerShot G7 X.dcp b/rtdata/dcpprofiles/Canon PowerShot G7 X.dcp index bcfdfcdf4..7c49f34fe 100644 Binary files a/rtdata/dcpprofiles/Canon PowerShot G7 X.dcp and b/rtdata/dcpprofiles/Canon PowerShot G7 X.dcp differ diff --git a/rtdata/dcpprofiles/Canon PowerShot S110.dcp b/rtdata/dcpprofiles/Canon PowerShot S110.dcp index 9a372a36f..edd27115a 100644 Binary files a/rtdata/dcpprofiles/Canon PowerShot S110.dcp and b/rtdata/dcpprofiles/Canon PowerShot S110.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM FinePix F600EXR.dcp b/rtdata/dcpprofiles/FUJIFILM FinePix F600EXR.dcp index 7b1dd6c28..fab567029 100644 Binary files a/rtdata/dcpprofiles/FUJIFILM FinePix F600EXR.dcp and b/rtdata/dcpprofiles/FUJIFILM FinePix F600EXR.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM X-Pro2.dcp b/rtdata/dcpprofiles/FUJIFILM X-Pro2.dcp index 1172b17bb..57dd04e62 100644 Binary files a/rtdata/dcpprofiles/FUJIFILM X-Pro2.dcp and b/rtdata/dcpprofiles/FUJIFILM X-Pro2.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM X-T1.dcp b/rtdata/dcpprofiles/FUJIFILM X-T1.dcp index fb9ecff4d..fbe9da058 100644 Binary files a/rtdata/dcpprofiles/FUJIFILM X-T1.dcp and b/rtdata/dcpprofiles/FUJIFILM X-T1.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM X-T20.dcp b/rtdata/dcpprofiles/FUJIFILM X-T20.dcp index 1c631fd2a..3442f4f04 100644 Binary files a/rtdata/dcpprofiles/FUJIFILM X-T20.dcp and b/rtdata/dcpprofiles/FUJIFILM X-T20.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM X100S.dcp b/rtdata/dcpprofiles/FUJIFILM X100S.dcp index 962d58469..bdeeaf7a7 100644 Binary files a/rtdata/dcpprofiles/FUJIFILM X100S.dcp and b/rtdata/dcpprofiles/FUJIFILM X100S.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM X100T.dcp b/rtdata/dcpprofiles/FUJIFILM X100T.dcp index b2823ccce..129ad0d55 100644 Binary files a/rtdata/dcpprofiles/FUJIFILM X100T.dcp and b/rtdata/dcpprofiles/FUJIFILM X100T.dcp differ diff --git a/rtdata/dcpprofiles/LG Mobile LG-H815.dcp b/rtdata/dcpprofiles/LG Mobile LG-H815.dcp index d8a4539db..bb616ba2d 100644 Binary files a/rtdata/dcpprofiles/LG Mobile LG-H815.dcp and b/rtdata/dcpprofiles/LG Mobile LG-H815.dcp differ diff --git a/rtdata/dcpprofiles/MINOLTA DYNAX 7D.dcp b/rtdata/dcpprofiles/MINOLTA DYNAX 7D.dcp index 807e4e05f..67a023f57 100644 Binary files a/rtdata/dcpprofiles/MINOLTA DYNAX 7D.dcp and b/rtdata/dcpprofiles/MINOLTA DYNAX 7D.dcp differ diff --git a/rtdata/dcpprofiles/NIKON D300.dcp b/rtdata/dcpprofiles/NIKON D300.dcp index 008383c59..f0d707849 100644 Binary files a/rtdata/dcpprofiles/NIKON D300.dcp and b/rtdata/dcpprofiles/NIKON D300.dcp differ diff --git a/rtdata/dcpprofiles/NIKON D5600.dcp b/rtdata/dcpprofiles/NIKON D5600.dcp index 00367d43d..57d635224 100644 Binary files a/rtdata/dcpprofiles/NIKON D5600.dcp and b/rtdata/dcpprofiles/NIKON D5600.dcp differ diff --git a/rtdata/dcpprofiles/NIKON D600.dcp b/rtdata/dcpprofiles/NIKON D600.dcp index 039989c2c..74f8a9541 100644 Binary files a/rtdata/dcpprofiles/NIKON D600.dcp and b/rtdata/dcpprofiles/NIKON D600.dcp differ diff --git a/rtdata/dcpprofiles/Canon EOS Kiss X5.dcp b/rtdata/dcpprofiles/SONY ILCE-7M3.dcp similarity index 91% rename from rtdata/dcpprofiles/Canon EOS Kiss X5.dcp rename to rtdata/dcpprofiles/SONY ILCE-7M3.dcp index bd8bae0a7..9cf6783ea 100644 Binary files a/rtdata/dcpprofiles/Canon EOS Kiss X5.dcp and b/rtdata/dcpprofiles/SONY ILCE-7M3.dcp differ diff --git a/rtdata/dcpprofiles/camera_model_aliases.txt b/rtdata/dcpprofiles/camera_model_aliases.txt new file mode 100644 index 000000000..4dea42628 --- /dev/null +++ b/rtdata/dcpprofiles/camera_model_aliases.txt @@ -0,0 +1,3 @@ +Canon EOS 600D;Canon EOS Kiss X5;Canon EOS Rebel T3i +Canon EOS 1300D;Canon EOS Kiss X80;Canon EOS Rebel T6 +MINOLTA DYNAX 7D;MINOLTA MAXXUM 7D;MINOLTA ALPHA 7D;MINOLTA ALPHA SWEET diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index b464677d0..05f6ff7ce 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1127,8 +1127,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -1317,8 +1317,9 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1516,6 +1517,10 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1689,7 +1694,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1795,7 +1800,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EPD_GAMMA;Gamma !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_LUMINANCE;Luminance !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index 2c80e86b3..6036d27f0 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -1237,8 +1237,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -1427,8 +1427,9 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1507,6 +1508,10 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !PREFERENCES_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles !PROFILEPANEL_LOADPPASTE;Parameters to load @@ -1638,7 +1643,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1742,8 +1747,9 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_EPD_REWEIGHTINGITERATES;Reweighting iterates !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_LUMINANCE;Luminance !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index 0ee9312dd..05b5de718 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -632,7 +632,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -789,8 +789,8 @@ TP_WBALANCE_TEMPERATURE;色溫 !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -979,8 +979,9 @@ TP_WBALANCE_TEMPERATURE;色溫 !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1290,6 +1291,10 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1490,7 +1495,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1622,12 +1627,13 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 1b84d41a8..dff255aa1 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -2248,8 +2248,14 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction !TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both !TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index f733bac21..f75068fad 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -628,7 +628,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -785,8 +785,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -975,8 +975,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1288,6 +1289,10 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1488,7 +1493,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1620,12 +1625,13 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index d716c2e33..e94135b36 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -53,6 +53,7 @@ #52 10.02.2018 Korrektur (TooWaBoo) RT 5.3 #53 26.02.2018 Erweiterung (TooWaBoo) RT 5.3 #54 30.03.2018 Erweiterung (TooWaBoo) RT 5.4 +#55 06.04.2018 Erweiterung (TooWaBoo) RT 5.4 ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Danksagungen @@ -783,6 +784,8 @@ HISTORY_MSG_LOCALCONTRAST_ENABLED;(Lokaler Kontrast) HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;(Lokaler Kontrast)\nHelle Bereiche HISTORY_MSG_LOCALCONTRAST_RADIUS;(Lokaler Kontrast)\nRadius HISTORY_MSG_METADATA_MODE;(Metadaten)\nKopiermodus +HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;(Sensor-Matrix)\nVorverarbeitung\nRichtung +HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;(Sensor-Matrix)\nVorverarbeitung\nPDAF-Zeilenfilter HISTORY_MSG_TM_FATTAL_ANCHOR;(HDR-Dynamikkompression)\nHelligkeitsverschiebung HISTORY_NEWSNAPSHOT;Hinzufügen HISTORY_NEWSNAPSHOT_TOOLTIP;Taste: Alt + s @@ -1210,6 +1213,10 @@ PREFERENCES_TAB_IMPROC;Bildbearbeitung PREFERENCES_TAB_PERFORMANCE;Performance & Qualität PREFERENCES_TAB_SOUND;Klänge PREFERENCES_THEME;Oberflächendesign +PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Eingebundenes JPEG +PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Bildanzeige +PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrales RAW-Bild +PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Eingebundenes JPEG wenn in Originalgröße, sonst neutrales RAW-Bild PREFERENCES_TIMAX;Hoch PREFERENCES_TINB;Anzahl Kacheln PREFERENCES_TISTD;Standard @@ -1781,7 +1788,14 @@ TP_PREPROCESS_HOTPIXFILT;Hot-Pixel-Filter TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Entfernt Hot-Pixel TP_PREPROCESS_LABEL;Vorverarbeitung TP_PREPROCESS_LINEDENOISE;Zeilenrauschfilter +TP_PREPROCESS_LINEDENOISE_DIRECTION;Richtung +TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Beide +TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal +TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal (nur PDAF-Zeilen) +TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertikal TP_PREPROCESS_NO_FOUND;Nichts gefunden +TP_PREPROCESS_PDAFLINESFILTER;PDAF-Zeilenfilter +TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Minimiert Streifenrauschen, das bei Gegenlichtaufnahmen mit\nsichtbaren Flares einiger spiegellosen Sony-Kameras entsteht. TP_PRSHARPENING_LABEL;Nach Skalierung schärfen TP_PRSHARPENING_TOOLTIP;Schärft das Bild nach der Größenänderung.\nFunktioniert nur mit der Methode “Lanczos“.\nDas Ergebnis wird nicht in RawTherapee\nangezeigt.\n\nWeitere Informationen finden Sie auf “RawPedia“. TP_RAWCACORR_AUTO;Automatische Korrektur @@ -2266,16 +2280,5 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;(Sensor-Matrix)\nVorverarbeitung\nRichtung -HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;(Sensor-Matrix)\nVorverarbeitung\nPDAF-Zeilenfilter -TP_PREPROCESS_LINEDENOISE_DIRECTION;Richtung -TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Beide -TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal -TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal (nur PDAF-Zeilen) -TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertikal -TP_PREPROCESS_PDAFLINESFILTER;PDAF-Zeilenfilter -TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Minimiert Streifenrauschen, das bei Gegenlichtaufnahmen mit\nsichtbaren Flares einiger spiegellosen Sony-Kameras entsteht. -PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Eingebundenes JPEG -PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Bildanzeige -PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrales RAW-Bild -PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Eingebundenes JPEG wenn in Originalgröße, sonst neutrales RAW-Bild +HISTORY_MSG_CLAMPOOG;(Belichtung) - Farben\nauf den Farbraum\nbeschränken +TP_EXPOSURE_CLAMPOOG;Farben auf den Farbraum beschränken diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index b9d786e7d..406b68d23 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -475,7 +475,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -622,8 +622,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -809,7 +809,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1221,6 +1222,10 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1444,7 +1449,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1575,6 +1580,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. !TP_EXPOSURE_BLACKLEVEL;Black !TP_EXPOSURE_BRIGHTNESS;Lightness +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP;Clip % !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTS;Highlight compression @@ -1585,7 +1591,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. !TP_EXPOSURE_EXPCOMP;Exposure compensation -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_LABEL;Exposure !TP_EXPOSURE_SATURATION;Saturation diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index c5fce733d..81b8daeda 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -377,7 +377,7 @@ !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -534,8 +534,8 @@ !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -724,8 +724,9 @@ !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1158,6 +1159,10 @@ !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1401,7 +1406,7 @@ !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1549,6 +1554,7 @@ !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. !TP_EXPOSURE_BLACKLEVEL;Black !TP_EXPOSURE_BRIGHTNESS;Lightness +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP;Clip % !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTS;Highlight compression @@ -1559,7 +1565,7 @@ !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. !TP_EXPOSURE_EXPCOMP;Exposure compensation -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_LABEL;Exposure !TP_EXPOSURE_SATURATION;Saturation diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index 5be582205..43bd75664 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -1708,8 +1708,9 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1855,6 +1856,10 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1887,7 +1892,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_LABGRID;L*a*b* color correction grid !TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 !TP_CROP_GTHARMMEANS;Harmonic Means @@ -1928,7 +1933,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EPD_GAMMA;Gamma -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_LUMINANCE;Luminance !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index bd2e1079d..d54f9f3fa 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -628,7 +628,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -785,8 +785,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -975,8 +975,9 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1288,6 +1289,10 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1488,7 +1493,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1620,12 +1625,13 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 45a29a40f..ba2101d3b 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -2213,8 +2213,14 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction !TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both !TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 59acc55aa..fe52a71e3 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -627,7 +627,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -784,8 +784,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -974,8 +974,9 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1287,6 +1288,10 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1487,7 +1492,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1619,12 +1624,13 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index b14c49281..be1ee27d2 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -628,7 +628,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -785,8 +785,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -975,8 +975,9 @@ TP_WBALANCE_TEMPERATURE;מידת חום !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1288,6 +1289,10 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1488,7 +1493,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1620,12 +1625,13 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index 8a57cdea1..19f396eb0 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -1393,8 +1393,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -1583,8 +1583,9 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1727,6 +1728,10 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1759,7 +1764,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1848,7 +1853,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EPD_GAMMA;Gamma -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_LUMINANCE;Luminance !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 5dbe1ad54..698085d57 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -1954,8 +1954,9 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -2041,6 +2042,10 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames @@ -2066,7 +2071,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_LABGRID;L*a*b* color correction grid !TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 !TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -2080,7 +2085,8 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - !TP_DIRPYRDENOISE_TYPE_7X7;7×7 !TP_DIRPYRDENOISE_TYPE_9X9;9×9 !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? !TP_ICM_BPC;Black Point Compensation diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index 9e08cfb9d..2305dc418 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -628,7 +628,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -785,8 +785,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -975,8 +975,9 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1288,6 +1289,10 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1488,7 +1493,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1620,12 +1625,13 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index e871044ce..7c06ddacc 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -1058,8 +1058,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -1248,8 +1248,9 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1453,6 +1454,10 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1640,7 +1645,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1748,10 +1753,11 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EPD_GAMMA;Gamma !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like !TP_EXPOSURE_TCMODE_LABEL1;Curve mode 1 diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 3a90ece7c..873fd9f62 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -2146,8 +2146,9 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -2188,6 +2189,10 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !PREFERENCES_PROFILESAVELOCATION;Processing profile saving location !PREFERENCES_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) !QINFO_PIXELSHIFT;Pixel Shift / %2 frame(s) @@ -2205,12 +2210,13 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_LABGRID;L*a*b* color correction grid !TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 !TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. !TP_DIRPYRDENOISE_LABEL;Noise Reduction -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_LOCALCONTRAST_AMOUNT;Amount !TP_LOCALCONTRAST_DARKNESS;Darkness level diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index 8164be831..84d13b386 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -627,7 +627,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -784,8 +784,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -974,8 +974,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1287,6 +1288,10 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1487,7 +1492,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1619,12 +1624,13 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index 2c54f6363..bec0d84af 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -1665,8 +1665,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1803,6 +1804,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1835,7 +1840,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_LABGRID;L*a*b* color correction grid !TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 !TP_CROP_GTHARMMEANS;Harmonic Means @@ -1876,7 +1881,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EPD_GAMMA;Gamma -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_LUMINANCE;Luminance !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index 8be5fa876..9093eb041 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -1665,8 +1665,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1803,6 +1804,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1835,7 +1840,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_LABGRID;L*a*b* color correction grid !TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 !TP_CROP_GTHARMMEANS;Harmonic Means @@ -1876,7 +1881,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EPD_GAMMA;Gamma -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_LUMINANCE;Luminance !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index c738219e7..16c70492e 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -628,7 +628,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -785,8 +785,8 @@ TP_WBALANCE_TEMPERATURE;Temperatura !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -975,8 +975,9 @@ TP_WBALANCE_TEMPERATURE;Temperatura !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1288,6 +1289,10 @@ TP_WBALANCE_TEMPERATURE;Temperatura !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1488,7 +1493,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1620,12 +1625,13 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index f02957378..75bbdbc44 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -1467,8 +1467,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -1650,6 +1650,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_485;Lens Correction !HISTORY_MSG_486;Lens Correction - Camera !HISTORY_MSG_487;Lens Correction - Lens +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter @@ -1762,6 +1763,10 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SMA;Small (250x287) !PREFERENCES_STDAUT;Standard +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1827,7 +1832,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1895,6 +1900,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_DIRPYREQUALIZER_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. !TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image. !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOS_BLACKPOINT_LABEL;Raw Black Points !TP_EXPOS_WHITEPOINT_LABEL;Raw White Points !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index 3dd63cdd7..7f9242361 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -1369,8 +1369,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -1559,8 +1559,9 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1716,6 +1717,10 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1751,7 +1756,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1848,7 +1853,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image. !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EPD_GAMMA;Gamma -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_LUMINANCE;Luminance !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index a4646cd2e..cf07e1607 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -1369,8 +1369,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -1559,8 +1559,9 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1716,6 +1717,10 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1751,7 +1756,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1848,7 +1853,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image. !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EPD_GAMMA;Gamma -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_LUMINANCE;Luminance !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 548c50de3..bc70d67f4 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -690,7 +690,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -847,8 +847,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -1037,8 +1037,9 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1331,6 +1332,10 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1527,7 +1532,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1649,12 +1654,13 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index c7621a341..b5b34d72d 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -629,7 +629,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -786,8 +786,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -976,8 +976,9 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1289,6 +1290,10 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1488,7 +1493,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1620,12 +1625,13 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index ded3d8190..784aaab44 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -1888,8 +1888,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_203;NR - Color space !HISTORY_MSG_256;NR - Median - Type !HISTORY_MSG_257;Color Toning -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_297;NR - Mode !HISTORY_MSG_310;W - Residual - Sky tar/prot !HISTORY_MSG_313;W - Chroma - Sat/past @@ -1945,8 +1945,9 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -2029,6 +2030,10 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) @@ -2048,7 +2053,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Chroma opacity as a function of luminance oC=f(L) !TP_COLORTONING_LABEL;Color Toning !TP_COLORTONING_LABGRID;L*a*b* color correction grid @@ -2070,7 +2075,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Apply a median filter of the desired window size. The larger the window's size, the longer it takes.\n\n3×3 soft: treats 5 pixels in a 3×3 pixel window.\n3×3: treats 9 pixels in a 3×3 pixel window.\n5×5 soft: treats 13 pixels in a 5×5 pixel window.\n5×5: treats 25 pixels in a 5×5 pixel window.\n7×7: treats 49 pixels in a 7×7 pixel window.\n9×9: treats 81 pixels in a 9×9 pixel window.\n\nSometimes it is possible to achieve higher quality running several iterations with a smaller window size than one iteration with a larger one. !TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;This pyramid is for the upper part, so far as the algorithm at its maximum efficiency.\nTo the lower part, the transition zones.\nIf you need to move the area significantly to the left or right - or if there are artifacts: the white balance is incorrect\nYou can slightly reduce the zone to prevent the rest of the image is affected. !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, clip control can lead to color cast. diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index 87395131d..acbb9723a 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -628,7 +628,7 @@ TP_WBALANCE_TEMPERATURE;Isı !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_129;Flat-Field - Blur type -!HISTORY_MSG_130;Auto distorion correction +!HISTORY_MSG_130;Auto distortion correction !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -785,8 +785,8 @@ TP_WBALANCE_TEMPERATURE;Isı !HISTORY_MSG_285;NR - Median - Method !HISTORY_MSG_286;NR - Median - Type !HISTORY_MSG_287;NR - Median - Iterations -!HISTORY_MSG_288;Flat Field - Clip control -!HISTORY_MSG_289;Flat Field - Clip control - Auto +!HISTORY_MSG_288;Flat-Field - Clip control +!HISTORY_MSG_289;Flat-Field - Clip control - Auto !HISTORY_MSG_290;Black Level - Red !HISTORY_MSG_291;Black Level - Green !HISTORY_MSG_292;Black Level - Blue @@ -975,8 +975,9 @@ TP_WBALANCE_TEMPERATURE;Isı !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve !HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount !HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1288,6 +1289,10 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise !PREFERENCES_TIMAX;High !PREFERENCES_TINB;Number of tiles !PREFERENCES_TISTD;Standard @@ -1487,7 +1492,7 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_COLORAPP_WBRT;WB [RT] + [output] !TP_COLORAPP_YB;Yb% (mean luminance) !TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1619,12 +1624,13 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_EPD_STRENGTH;Strength !TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours !TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. !TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold !TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 !TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 !TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_SATURATION;Saturation !TP_EXPOSURE_TCMODE_FILMLIKE;Film-like diff --git a/rtdata/languages/default b/rtdata/languages/default index a556c1ebd..38cfd5763 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -376,7 +376,7 @@ HISTORY_MSG_126;Flat-Field - File HISTORY_MSG_127;Flat-Field - Auto-selection HISTORY_MSG_128;Flat-Field - Blur radius HISTORY_MSG_129;Flat-Field - Blur type -HISTORY_MSG_130;Auto distorion correction +HISTORY_MSG_130;Auto distortion correction HISTORY_MSG_131;NR - Luma HISTORY_MSG_132;NR - Chroma HISTORY_MSG_133;Output gamma @@ -533,8 +533,8 @@ HISTORY_MSG_284;CT - Auto sat. protection HISTORY_MSG_285;NR - Median - Method HISTORY_MSG_286;NR - Median - Type HISTORY_MSG_287;NR - Median - Iterations -HISTORY_MSG_288;Flat Field - Clip control -HISTORY_MSG_289;Flat Field - Clip control - Auto +HISTORY_MSG_288;Flat-Field - Clip control +HISTORY_MSG_289;Flat-Field - Clip control - Auto HISTORY_MSG_290;Black Level - Red HISTORY_MSG_291;Black Level - Green HISTORY_MSG_292;Black Level - Blue @@ -740,6 +740,7 @@ HISTORY_MSG_491;White Balance HISTORY_MSG_492;RGB Curves HISTORY_MSG_493;L*a*b* Adjustments +HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping HISTORY_MSG_LOCLOCX;Local - Right HISTORY_MSG_LOCCENTER;Local - Center HISTORY_MSG_LOCDEGRE;Local - Deg @@ -847,7 +848,7 @@ HISTORY_MSG_LOCNOISELEQUAL;Local - deNoise Equalizer white-black HISTORY_MSG_LOCSHAPEMETH;Local - Shape Rt-spot method HISTORY_MSG_LOCSPOTDUP;Local - Spot duplicated HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -HISTORY_MSG_HISTMATCHING;Auto-matched Tone Curve +HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1099,10 +1100,6 @@ PREFERENCES_CACHECLEARTHUMBS;Clear Thumbnails PREFERENCES_CACHEMAXENTRIES;Maximum number of cache entries PREFERENCES_CACHEOPTS;Cache Options PREFERENCES_CACHETHUMBHEIGHT;Maximum thumbnail height -PREFERENCES_CIEART;CIECAM02 optimization -PREFERENCES_CIEART_FRAME;CIECAM02-Specific Settings -PREFERENCES_CIEART_LABEL;Use float precision instead of double -PREFERENCES_CIEART_TOOLTIP;If enabled, CIECAM02 calculations are performed in the single-precision floating-point format instead of the double-precision one. This provides a small increase in speed at the expense of a negligible loss of quality. PREFERENCES_CLIPPINGIND;Clipping Indication PREFERENCES_CLUTSCACHE;HaldCLUT Cache PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs @@ -1543,7 +1540,7 @@ TP_COLORAPP_WBCAM;WB [RT+CAT02] + [output] TP_COLORAPP_WBRT;WB [RT] + [output] TP_COLORAPP_YB;Yb% (mean luminance) TP_COLORAPP_YBSCENE;Yb% (mean luminance) -TP_COLORAPP_YBSCENE_TOOLTIP;if auto is enabled, Yb is calculated from the mean value of the actual image's luminance +TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance TP_COLORTONING_AB;o C/L TP_COLORTONING_AUTOSAT;Automatic TP_COLORTONING_BALANCE;Balance @@ -1691,6 +1688,7 @@ TP_EXPOSURE_AUTOLEVELS;Auto Levels TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. TP_EXPOSURE_BLACKLEVEL;Black TP_EXPOSURE_BRIGHTNESS;Lightness +TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours TP_EXPOSURE_CLIP;Clip % TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. TP_EXPOSURE_COMPRHIGHLIGHTS;Highlight compression @@ -1701,7 +1699,7 @@ TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. TP_EXPOSURE_EXPCOMP;Exposure compensation -TP_EXPOSURE_HISTMATCHING;Auto-matched Tone Curve +TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. TP_EXPOSURE_LABEL;Exposure TP_EXPOSURE_SATURATION;Saturation diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc index 1ddd17107..4c56cbb5d 100644 --- a/rtengine/EdgePreservingDecomposition.cc +++ b/rtengine/EdgePreservingDecomposition.cc @@ -125,28 +125,14 @@ float *SparseConjugateGradient(void Ax(float *Product, float *x, void *Pass), fl #pragma omp parallel #endif { - float c = 0.0f; #ifdef _OPENMP - #pragma omp for reduction(+:rs) // Summation with error correction + #pragma omp for reduction(+:rs) #endif for(int ii = 0; ii < n; ii++) { - float temp = r[ii] * s[ii]; - float t = rs + temp; - - if( fabsf(rs) >= fabsf(temp) ) { - c += ((rs - t) + temp); - } else { - c += ((temp - t) + rs); - } - - rs = t; + rs += r[ii] * s[ii]; } -#ifdef _OPENMP - #pragma omp critical -#endif - rs += c; } ab = rs / ab; diff --git a/rtengine/ciecam02.cc b/rtengine/ciecam02.cc index 560d5721a..f9475eb4e 100644 --- a/rtengine/ciecam02.cc +++ b/rtengine/ciecam02.cc @@ -38,25 +38,6 @@ namespace rtengine extern const Settings* settings; #endif -void Ciecam02::curvecolor (double satind, double satval, double &sres, double parsat) -{ - if (satind >= 0.0) { - sres = (1. - (satind) / 100.) * satval + (satind) / 100.* (1. - SQR (SQR (1. - min (satval, 1.0)))); - - if (sres > parsat) { - sres = parsat; - } - - if (sres < 0.) { - sres = 0.; - } - } else { - if (satind < -0.1) { - sres = satval * (1. + (satind) / 100.); - } - } -} - void Ciecam02::curvecolorfloat (float satind, float satval, float &sres, float parsat) { if (satind > 0.f) { @@ -76,111 +57,6 @@ void Ciecam02::curvecolorfloat (float satind, float satval, float &sres, float p } } -void Ciecam02::curveJ (double br, double contr, int db, LUTf & outCurve, LUTu & histogram ) -{ - LUTf dcurve (65536, 0); - int skip = 1; - - // check if brightness curve is needed - if (br > 0.00001 || br < -0.00001) { - - std::vector brightcurvePoints; - brightcurvePoints.resize (9); - brightcurvePoints.at (0) = double (DCT_NURBS); - - brightcurvePoints.at (1) = 0.; // black point. Value in [0 ; 1] range - brightcurvePoints.at (2) = 0.; // black point. Value in [0 ; 1] range - - if (br > 0) { - brightcurvePoints.at (3) = 0.1; // toe point - brightcurvePoints.at (4) = 0.1 + br / 150.0; //value at toe point - - brightcurvePoints.at (5) = 0.7; // shoulder point - brightcurvePoints.at (6) = min (1.0, 0.7 + br / 300.0); //value at shoulder point - } else { - brightcurvePoints.at (3) = 0.1 - br / 150.0; // toe point - brightcurvePoints.at (4) = 0.1; // value at toe point - - brightcurvePoints.at (5) = min (1.0, 0.7 - br / 300.0); // shoulder point - brightcurvePoints.at (6) = 0.7; // value at shoulder point - } - - brightcurvePoints.at (7) = 1.; // white point - brightcurvePoints.at (8) = 1.; // value at white point - - DiagonalCurve* brightcurve = new DiagonalCurve (brightcurvePoints, CURVES_MIN_POLY_POINTS / skip); - - // Applying brightness curve - for (int i = 0; i < 32768; i++) { - - // change to [0,1] range - float val = (float)i / 32767.0; - - // apply brightness curve - val = brightcurve->getVal (val); - - // store result in a temporary array - dcurve[i] = CLIPD (val); - } - - delete brightcurve; - } else { - // for (int i=0; i<32768; i++) { // L values range up to 32767, higher values are for highlight overflow - for (int i = 0; i < (32768 * db); i++) { // L values range up to 32767, higher values are for highlight overflow - - // set the identity curve in the temporary array - dcurve[i] = (float)i / (db * 32768.0f); - } - } - - - if (contr > 0.00001 || contr < -0.00001) { - - // compute mean luminance of the image with the curve applied - int sum = 0; - float avg = 0; - - //float sqavg = 0; - for (int i = 0; i < 32768; i++) { - avg += dcurve[i] * histogram[i];//approximation for average : usage of L (lab) instead of J - sum += histogram[i]; - } - - avg /= sum; - std::vector contrastcurvePoints; - contrastcurvePoints.resize (9); - contrastcurvePoints.at (0) = double (DCT_NURBS); - - contrastcurvePoints.at (1) = 0.; // black point. Value in [0 ; 1] range - contrastcurvePoints.at (2) = 0.; // black point. Value in [0 ; 1] range - - contrastcurvePoints.at (3) = avg - avg * (0.6 - contr / 250.0); // toe point - contrastcurvePoints.at (4) = avg - avg * (0.6 + contr / 250.0); // value at toe point - - contrastcurvePoints.at (5) = avg + (1 - avg) * (0.6 - contr / 250.0); // shoulder point - contrastcurvePoints.at (6) = avg + (1 - avg) * (0.6 + contr / 250.0); // value at shoulder point - - contrastcurvePoints.at (7) = 1.; // white point - contrastcurvePoints.at (8) = 1.; // value at white point - - DiagonalCurve* contrastcurve = new DiagonalCurve (contrastcurvePoints, CURVES_MIN_POLY_POINTS / skip); - - // apply contrast enhancement - for (int i = 0; i < (32768 * db); i++) { - dcurve[i] = contrastcurve->getVal (dcurve[i]); - } - - delete contrastcurve; - } - - // for (int i=0; i<32768; i++) outCurve[i] = 32768.0*dcurve[i]; - for (int i = 0; i < (db * 32768); i++) { - outCurve[i] = db * 32768.0 * dcurve[i]; - } -// printf("double out500=%f out15000=%f\n", outCurve[500], outCurve[15000]); - -} - void Ciecam02::curveJfloat (float br, float contr, const LUTu & histogram, LUTf & outCurve) { @@ -298,28 +174,11 @@ void Ciecam02::curveJfloat (float br, float contr, const LUTu & histogram, LUTf * */ -double Ciecam02::d_factor ( double f, double la ) -{ - return f * (1.0 - ((1.0 / 3.6) * exp ((-la - 42.0) / 92.0))); -} - float Ciecam02::d_factorfloat ( float f, float la ) { return f * (1.0f - ((1.0f / 3.6f) * xexpf ((-la - 42.0f) / 92.0f))); } -double Ciecam02::calculate_fl_from_la_ciecam02 ( double la ) -{ - double la5 = la * 5.0; - double k = 1.0 / (la5 + 1.0); - - /* Calculate k^4. */ - k = k * k; - k = k * k; - - return (0.2 * k * la5) + (0.1 * (1.0 - k) * (1.0 - k) * std::cbrt (la5)); -} - float Ciecam02::calculate_fl_from_la_ciecam02float ( float la ) { float la5 = la * 5.0f; @@ -332,34 +191,6 @@ float Ciecam02::calculate_fl_from_la_ciecam02float ( float la ) return (0.2f * k * la5) + (0.1f * (1.0f - k) * (1.0f - k) * std::cbrt (la5)); } -double Ciecam02::achromatic_response_to_white ( double x, double y, double z, double d, double fl, double nbb, int gamu ) -{ - double r, g, b; - double rc, gc, bc; - double rp, gp, bp; - double rpa, gpa, bpa; - gamu = 1; - xyz_to_cat02 ( r, g, b, x, y, z, gamu ); - - rc = r * (((y * d) / r) + (1.0 - d)); - gc = g * (((y * d) / g) + (1.0 - d)); - bc = b * (((y * d) / b) + (1.0 - d)); - - cat02_to_hpe ( rp, gp, bp, rc, gc, bc, gamu ); - - if (gamu == 1) { //gamut correction M.H.Brill S.Susstrunk - rp = MAXR (rp, 0.0); - gp = MAXR (gp, 0.0); - bp = MAXR (bp, 0.0); - } - - rpa = nonlinear_adaptation ( rp, fl ); - gpa = nonlinear_adaptation ( gp, fl ); - bpa = nonlinear_adaptation ( bp, fl ); - - return ((2.0 * rpa) + gpa + ((1.0 / 20.0) * bpa) - 0.305) * nbb; -} - float Ciecam02::achromatic_response_to_whitefloat ( float x, float y, float z, float d, float fl, float nbb, int gamu ) { float r, g, b; @@ -388,24 +219,6 @@ float Ciecam02::achromatic_response_to_whitefloat ( float x, float y, float z, f return ((2.0f * rpa) + gpa + ((1.0f / 20.0f) * bpa) - 0.305f) * nbb; } -void Ciecam02::xyz_to_cat02 ( double &r, double &g, double &b, double x, double y, double z, int gamu ) -{ - gamu = 1; - - if (gamu == 0) { - r = ( 0.7328 * x) + (0.4296 * y) - (0.1624 * z); - g = (-0.7036 * x) + (1.6975 * y) + (0.0061 * z); - b = ( 0.0030 * x) + (0.0136 * y) + (0.9834 * z); - } else if (gamu == 1) { //gamut correction M.H.Brill S.Susstrunk - //r = ( 0.7328 * x) + (0.4296 * y) - (0.1624 * z); - //g = (-0.7036 * x) + (1.6975 * y) + (0.0061 * z); - //b = ( 0.0000 * x) + (0.0000 * y) + (1.0000 * z); - r = ( 1.007245 * x) + (0.011136 * y) - (0.018381 * z); //Changjun Li - g = (-0.318061 * x) + (1.314589 * y) + (0.003471 * z); - b = ( 0.0000 * x) + (0.0000 * y) + (1.0000 * z); - } -} - void Ciecam02::xyz_to_cat02float ( float &r, float &g, float &b, float x, float y, float z, int gamu ) { gamu = 1; @@ -433,24 +246,6 @@ void Ciecam02::xyz_to_cat02float ( vfloat &r, vfloat &g, vfloat &b, vfloat x, vf } #endif -void Ciecam02::cat02_to_xyz ( double &x, double &y, double &z, double r, double g, double b, int gamu ) -{ - gamu = 1; - - if (gamu == 0) { - x = ( 1.096124 * r) - (0.278869 * g) + (0.182745 * b); - y = ( 0.454369 * r) + (0.473533 * g) + (0.072098 * b); - z = (-0.009628 * r) - (0.005698 * g) + (1.015326 * b); - } else if (gamu == 1) { //gamut correction M.H.Brill S.Susstrunk - //x = ( 1.0978566 * r) - (0.277843 * g) + (0.179987 * b); - //y = ( 0.455053 * r) + (0.473938 * g) + (0.0710096* b); - //z = ( 0.000000 * r) - (0.000000 * g) + (1.000000 * b); - x = ( 0.99015849 * r) - (0.00838772 * g) + (0.018229217 * b); //Changjun Li - y = ( 0.239565979 * r) + (0.758664642 * g) + (0.001770137 * b); - z = ( 0.000000 * r) - (0.000000 * g) + (1.000000 * b); - } -} - void Ciecam02::cat02_to_xyzfloat ( float &x, float &y, float &z, float r, float g, float b, int gamu ) { gamu = 1; @@ -478,14 +273,6 @@ void Ciecam02::cat02_to_xyzfloat ( vfloat &x, vfloat &y, vfloat &z, vfloat r, vf } #endif -void Ciecam02::hpe_to_xyz ( double &x, double &y, double &z, double r, double g, double b ) -{ - x = (1.910197 * r) - (1.112124 * g) + (0.201908 * b); - y = (0.370950 * r) + (0.629054 * g) - (0.000008 * b); - z = b; -} - - void Ciecam02::hpe_to_xyzfloat ( float &x, float &y, float &z, float r, float g, float b ) { x = (1.910197f * r) - (1.112124f * g) + (0.201908f * b); @@ -501,21 +288,6 @@ void Ciecam02::hpe_to_xyzfloat ( vfloat &x, vfloat &y, vfloat &z, vfloat r, vflo } #endif -void Ciecam02::cat02_to_hpe ( double &rh, double &gh, double &bh, double r, double g, double b, int gamu ) -{ - gamu = 1; - - if (gamu == 0) { - rh = ( 0.7409792 * r) + (0.2180250 * g) + (0.0410058 * b); - gh = ( 0.2853532 * r) + (0.6242014 * g) + (0.0904454 * b); - bh = (-0.0096280 * r) - (0.0056980 * g) + (1.0153260 * b); - } else if (gamu == 1) { //Changjun Li - rh = ( 0.550930835 * r) + (0.519435987 * g) - ( 0.070356303 * b); - gh = ( 0.055954056 * r) + (0.89973132 * g) + (0.044315524 * b); - bh = (0.0 * r) - (0.0 * g) + (1.0 * b); - } -} - void Ciecam02::cat02_to_hpefloat ( float &rh, float &gh, float &bh, float r, float g, float b, int gamu ) { gamu = 1; @@ -541,18 +313,6 @@ void Ciecam02::cat02_to_hpefloat ( vfloat &rh, vfloat &gh, vfloat &bh, vfloat r, } #endif -void Ciecam02::Aab_to_rgb ( double &r, double &g, double &b, double A, double aa, double bb, double nbb ) -{ - double x = (A / nbb) + 0.305; - - /* c1 c2 c3 */ - r = (0.32787 * x) + (0.32145 * aa) + (0.20527 * bb); - /* c1 c4 c5 */ - g = (0.32787 * x) - (0.63507 * aa) - (0.18603 * bb); - /* c1 c6 c7 */ - b = (0.32787 * x) - (0.15681 * aa) - (4.49038 * bb); -} - void Ciecam02::Aab_to_rgbfloat ( float &r, float &g, float &b, float A, float aa, float bb, float nbb ) { float x = (A / nbb) + 0.305f; @@ -578,34 +338,6 @@ void Ciecam02::Aab_to_rgbfloat ( vfloat &r, vfloat &g, vfloat &b, vfloat A, vflo } #endif -void Ciecam02::calculate_ab ( double &aa, double &bb, double h, double e, double t, double nbb, double a ) -{ - double hrad = (h * rtengine::RT_PI) / 180.0; - double sinh = sin ( hrad ); - double cosh = cos ( hrad ); - double x = (a / nbb) + 0.305; - double p3 = 21.0 / 20.0; - - if ( fabs ( sinh ) >= fabs ( cosh ) ) { - bb = ((0.32787 * x) * (2.0 + p3)) / - ((e / (t * sinh)) - - // ((0.32145 - 0.63507 - (p3 * 0.15681)) * (cosh / sinh)) - - // (0.20527 - 0.18603 - (p3 * 4.49038))); - ((-0.31362 - (p3 * 0.15681)) * (cosh / sinh)) - - (0.01924 - (p3 * 4.49038))); - - aa = (bb * cosh) / sinh; - } else { - aa = ((0.32787 * x) * (2.0 + p3)) / - ((e / (t * cosh)) - - // (0.32145 - 0.63507 - (p3 * 0.15681)) - - // ((0.20527 - 0.18603 - (p3 * 4.49038)) * (sinh / cosh))); - (-0.31362 - (p3 * 0.15681)) - - ((0.01924 - (p3 * 4.49038)) * (sinh / cosh))); - - bb = (aa * sinh) / cosh; - } -} void Ciecam02::calculate_abfloat ( float &aa, float &bb, float h, float e, float t, float nbb, float a ) { float2 sincosval = xsincosf(h * rtengine::RT_PI_F_180); @@ -675,32 +407,6 @@ void Ciecam02::calculate_abfloat ( vfloat &aa, vfloat &bb, vfloat h, vfloat e, v #endif -void Ciecam02::initcam1 (double gamu, double yb, double pilotd, double f, double la, double xw, double yw, double zw, double &n, double &d, double &nbb, double &ncb, - double &cz, double &aw, double &wh, double &pfl, double &fl, double &c) -{ - n = yb / yw; - - if (pilotd == 2.0) { - d = d_factor ( f, la ); - } else { - d = pilotd; - } - - fl = calculate_fl_from_la_ciecam02 ( la ); - nbb = ncb = 0.725 * pow ( 1.0 / n, 0.2 ); - cz = 1.48 + sqrt ( n ); - aw = achromatic_response_to_white ( xw, yw, zw, d, fl, nbb, gamu ); - wh = ( 4.0 / c ) * ( aw + 4.0 ) * pow ( fl, 0.25 ); - pfl = pow ( fl, 0.25 ); -#ifdef _DEBUG - - if (settings->verbose) { - printf ("Source double d=%f aw=%f fl=%f wh=%f\n", d, aw, fl, wh); - } - -#endif -} - void Ciecam02::initcam1float (float gamu, float yb, float pilotd, float f, float la, float xw, float yw, float zw, float &n, float &d, float &nbb, float &ncb, float &cz, float &aw, float &wh, float &pfl, float &fl, float &c) { @@ -727,31 +433,6 @@ void Ciecam02::initcam1float (float gamu, float yb, float pilotd, float f, float #endif } -void Ciecam02::initcam2 (double gamu, double yb, double pilotd, double f, double la, double xw, double yw, double zw, double &n, double &d, double &nbb, double &ncb, - double &cz, double &aw, double &fl) -{ - n = yb / yw; - - if (pilotd == 2.0) { - d = d_factorfloat ( f, la ); - } else { - d = pilotd; - } - -// d = d_factor( f, la ); - fl = calculate_fl_from_la_ciecam02 ( la ); - nbb = ncb = 0.725 * pow ( 1.0 / n, 0.2 ); - cz = 1.48 + sqrt ( n ); - aw = achromatic_response_to_white ( xw, yw, zw, d, fl, nbb, gamu ); -#ifdef _DEBUG - - if (settings->verbose) { - printf ("Viewing double d=%f aw=%f fl=%f n=%f\n", d, aw, fl, n); - } - -#endif -} - void Ciecam02::initcam2float (float gamu, float yb, float pilotd, float f, float la, float xw, float yw, float zw, float &n, float &d, float &nbb, float &ncb, float &cz, float &aw, float &fl) { @@ -777,89 +458,6 @@ void Ciecam02::initcam2float (float gamu, float yb, float pilotd, float f, float #endif } -void Ciecam02::xyz2jchqms_ciecam02 ( double &J, double &C, double &h, double &Q, double &M, double &s, double &aw, double &fl, double &wh, - double x, double y, double z, double xw, double yw, double zw, - double c, double nc, int gamu, double n, double nbb, double ncb, double pfl, double cz, double d) -{ - double r, g, b; - double rw, gw, bw; - double rc, gc, bc; - double rp, gp, bp; - double rpa, gpa, bpa; - double a, ca, cb; - double e, t; - double myh; - gamu = 1; - xyz_to_cat02 ( r, g, b, x, y, z, gamu ); - xyz_to_cat02 ( rw, gw, bw, xw, yw, zw, gamu ); - rc = r * (((yw * d) / rw) + (1.0 - d)); - gc = g * (((yw * d) / gw) + (1.0 - d)); - bc = b * (((yw * d) / bw) + (1.0 - d)); - - cat02_to_hpe ( rp, gp, bp, rc, gc, bc, gamu ); - - if (gamu == 1) { //gamut correction M.H.Brill S.Susstrunk - rp = MAXR (rp, 0.0); - gp = MAXR (gp, 0.0); - bp = MAXR (bp, 0.0); - } - - rpa = nonlinear_adaptation ( rp, fl ); - gpa = nonlinear_adaptation ( gp, fl ); - bpa = nonlinear_adaptation ( bp, fl ); - - ca = rpa - ((12.0 * gpa) / 11.0) + (bpa / 11.0); - cb = (1.0 / 9.0) * (rpa + gpa - (2.0 * bpa)); - - myh = (180.0 / rtengine::RT_PI) * atan2 ( cb, ca ); - - if ( myh < 0.0 ) { - myh += 360.0; - } - - //we can also calculate H, if necessary...but it's using time...for what usage ? - /*double temp; - if(myh<20.14) { - temp = ((myh + 122.47)/1.2) + ((20.14 - myh)/0.8); - H = 300 + (100*((myh + 122.47)/1.2)) / temp; - } - else if(myh < 90.0) { - temp = ((myh - 20.14)/0.8) + ((90.00 - myh)/0.7); - H = (100*((myh - 20.14)/0.8)) / temp; - } - else if (myh < 164.25) { - temp = ((myh - 90.00)/0.7) + ((164.25 - myh)/1.0); - H = 100 + ((100*((myh - 90.00)/0.7)) / temp); - } - else if (myh < 237.53) { - temp = ((myh - 164.25)/1.0) + ((237.53 - myh)/1.2); - H = 200 + ((100*((myh - 164.25)/1.0)) / temp); - } - else { - temp = ((myh - 237.53)/1.2) + ((360 - myh + 20.14)/0.8); - H = 300 + ((100*((myh - 237.53)/1.2)) / temp); - } - */ - a = ((2.0 * rpa) + gpa + ((1.0 / 20.0) * bpa) - 0.305) * nbb; - - if (gamu == 1) { - a = MAXR (a, 0.0); //gamut correction M.H.Brill S.Susstrunk - } - - J = 100.0 * pow ( a / aw, c * cz ); - - e = ((12500.0 / 13.0) * nc * ncb) * (cos ( ((myh * rtengine::RT_PI) / 180.0) + 2.0 ) + 3.8); - t = (e * sqrt ( (ca * ca) + (cb * cb) )) / (rpa + gpa + ((21.0 / 20.0) * bpa)); - - C = pow ( t, 0.9 ) * sqrt ( J / 100.0 ) - * pow ( 1.64 - pow ( 0.29, n ), 0.73 ); - - Q = wh * sqrt ( J / 100.0 ); - M = C * pfl; - s = 100.0 * sqrt ( M / Q ); - h = myh; -} - void Ciecam02::xyz2jchqms_ciecam02float ( float &J, float &C, float &h, float &Q, float &M, float &s, float aw, float fl, float wh, float x, float y, float z, float xw, float yw, float zw, float c, float nc, int gamu, float pow1, float nbb, float ncb, float pfl, float cz, float d) @@ -1046,41 +644,6 @@ void Ciecam02::xyz2jch_ciecam02float ( float &J, float &C, float &h, float aw, f h = (myh * 180.f) / (float)rtengine::RT_PI; } - -void Ciecam02::jch2xyz_ciecam02 ( double &x, double &y, double &z, double J, double C, double h, - double xw, double yw, double zw, - double c, double nc, int gamu, double n, double nbb, double ncb, double fl, double cz, double d, double aw ) -{ - double r, g, b; - double rc, gc, bc; - double rp, gp, bp; - double rpa, gpa, bpa; - double rw, gw, bw; - double a, ca, cb; - double e, t; - gamu = 1; - xyz_to_cat02 ( rw, gw, bw, xw, yw, zw, gamu ); - e = ((12500.0 / 13.0) * nc * ncb) * (cos ( ((h * rtengine::RT_PI) / 180.0) + 2.0 ) + 3.8); - a = pow ( J / 100.0, 1.0 / (c * cz) ) * aw; - t = pow ( C / (sqrt ( J / 100) * pow ( 1.64 - pow ( 0.29, n ), 0.73 )), 10.0 / 9.0 ); - - calculate_ab ( ca, cb, h, e, t, nbb, a ); - Aab_to_rgb ( rpa, gpa, bpa, a, ca, cb, nbb ); - - rp = inverse_nonlinear_adaptation ( rpa, fl ); - gp = inverse_nonlinear_adaptation ( gpa, fl ); - bp = inverse_nonlinear_adaptation ( bpa, fl ); - - hpe_to_xyz ( x, y, z, rp, gp, bp ); - xyz_to_cat02 ( rc, gc, bc, x, y, z, gamu ); - - r = rc / (((yw * d) / rw) + (1.0 - d)); - g = gc / (((yw * d) / gw) + (1.0 - d)); - b = bc / (((yw * d) / bw) + (1.0 - d)); - - cat02_to_xyz ( x, y, z, r, g, b, gamu ); -} - void Ciecam02::jch2xyz_ciecam02float ( float &x, float &y, float &z, float J, float C, float h, float xw, float yw, float zw, float c, float nc, int gamu, float pow1, float nbb, float ncb, float fl, float cz, float d, float aw) @@ -1167,19 +730,6 @@ void Ciecam02::jch2xyz_ciecam02float ( vfloat &x, vfloat &y, vfloat &z, vfloat J } #endif -double Ciecam02::nonlinear_adaptation ( double c, double fl ) -{ - double p; - - if (c < 0.0) { - p = pow ( (-1.0 * fl * c) / 100.0, 0.42 ); - return ((-1.0 * 400.0 * p) / (27.13 + p)) + 0.1; - } else { - p = pow ( (fl * c) / 100.0, 0.42 ); - return ((400.0 * p) / (27.13 + p)) + 0.1; - } -} - float Ciecam02::nonlinear_adaptationfloat ( float c, float fl ) { float p; @@ -1207,19 +757,6 @@ vfloat Ciecam02::nonlinear_adaptationfloat ( vfloat c, vfloat fl ) } #endif -double Ciecam02::inverse_nonlinear_adaptation ( double c, double fl ) -{ - int c1; - - if (c - 0.1 < 0.0) { - c1 = -1; - } else { - c1 = 1; - } - - return c1 * (100.0 / fl) * pow ( (27.13 * fabs ( c - 0.1 )) / (400.0 - fabs ( c - 0.1 )), 1.0 / 0.42 ); -} - float Ciecam02::inverse_nonlinear_adaptationfloat ( float c, float fl ) { c -= 0.1f; diff --git a/rtengine/ciecam02.h b/rtengine/ciecam02.h index 55d807b7e..d55b1a405 100644 --- a/rtengine/ciecam02.h +++ b/rtengine/ciecam02.h @@ -28,17 +28,9 @@ namespace rtengine class Ciecam02 { private: - static double d_factor ( double f, double la ); static float d_factorfloat ( float f, float la ); - static double calculate_fl_from_la_ciecam02 ( double la ); static float calculate_fl_from_la_ciecam02float ( float la ); - static double achromatic_response_to_white ( double x, double y, double z, double d, double fl, double nbb, int gamu ); static float achromatic_response_to_whitefloat ( float x, float y, float z, float d, float fl, float nbb, int gamu ); - static void xyz_to_cat02 ( double &r, double &g, double &b, double x, double y, double z, int gamu ); - static void cat02_to_hpe ( double &rh, double &gh, double &bh, double r, double g, double b, int gamu ); - static void cat02_to_xyz ( double &x, double &y, double &z, double r, double g, double b, int gamu ); - static void hpe_to_xyz ( double &x, double &y, double &z, double r, double g, double b ); - static void xyz_to_cat02float ( float &r, float &g, float &b, float x, float y, float z, int gamu ); static void cat02_to_hpefloat ( float &rh, float &gh, float &bh, float r, float g, float b, int gamu ); @@ -48,13 +40,7 @@ private: static vfloat nonlinear_adaptationfloat ( vfloat c, vfloat fl ); #endif - static void Aab_to_rgb ( double &r, double &g, double &b, double A, double aa, double bb, double nbb ); - static void calculate_ab ( double &aa, double &bb, double h, double e, double t, double nbb, double a ); - - static double nonlinear_adaptation ( double c, double fl ); static float nonlinear_adaptationfloat ( float c, float fl ); - static double inverse_nonlinear_adaptation ( double c, double fl ); - static float inverse_nonlinear_adaptationfloat ( float c, float fl ); static void calculate_abfloat ( float &aa, float &bb, float h, float e, float t, float nbb, float a ); @@ -71,20 +57,12 @@ private: public: Ciecam02 () {} - static void curvecolor (double satind, double satval, double &sres, double parsat); static void curvecolorfloat (float satind, float satval, float &sres, float parsat); - static void curveJ (double br, double contr, int db, LUTf & outCurve, LUTu & histogram ) ; static void curveJfloat (float br, float contr, const LUTu & histogram, LUTf & outCurve ) ; /** * Inverse transform from CIECAM02 JCh to XYZ. */ - static void jch2xyz_ciecam02 ( double &x, double &y, double &z, - double J, double C, double h, - double xw, double yw, double zw, - double c, double nc, int gamu, double n, double nbb, double ncb, double fl, double cz, double d, double aw); - - static void jch2xyz_ciecam02float ( float &x, float &y, float &z, float J, float C, float h, float xw, float yw, float zw, @@ -98,24 +76,12 @@ public: /** * Forward transform from XYZ to CIECAM02 JCh. */ - static void initcam1 (double gamu, double yb, double pilotd, double f, double la, double xw, double yw, double zw, double &n, double &d, double &nbb, double &ncb, - double &cz, double &aw, double &wh, double &pfl, double &fl, double &c); - - static void initcam2 (double gamu, double yb, double pilotd, double f, double la, double xw, double yw, double zw, double &n, double &d, double &nbb, double &ncb, - double &cz, double &aw, double &fl); - static void initcam1float (float gamu, float yb, float pilotd, float f, float la, float xw, float yw, float zw, float &n, float &d, float &nbb, float &ncb, float &cz, float &aw, float &wh, float &pfl, float &fl, float &c); static void initcam2float (float gamu, float yb, float pilotd, float f, float la, float xw, float yw, float zw, float &n, float &d, float &nbb, float &ncb, float &cz, float &aw, float &fl); - static void xyz2jchqms_ciecam02 ( double &J, double &C, double &h, - double &Q, double &M, double &s, double &aw, double &fl, double &wh, - double x, double y, double z, - double xw, double yw, double zw, - double c, double nc, int gamu, double n, double nbb, double ncb, double pfl, double cz, double d ); - static void xyz2jch_ciecam02float ( float &J, float &C, float &h, float aw, float fl, float x, float y, float z, diff --git a/rtengine/color.cc b/rtengine/color.cc index 2ef1303d0..9b7d786e6 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -2339,6 +2339,46 @@ void Color::AllMunsellLch(bool lumaMuns, float Lprov1, float Loldd, float HH, fl } +/* + * AllMunsellLch correction + * Copyright (c) 2012 Jacques Desmis + * + * This function corrects the color (hue) for changes in chromaticity and luminance + * to use in a "for" or "do while" statement + * + * Parameters: + * float Lprov1: luminance + * float HH: hue before + * float Chprov1, CC : chroma after and before + * float coorectionHuechroma : correction Hue for chromaticity (saturation) + */ +void Color::AllMunsellLch(float Lprov1, float HH, float Chprov1, float CC, float &correctionHuechroma) +{ + + float correctionHue = 0.f, correctionHueLum = 0.f; + bool correctL; + + if(CC >= 6.f && CC < 140.f) { //if C > 140 we say C=140 (only in Prophoto ...with very large saturation) + static const float huelimit[8] = { -2.48f, -0.55f, 0.44f, 1.52f, 1.87f, 3.09f, -0.27f, 0.44f}; //limits hue of blue-purple, red-yellow, green-yellow, red-purple + + if (Chprov1 > 140.f) { + Chprov1 = 139.f; //limits of LUTf + } + + Chprov1 = rtengine::max(Chprov1, 6.f); + + for(int zo = 1; zo <= 4; zo++) { + if(HH > huelimit[2 * zo - 2] && HH < huelimit[2 * zo - 1]) { + //zone=zo; + correctL = false; + MunsellLch (Lprov1, HH, Chprov1, CC, correctionHue, zo, correctionHueLum, correctL); //munsell chroma correction + correctionHuechroma = correctionHue; //preserve + break; + } + } + } +} + /* * GamutLchonly correction * Copyright (c)2012 Jacques Desmis and Jean-Christophe Frisch @@ -2435,7 +2475,7 @@ void Color::gamutLchonly(float HH, float &Lprov1, float &Chprov1, float &R, floa } inGamut = false; - } else if (!isHLEnabled && (R > ClipLevel || G > ClipLevel || B > ClipLevel)) { + } else if (!isHLEnabled && rtengine::max(R, G, B) > ClipLevel && rtengine::min(R, G, B) <= ClipLevel) { // if "highlight reconstruction" is enabled or the point is completely white (clipped, no color), don't control Gamut #ifdef _DEBUG @@ -2560,7 +2600,7 @@ void Color::gamutLchonly(float HH, float2 sincosval, float &Lprov1, float &Chpro } inGamut = false; - } else if (!isHLEnabled && (R > ClipLevel || G > ClipLevel || B > ClipLevel)) { + } else if (!isHLEnabled && rtengine::max(R, G, B) > ClipLevel && rtengine::min(R, G, B) <= ClipLevel) { // if "highlight reconstruction" is enabled or the point is completely white (clipped, no color), don't control Gamut #ifdef _DEBUG @@ -2584,6 +2624,109 @@ void Color::gamutLchonly(float HH, float2 sincosval, float &Lprov1, float &Chpro //end first gamut control } +/* + * GamutLchonly correction + * Copyright (c)2012 Jacques Desmis and Jean-Christophe Frisch + * + * This function puts the data (Lab) in the gamut of "working profile": + * it returns the corrected values of the chromaticity and luminance + * + * float HH : hue + * float2 sincosval : sin and cos of HH + * float Lprov1 : input luminance value, sent back corrected + * float Chprov1: input chroma value, sent back corrected + * float wip : working profile + * bool isHLEnabled : if "highlight reconstruction " is enabled + * float coef : a float number between [0.95 ; 1.0[... the nearest it is from 1.0, the more precise it will be... and the longer too as more iteration will be necessary) + */ +void Color::gamutLchonly (float HH, float2 sincosval, float &Lprov1, float &Chprov1, float &saturation, const float wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef) +{ + constexpr float ClipLevel = 1.f; + bool inGamut; + float R, G, B; + + do { + inGamut = true; + + float aprov1 = Chprov1 * sincosval.y; + float bprov1 = Chprov1 * sincosval.x; + + //conversion Lab RGB to limit Lab values - this conversion is useful before Munsell correction + float fy = c1By116 * Lprov1 + c16By116; + float fx = 0.002f * aprov1 + fy; + float fz = fy - 0.005f * bprov1; + + float x_ = f2xyz(fx) * D50x; + float z_ = f2xyz(fz) * D50z; + float y_ = (Lprov1 > epskap) ? fy * fy * fy : Lprov1 / kappaf; + + xyz2rgb(x_, y_, z_, R, G, B, wip); + + // gamut control before saturation to put Lab values in future gamut, but not RGB + if (rtengine::min(R, G, B) < 0.f) { + + Lprov1 = rtengine::max(Lprov1, 0.1f); + + //gamut for L with ultra blue : we can improve the algorithm ... thinner, and other color ??? + if(HH < -0.9f && HH > -1.55f ) {//ultra blue + if(Chprov1 > 160.f) if (Lprov1 < 5.f) { + Lprov1 = 5.f; //very very very very high chroma + } + + if(Chprov1 > 140.f) if (Lprov1 < 3.5f) { + Lprov1 = 3.5f; + } + + if(Chprov1 > 120.f) if (Lprov1 < 2.f) { + Lprov1 = 2.f; + } + + if(Chprov1 > 105.f) if (Lprov1 < 1.f) { + Lprov1 = 1.f; + } + + if(Chprov1 > 90.f) if (Lprov1 < 0.7f) { + Lprov1 = 0.7f; + } + + if(Chprov1 > 50.f) if (Lprov1 < 0.5f) { + Lprov1 = 0.5f; + } + + if(Chprov1 > 20.f) if (Lprov1 < 0.4f) { + Lprov1 = 0.4f; + } + } + + Chprov1 *= higherCoef; // decrease the chromaticity value + + if (Chprov1 <= 3.f) { + Lprov1 += lowerCoef; + } + + inGamut = false; + } else if (!isHLEnabled && rtengine::max(R, G, B) > ClipLevel && rtengine::min(R, G, B) <= ClipLevel) { + + // if "highlight reconstruction" is enabled or the point is completely white (clipped, no color), don't control Gamut + + if (Lprov1 > 99.999f) { + Lprov1 = 99.98f; + } + + Chprov1 *= higherCoef; + + if (Chprov1 <= 3.f) { + Lprov1 -= lowerCoef; + } + + inGamut = false; + } + } while (!inGamut); + + saturation = 1.f - (rtengine::min(R, G, B) / rtengine::max(R, G, B)); + //end first gamut control +} + #ifdef _DEBUG void Color::gamutLchonly(float2 sincosval, float &Lprov1, float &Chprov1, const float wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef, bool &neg, bool &more_rgb) @@ -2634,7 +2777,7 @@ void Color::gamutLchonly(float2 sincosval, float &Lprov1, float &Chprov1, const } inGamut = false; - } else if (!isHLEnabled && (R > ClipLevel || G > ClipLevel || B > ClipLevel)) { + } else if (!isHLEnabled && rtengine::max(R, G, B) > ClipLevel && rtengine::min(R, G, B) <= ClipLevel) { // if "highlight reconstruction" is enabled or the point is completely white (clipped, no color), don't control Gamut #ifdef _DEBUG @@ -4209,12 +4352,12 @@ void Color::SkinSat(float lum, float hue, float chrom, float &satreduc) { // to be adapted...by tests - float reduction = 0.3f; // use "reduction" for "real" skin color : take into account a slightly usage of contrast and saturation in RT if option "skin" = 1 - float extendedreduction = 0.4f; // use "extendedreduction" for wide area skin color, useful if not accurate colorimetry or if the user has changed hue and saturation - float extendedreduction2 = 0.6f; // use "extendedreduction2" for wide area for transition + constexpr float reduction = 0.3f; // use "reduction" for "real" skin color : take into account a slightly usage of contrast and saturation in RT if option "skin" = 1 + constexpr float extendedreduction = 0.4f; // use "extendedreduction" for wide area skin color, useful if not accurate colorimetry or if the user has changed hue and saturation + constexpr float extendedreduction2 = 0.6f; // use "extendedreduction2" for wide area for transition - float C9 = 8.0, C8 = 15.0, C7 = 12.0, C4 = 7.0, C3 = 5.0, C2 = 5.0, C1 = 5.0; - float H9 = 0.05, H8 = 0.25, H7 = 0.1, H4 = 0.02, H3 = 0.02, H2 = 0.1, H1 = 0.1, H10 = -0.2, H11 = -0.2; //H10 and H11 are curious...H11=-0.8 ?? + constexpr float C9 = 8.f, C8 = 15.f, C7 = 12.f, C4 = 7.f, C3 = 5.f, C2 = 5.f, C1 = 5.f; + constexpr float H9 = 0.05f, H8 = 0.25f, H7 = 0.1f, H4 = 0.02f, H3 = 0.02f, H2 = 0.1f, H1 = 0.1f, H10 = -0.2f, H11 = -0.2f; //H10 and H11 are curious...H11=-0.8 ?? if (lum >= 85.f) { if ((hue > (0.78f - H9) && hue < (1.18f + H9)) && (chrom > 8.f && chrom < (14.f + C9))) { diff --git a/rtengine/color.h b/rtengine/color.h index f0ae0fee1..7929c77a1 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -1390,6 +1390,7 @@ public: #else static void AllMunsellLch(bool lumaMuns, float Lprov1, float Loldd, float HH, float Chprov1, float CC, float &correctionHueChroma, float &correctlum); #endif + static void AllMunsellLch (float Lprov1, float HH, float Chprov1, float CC, float &correctionHueChroma); /** @@ -1422,6 +1423,7 @@ public: static void gamutLchonly(float HH, float2 sincosval, float &Lprov1, float &Chprov1, float &R, float &G, float &B, const double wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef); static void gamutLchonly(float2 sincosval, float &Lprov1, float &Chprov1, const float wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef); #endif + static void gamutLchonly (float HH, float2 sincosval, float &Lprov1, float &Chprov1, float &saturation, const float wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef); /** diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h index 145c8ed20..d529d844e 100644 --- a/rtengine/colortemp.h +++ b/rtengine/colortemp.h @@ -96,8 +96,6 @@ public: static void temp2mulxyz (double tem, const std::string &method, double &Xxyz, double &Zxyz); static void cieCAT02(double Xw, double Yw, double Zw, double &CAM02BB00, double &CAM02BB01, double &CAM02BB02, double &CAM02BB10, double &CAM02BB11, double &CAM02BB12, double &CAM02BB20, double &CAM02BB21, double &CAM02BB22, double adap ); - //static void CAT02 (Imagefloat* baseImg, const ProcParams* params); - //static void ciecam_02 (LabImage* lab, const ProcParams* params); bool operator== (const ColorTemp& other) const { diff --git a/rtengine/curves.h b/rtengine/curves.h index f4ae31162..08f534896 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -45,6 +45,16 @@ namespace rtengine class ToneCurve; class ColorAppearance; +template +void setUnlessOOG(T &r, T &g, T &b, const T &rr, const T &gg, const T &bb) +{ + if (!OOG(r) || !OOG(g) || !OOG(b)) { + r = rr; + g = gg; + b = bb; + } +} + namespace curves { inline void setLutVal(const LUTf &lut, float &val) @@ -60,6 +70,21 @@ inline void setLutVal(const LUTf &lut, float &val) } } + +inline void setLutVal(const LUTf &lut, float &rval, float &gval, float &bval) +{ + if (!OOG(rval) || !OOG(gval) || !OOG(bval)) { + rval = lut[std::max(rval, 0.f)]; + gval = lut[std::max(rval, 0.f)]; + bval = lut[std::max(rval, 0.f)]; + } else { + setLutVal(lut, rval); + setLutVal(lut, gval); + setLutVal(lut, bval); + } +} + + inline void setLutVal(float &val, float lutval, float maxval) { if (!OOG(val)) { @@ -69,6 +94,7 @@ inline void setLutVal(float &val, float lutval, float maxval) } } + } // namespace curves class CurveFactory @@ -1038,9 +1064,7 @@ inline void StandardToneCurve::Apply(float& r, float& g, float& b) const assert(lutToneCurve); - curves::setLutVal(lutToneCurve, r); - curves::setLutVal(lutToneCurve, g); - curves::setLutVal(lutToneCurve, b); + curves::setLutVal(lutToneCurve, r, g, b); } inline void StandardToneCurve::BatchApply( @@ -1069,17 +1093,15 @@ inline void StandardToneCurve::BatchApply( break; #endif } - curves::setLutVal(lutToneCurve, r[i]); - curves::setLutVal(lutToneCurve, g[i]); - curves::setLutVal(lutToneCurve, b[i]); + curves::setLutVal(lutToneCurve, r[i], g[i], b[i]); i++; } #ifdef __SSE2__ - vfloat tmpr; - vfloat tmpg; - vfloat tmpb; - float mv = lutToneCurve[MAXVALF]; + float tmpr[4] ALIGNED16; + float tmpg[4] ALIGNED16; + float tmpb[4] ALIGNED16; + // float mv = lutToneCurve[MAXVALF]; for (; i + 3 < end; i += 4) { __m128 r_val = LVF(r[i]); __m128 g_val = LVF(g[i]); @@ -1088,17 +1110,16 @@ inline void StandardToneCurve::BatchApply( STVF(tmpg[0], lutToneCurve[g_val]); STVF(tmpb[0], lutToneCurve[b_val]); for (int j = 0; j < 4; ++j) { - curves::setLutVal(r[i+j], tmpr[j], mv); - curves::setLutVal(g[i+j], tmpg[j], mv); - curves::setLutVal(b[i+j], tmpb[j], mv); + setUnlessOOG(r[i+j], g[i+j], b[i+j], tmpr[j], tmpg[j], tmpb[j]); + // curves::setLutVal(r[i+j], tmpr[j], mv); + // curves::setLutVal(g[i+j], tmpg[j], mv); + // curves::setLutVal(b[i+j], tmpb[j], mv); } } // Remainder in non-SSE. for (; i < end; ++i) { - curves::setLutVal(lutToneCurve, r[i]); - curves::setLutVal(lutToneCurve, g[i]); - curves::setLutVal(lutToneCurve, b[i]); + curves::setLutVal(lutToneCurve, r[i], g[i], b[i]); } #endif @@ -1137,9 +1158,7 @@ inline void AdobeToneCurve::Apply (float& ir, float& ig, float& ib) const } } - setUnlessOOG(ir, r); - setUnlessOOG(ig, g); - setUnlessOOG(ib, b); + setUnlessOOG(ir, ig, ib, r, g, b); } inline void AdobeToneCurve::RGBTone(float& r, float& g, float& b) const @@ -1169,9 +1188,7 @@ inline void LuminanceToneCurve::Apply(float &ir, float &ig, float &ib) const g = LIM (g * coef, 0.f, 65535.f); b = LIM (b * coef, 0.f, 65535.f); - setUnlessOOG(ir, r); - setUnlessOOG(ig, g); - setUnlessOOG(ib, b); + setUnlessOOG(ir, ig, ib, r, g, b); } inline float WeightedStdToneCurve::Triangle(float a, float a1, float b) const @@ -1229,9 +1246,7 @@ inline void WeightedStdToneCurve::Apply (float& ir, float& ig, float& ib) const g = CLIP (g1 * 0.25f + g2 * 0.50f + g3 * 0.25f); b = CLIP (b1 * 0.25f + b2 * 0.25f + b3 * 0.50f); - setUnlessOOG(ir, r); - setUnlessOOG(ig, g); - setUnlessOOG(ib, b); + setUnlessOOG(ir, ig, ib, r, g, b); } inline void WeightedStdToneCurve::BatchApply(const size_t start, const size_t end, float *r, float *g, float *b) const @@ -1268,9 +1283,9 @@ inline void WeightedStdToneCurve::BatchApply(const size_t start, const size_t en const vfloat zd5v = F2V(0.5f); const vfloat zd25v = F2V(0.25f); - vfloat tmpr; - vfloat tmpg; - vfloat tmpb; + float tmpr[4] ALIGNED16; + float tmpg[4] ALIGNED16; + float tmpb[4] ALIGNED16; for (; i + 3 < end; i += 4) { vfloat r_val = LIMV(LVF(r[i]), ZEROV, c65535v); @@ -1292,9 +1307,7 @@ inline void WeightedStdToneCurve::BatchApply(const size_t start, const size_t en STVF(tmpg[0], LIMV(g1 * zd25v + g2 * zd5v + g3 * zd25v, ZEROV, c65535v)); STVF(tmpb[0], LIMV(b1 * zd25v + b2 * zd25v + b3 * zd5v, ZEROV, c65535v)); for (int j = 0; j < 4; ++j) { - setUnlessOOG(r[i+j], tmpr[j]); - setUnlessOOG(g[i+j], tmpg[j]); - setUnlessOOG(b[i+j], tmpb[j]); + setUnlessOOG(r[i+j], g[i+j], b[i+j], tmpr[j], tmpg[j], tmpb[j]); } } @@ -1342,9 +1355,7 @@ inline void SatAndValueBlendingToneCurve::Apply (float& ir, float& ig, float& ib Color::hsv2rgbdcp(h, s, v + dV, r, g, b); - setUnlessOOG(ir, r); - setUnlessOOG(ig, g); - setUnlessOOG(ib, b); + setUnlessOOG(ir, ig, ib, r, g, b); } } diff --git a/rtengine/dcp.cc b/rtengine/dcp.cc index 09d6bb263..fe798cb99 100644 --- a/rtengine/dcp.cc +++ b/rtengine/dcp.cc @@ -1190,6 +1190,11 @@ void DCPProfile::step2ApplyTile(float* rc, float* gc, float* bc, int width, int } // with looktable and tonecurve we need to clip + if (as_in.data->apply_look_table || as_in.data->use_tone_curve) { + newr = max(newr, 0.f); + newg = max(newg, 0.f); + newb = max(newb, 0.f); + } // newr = FCLIP(newr); // newg = FCLIP(newg); // newb = FCLIP(newb); @@ -1215,9 +1220,7 @@ void DCPProfile::step2ApplyTile(float* rc, float* gc, float* bc, int width, int Color::hsv2rgbdcp( h, s, v, cnewr, cnewg, cnewb); - setUnlessOOG(newr, cnewr); - setUnlessOOG(newg, cnewg); - setUnlessOOG(newb, cnewb); + setUnlessOOG(newr, newg, newb, cnewr, cnewg, cnewb); } if (as_in.data->use_tone_curve) { diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 73b1b33b3..6bdca6e7e 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1962,16 +1962,9 @@ void Crop::update(int todo) cieCrop = new CieImage(cropw, croph); } - if (settings->ciecamfloat) { - float d, dj, yb; // not used after this block - parent->ipf.ciecam_02float(cieCrop, float (adap), 1, 2, labnCrop, ¶ms, parent->customColCurve1, parent->customColCurve2, parent->customColCurve3, + float d, dj, yb; // not used after this block + parent->ipf.ciecam_02float (cieCrop, float (adap), 1, 2, labnCrop, ¶ms, parent->customColCurve1, parent->customColCurve2, parent->customColCurve3, dummy, dummy, parent->CAMBrightCurveJ, parent->CAMBrightCurveQ, parent->CAMMean, 5, skip, execsharp, d, dj, yb, 1); - } else { - double dd, dj; // not used after this block - - parent->ipf.ciecam_02(cieCrop, adap, 1, 2, labnCrop, ¶ms, parent->customColCurve1, parent->customColCurve2, parent->customColCurve3, - dummy, dummy, parent->CAMBrightCurveJ, parent->CAMBrightCurveQ, parent->CAMMean, 5, skip, execsharp, dd, dj, 1); - } } else { // CIECAM is disabled, we free up its image buffer to save some space if (cieCrop) { diff --git a/rtengine/hilite_recon.cc b/rtengine/hilite_recon.cc index 636ffdc80..a1f5b5e4a 100644 --- a/rtengine/hilite_recon.cc +++ b/rtengine/hilite_recon.cc @@ -415,7 +415,6 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b { { 1.f, 0.8660254f, -0.5f }, { 1.f, -0.8660254f, -0.5f }, { 1.f, 0.f, 1.f } }; std::unique_ptr recovered_partial; - std::unique_ptr recovered_full; if(settings->verbose) for(int c = 0; c < 3; c++) { @@ -1109,16 +1108,11 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b //now correct clipped channels if (pixel[0] > max_f[0] && pixel[1] > max_f[1] && pixel[2] > max_f[2]) { //all channels clipped - // float Y = (0.299 * clipfix[0] + 0.587 * clipfix[1] + 0.114 * clipfix[2]); - // float factor = whitept / Y; - // red[i][j] = CLIP(clipfix[0] * factor); - // green[i][j] = CLIP(clipfix[1] * factor); - // blue[i][j] = CLIP(clipfix[2] * factor); - red[i][j] = green[i][j] = blue[i][j] = whitept; - if (!recovered_full) { - recovered_full.reset(new PixelsMap(width, height)); - } - recovered_full->set(j, i); + float Y = (0.299 * clipfix[0] + 0.587 * clipfix[1] + 0.114 * clipfix[2]); + float factor = whitept / Y; + red[i][j] = CLIP(clipfix[0] * factor); + green[i][j] = CLIP(clipfix[1] * factor); + blue[i][j] = CLIP(clipfix[2] * factor); } else {//some channels clipped float notclipped[3] = {pixel[0] <= max_f[0] ? 1.f : 0.f, pixel[1] <= max_f[1] ? 1.f : 0.f, pixel[2] <= max_f[2] ? 1.f : 0.f}; @@ -1180,27 +1174,6 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b } } } - - if (recovered_full) { -#ifdef _OPENMP - #pragma omp parallel -#endif - gaussianBlur(color, temp, width, height, 3.f); - -#ifdef _OPENMP - #pragma omp parallel for -#endif - for (int i = 0; i < height; ++i) { - for (int j = 0; j < width; ++j) { - int skip = recovered_full->skipIfZero(j, i); - if (skip) { - j += skip-1; - } else if (recovered_full->get(j, i)) { - color[i][j] = temp[i][j]; - } - } - } - } } } diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 96a0ff7d3..02a5eddce 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -470,1294 +470,7 @@ void ImProcFunctions::firstAnalysis(const Imagefloat* const original, const Proc // Copyright (c) 2012 Jacques Desmis -void ImProcFunctions::ciecam_02(CieImage* ncie, double adap, int pW, int pwb, LabImage* lab, const ProcParams* params, - const ColorAppearance & customColCurve1, const ColorAppearance & customColCurve2, const ColorAppearance & customColCurve3, - LUTu & histLCAM, LUTu & histCCAM, LUTf & CAMBrightCurveJ, LUTf & CAMBrightCurveQ, float &mean, int Iterates, int scale, bool execsharp, double &d, double &dj, int rtt) -{ - if (params->colorappearance.enabled) { -//int lastskip; -//if(rtt==1) {lastskip=scale;} //not for Rtthumbnail -#ifdef _DEBUG - MyTime t1e, t2e; - t1e.set(); -#endif - LUTf dLcurve; - LUTu hist16JCAM; - bool jp = false; - - //preparate for histograms CIECAM - if (pW != 1) { //only with improccoordinator - dLcurve(65536, 0); - dLcurve.clear(); - hist16JCAM(65536, 0); - hist16JCAM.clear(); - - for (int i = 0; i < 32768; i++) { //# 32768*1.414 approximation maxi for chroma - float val = (double)i / 32767.0; - dLcurve[i] = CLIPD(val); - } - } - - LUTf dCcurve; - LUTu hist16_CCAM; - bool chropC = false; - - if (pW != 1) { //only with improccoordinator - dCcurve(65536, 0); - hist16_CCAM(65536); - hist16_CCAM.clear(); - - for (int i = 0; i < 48000; i++) { //# 32768*1.414 approximation maxi for chroma - float valc = (double)i / 47999.0; - dCcurve[i] = CLIPD(valc); - } - } - - //end preparate histogram - int width = lab->W, height = lab->H; - float minQ = 10000.f; - float maxQ = -1000.f; - float a_w = 0.f; - float c_ = 0.f; - float f_l; - double Yw; - Yw = 1.0; - double Xw, Zw; - double Xwout, Zwout; - double Xwsc, Zwsc; - - double f = 0., c = 0., nc = 0., yb = 0., la, xw, yw, zw, f2 = 0., c2 = 0., nc2 = 0., yb2 = 0., la2; - double fl, n, nbb, ncb, aw; - double xwd = 0., ywd, zwd = 0.; - double xws, yws, zws; - int alg = 0; - bool algepd = false; - float sum = 0.f; - - bool ciedata = params->colorappearance.datacie; - - ColorTemp::temp2mulxyz(params->wb.temperature, params->wb.method, Xw, Zw); //compute white Xw Yw Zw : white current WB - ColorTemp::temp2mulxyz(params->colorappearance.tempout, "Custom", Xwout, Zwout); - ColorTemp::temp2mulxyz(params->colorappearance.tempsc, "Custom", Xwsc, Zwsc); - - //viewing condition for surrsrc - if (params->colorappearance.surrsrc == "Average") { - f = 1.00; - c = 0.69; - nc = 1.00; - } else if (params->colorappearance.surrsrc == "Dim") { - f = 0.9; - c = 0.59; - nc = 0.9; - } else if (params->colorappearance.surrsrc == "Dark") { - f = 0.8; - c = 0.525; - nc = 0.8; - } else if (params->colorappearance.surrsrc == "ExtremelyDark") { - f = 0.8; - c = 0.41; - nc = 0.8; - } - - - //viewing condition for surround - if (params->colorappearance.surround == "Average") { - f2 = 1.0, c2 = 0.69, nc2 = 1.0; - } else if (params->colorappearance.surround == "Dim") { - f2 = 0.9; - c2 = 0.59; - nc2 = 0.9; - } else if (params->colorappearance.surround == "Dark") { - f2 = 0.8; - c2 = 0.525; - nc2 = 0.8; - } else if (params->colorappearance.surround == "ExtremelyDark") { - f2 = 0.8; - c2 = 0.41; - nc2 = 0.8; - } - - /* - //scene condition for surround - if (params->colorappearance.surrsource) { - f = 0.85; // if user => source image has surround very dark - c = 0.55; - nc = 0.85; - } - */ - //with which algorithme - if (params->colorappearance.algo == "JC") { - alg = 0; - } else if (params->colorappearance.algo == "JS") { - alg = 1; - } else if (params->colorappearance.algo == "QM") { - alg = 2; - algepd = true; - } else if (params->colorappearance.algo == "ALL") { - alg = 3; - algepd = true; - } - - bool needJ = (alg == 0 || alg == 1 || alg == 3); - bool needQ = (alg == 2 || alg == 3); - /* - //settings white point of output device - or illuminant viewing - if (settings->viewingdevice == 0) { - xwd = 96.42; //5000K - ywd = 100.0; - zwd = 82.52; - } else if (settings->viewingdevice == 1) { - xwd = 95.68; //5500 - ywd = 100.0; - zwd = 92.15; - } else if (settings->viewingdevice == 2) { - xwd = 95.24; //6000 - ywd = 100.0; - zwd = 100.81; - } else if (settings->viewingdevice == 3) { - xwd = 95.04; //6500 - ywd = 100.0; - zwd = 108.88; - } else if (settings->viewingdevice == 4) { - xwd = 109.85; //tungsten - ywd = 100.0; - zwd = 35.58; - } else if (settings->viewingdevice == 5) { - xwd = 99.18; //fluo F2 - ywd = 100.0; - zwd = 67.39; - } else if (settings->viewingdevice == 6) { - xwd = 95.04; //fluo F7 - ywd = 100.0; - zwd = 108.75; - } else if (settings->viewingdevice == 7) { - xwd = 100.96; //fluo F11 - ywd = 100.0; - zwd = 64.35; - } - */ - - xwd = 100. * Xwout; - zwd = 100. * Zwout; - ywd = 100. / params->colorappearance.greenout;//approximation to simplify - - xws = 100. * Xwsc; - zws = 100. * Zwsc; - yws = 100. / params->colorappearance.greensc;//approximation to simplify - - /* - //settings mean Luminance Y of output device or viewing - if (settings->viewingdevicegrey == 0) { - yb2 = 5.0; - } else if (settings->viewingdevicegrey == 1) { - yb2 = 10.0; - } else if (settings->viewingdevicegrey == 2) { - yb2 = 15.0; - } else if (settings->viewingdevicegrey == 3) { - yb2 = 18.0; - } else if (settings->viewingdevicegrey == 4) { - yb2 = 23.0; - } else if (settings->viewingdevicegrey == 5) { - yb2 = 30.0; - } else if (settings->viewingdevicegrey == 6) { - yb2 = 40.0; - } - */ - yb2 = params->colorappearance.ybout; - - //La and la2 = ambiant luminosity scene and viewing - la = double (params->colorappearance.adapscen); - - if (pwb == 2) { - if (params->colorappearance.autoadapscen) { - la = adap; - } - } - - la2 = double (params->colorappearance.adaplum); - - // level of adaptation - double deg = (params->colorappearance.degree) / 100.0; - double pilot = params->colorappearance.autodegree ? 2.0 : deg; - - - const float degout = (params->colorappearance.degreeout) / 100.0; - const float pilotout = params->colorappearance.autodegreeout ? 2.0 : degout; - - //algoritm's params - float jli = params->colorappearance.jlight; - float chr = params->colorappearance.chroma; - float contra = params->colorappearance.contrast; - float qbri = params->colorappearance.qbright; - float schr = params->colorappearance.schroma; - float mchr = params->colorappearance.mchroma; - float qcontra = params->colorappearance.qcontrast; - float hue = params->colorappearance.colorh; - double rstprotection = 100. - params->colorappearance.rstprotection; - - if (schr > 0.0) { - schr = schr / 2.0f; //divide sensibility for saturation - } - - // extracting datas from 'params' to avoid cache flush (to be confirmed) - ColorAppearanceParams::TcMode curveMode = params->colorappearance.curveMode; - ColorAppearanceParams::TcMode curveMode2 = params->colorappearance.curveMode2; - bool hasColCurve1 = bool (customColCurve1); - bool hasColCurve2 = bool (customColCurve2); - ColorAppearanceParams::CtcMode curveMode3 = params->colorappearance.curveMode3; - bool hasColCurve3 = bool (customColCurve3); - - - if (CAMBrightCurveJ.dirty || CAMBrightCurveQ.dirty) { - LUTu hist16J; - LUTu hist16Q; - - if (needJ) { - hist16J(65536); - hist16J.clear(); - } - - if (needQ) { - hist16Q(65536); - hist16Q.clear(); - } - - float koef = 1.0f; //rough correspondence between L and J - - for (int i = 0; i < height; i++) - - // for (int i=begh; iL[i][j] / 327.68f; - - if (currL > 95.) { - koef = 1.f; - } else if (currL > 85.) { - koef = 0.97f; - } else if (currL > 80.) { - koef = 0.93f; - } else if (currL > 70.) { - koef = 0.87f; - } else if (currL > 60.) { - koef = 0.85f; - } else if (currL > 50.) { - koef = 0.8f; - } else if (currL > 40.) { - koef = 0.75f; - } else if (currL > 30.) { - koef = 0.7f; - } else if (currL > 20.) { - koef = 0.7f; - } else if (currL > 10.) { - koef = 0.9f; - } else if (currL > 0.) { - koef = 1.0f; - } - - if (needJ) { - hist16J[CLIP((int)((koef * lab->L[i][j])))]++; //evaluate histogram luminance L # J - } - - if (needQ) { - hist16Q[CLIP((int)(32768.f * sqrt((koef * (lab->L[i][j])) / 32768.f)))]++; //for brightness Q : approximation for Q=wh*sqrt(J/100) J not equal L - } - - sum += koef * lab->L[i][j]; //evaluate mean J to calculate Yb - } - - //mean=(sum/((endh-begh)*width))/327.68f;//for Yb for all image...if one day "pipette" we can adapt Yb for each zone - mean = (sum / ((height) * width)) / 327.68f; //for Yb for all image...if one day "pipette" we can adapt Yb for each zone - - //evaluate lightness, contrast - if (needJ) { - if (!CAMBrightCurveJ) { - CAMBrightCurveJ(65536, 0); - CAMBrightCurveJ.dirty = false; - } - - Ciecam02::curveJ(jli, contra, 1, CAMBrightCurveJ, hist16J); //lightness and contrast J - } - - if (needQ) { - if (!CAMBrightCurveQ) { - CAMBrightCurveQ(65536, 0); - CAMBrightCurveQ.dirty = false; - } - - Ciecam02::curveJ(qbri, qcontra, 1, CAMBrightCurveQ, hist16Q); //brightness and contrast Q - } - } - - // if (settings->viewinggreySc == 0) { //auto - if (params->colorappearance.autoybscen && pwb == 2) {//auto - - if (mean < 15.f) { - yb = 3.0; - } else if (mean < 30.f) { - yb = 5.0; - } else if (mean < 40.f) { - yb = 10.0; - } else if (mean < 45.f) { - yb = 15.0; - } else if (mean < 50.f) { - yb = 18.0; - } else if (mean < 55.f) { - yb = 23.0; - } else if (mean < 60.f) { - yb = 30.0; - } else if (mean < 70.f) { - yb = 40.0; - } else if (mean < 80.f) { - yb = 60.0; - } else if (mean < 90.f) { - yb = 80.0; - } else { - yb = 90.0; - } - } else { - yb = params->colorappearance.ybscen; - } - - if (settings->viewinggreySc == 1) { - yb = 18.0; - } - - int gamu = 0; - bool highlight = params->toneCurve.hrenabled; //Get the value if "highlight reconstruction" is activated - - if (params->colorappearance.gamut) { - gamu = 1; //enabled gamut control - } - - xw = 100.0 * Xw; - yw = 100.0 * Yw; - zw = 100.0 * Zw; - double xw1 = 0., yw1 = 0., zw1 = 0., xw2 = 0., yw2 = 0., zw2 = 0.; - - // settings of WB: scene and viewing - if (params->colorappearance.wbmodel == "RawT") { - xw1 = 96.46; //use RT WB; CAT 02 is used for output device (see prefreneces) - yw1 = 100.0; - zw1 = 82.445; - xw2 = xwd; - yw2 = ywd; - zw2 = zwd; - } else if (params->colorappearance.wbmodel == "RawTCAT02") { - xw1 = xw; // Settings RT WB are used for CAT02 => mix , CAT02 is use for output device (screen: D50 D65, projector: lamp, LED) see preferences - yw1 = yw; - zw1 = zw; - xw2 = xwd; - yw2 = ywd; - zw2 = zwd; - } else if (params->colorappearance.wbmodel == "free") { - xw1 = xws; // free temp and green - yw1 = yws; - zw1 = zws; - xw2 = xwd; - yw2 = ywd; - zw2 = zwd; - } - - double cz, wh, pfl; - Ciecam02::initcam1(gamu, yb, pilot, f, la, xw, yw, zw, n, d, nbb, ncb, cz, aw, wh, pfl, fl, c); - double nj, nbbj, ncbj, czj, awj, flj; - Ciecam02::initcam2(gamu, yb2, pilotout, f2, la2, xw2, yw2, zw2, nj, dj, nbbj, ncbj, czj, awj, flj); - - - - -#ifndef _DEBUG - #pragma omp parallel default(shared) firstprivate(lab,xw1,xw2,yw1,yw2,zw1,zw2,pilot,jli,chr,yb,la,yb2,la2,fl,nc,f,c, height,width,nc2,f2,c2, alg,algepd, gamu, highlight, rstprotection, pW, scale) -#endif - { - //matrix for current working space - TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(params->icm.working); - double wip[3][3] = { - {wiprof[0][0], wiprof[0][1], wiprof[0][2]}, - {wiprof[1][0], wiprof[1][1], wiprof[1][2]}, - {wiprof[2][0], wiprof[2][1], wiprof[2][2]} - }; - -#ifndef _DEBUG - #pragma omp for schedule(dynamic, 10) -#endif - - for (int i = 0; i < height; i++) - -// for (int i=begh; iL[i][j]; - float a = lab->a[i][j]; - float b = lab->b[i][j]; - float x1, y1, z1; - double x, y, z; - double epsil = 0.0001; - //convert Lab => XYZ - Color::Lab2XYZ(L, a, b, x1, y1, z1); - // double J, C, h, Q, M, s, aw, fl, wh; - double J, C, h, Q, M, s; - - double Jpro, Cpro, hpro, Qpro, Mpro, spro; - bool t1L = false; - bool t1B = false; - bool t2B = false; - int c1s = 0; - int c1co = 0; - //double n,nbb,ncb,pfl,cz,d; - x = (double)x1 / 655.35; - y = (double)y1 / 655.35; - z = (double)z1 / 655.35; - //process source==> normal - Ciecam02::xyz2jchqms_ciecam02(J, C, h, - Q, M, s, aw, fl, wh, - x, y, z, - xw1, yw1, zw1, - c, nc, gamu, n, nbb, ncb, pfl, cz, d); - Jpro = J; - Cpro = C; - hpro = h; - Qpro = Q; - Mpro = M; - spro = s; - a_w = aw; - c_ = c; - f_l = fl; - - // we cannot have all algorithms with all chroma curves - if (alg == 1) { - // Lightness saturation - if (Jpro > 99.9f) { - Jpro = 99.9f; - } - - Jpro = (CAMBrightCurveJ[(float)(Jpro * 327.68)]) / 327.68; //ligthness CIECAM02 + contrast - double sres; - double Sp = spro / 100.0; - double parsat = 1.5; //parsat=1.5 =>saturation ; 1.8 => chroma ; 2.5 => colorfullness (personal evaluation) - - if (schr == -100.0) { - schr = -99.8; - } - - Ciecam02::curvecolor(schr, Sp, sres, parsat); - double coe = pow(fl, 0.25); - float dred = 100.f; // in C mode - float protect_red = 80.0f; // in C mode - dred = 100.0 * sqrt((dred * coe) / Qpro); - protect_red = 100.0 * sqrt((protect_red * coe) / Qpro); - int sk = 0; - float ko = 100.f; - Color::skinred(Jpro, hpro, sres, Sp, dred, protect_red, sk, rstprotection, ko, spro); - Qpro = (4.0 / c) * sqrt(Jpro / 100.0) * (aw + 4.0) ; - Cpro = (spro * spro * Qpro) / (10000.0); - } else if (alg == 3 || alg == 0 || alg == 2) { - double coef = 32760. / wh; - - if (alg == 3 || alg == 2) { - if (Qpro * coef > 32767.0f) { - Qpro = (CAMBrightCurveQ[(float)32767.0f]) / coef; //brightness and contrast - } else { - Qpro = (CAMBrightCurveQ[(float)(Qpro * coef)]) / coef; //brightness and contrast - } - } - - double Mp, sres; - double coe = pow(fl, 0.25); - Mp = Mpro / 100.0; - double parsat = 2.5; - - if (mchr == -100.0) { - mchr = -99.8 ; - } - - if (mchr == 100.0) { - mchr = 99.9; - } - - if (alg == 3 || alg == 2) { - Ciecam02::curvecolor(mchr, Mp, sres, parsat); - } else { - Ciecam02::curvecolor(0.0, Mp, sres, parsat); //colorfullness - } - - float dred = 100.f; //in C mode - float protect_red = 80.0f; // in C mode - dred *= coe; //in M mode - protect_red *= coe; //M mode - int sk = 0; - float ko = 100.f; - Color::skinred(Jpro, hpro, sres, Mp, dred, protect_red, sk, rstprotection, ko, Mpro); - Jpro = (100.0 * Qpro * Qpro) / (wh * wh); - Cpro = Mpro / coe; - spro = 100.0 * sqrt(Mpro / Qpro); - - if (alg != 2) { - if (Jpro > 99.9f) { - Jpro = 99.9f; - } - - Jpro = (CAMBrightCurveJ[(float)(Jpro * 327.68f)]) / 327.68f; //ligthness CIECAM02 + contrast - } - - double Cp; - double Sp = spro / 100.0; - parsat = 1.5; - - if (schr == -100.0) { - schr = -99.; - } - - if (schr == 100.0) { - schr = 98.; - } - - if (alg == 3) { - Ciecam02::curvecolor(schr, Sp, sres, parsat); - } else { - Ciecam02::curvecolor(0.0, Sp, sres, parsat); //saturation - } - - dred = 100.f; // in C mode - protect_red = 80.0f; // in C mode - dred = 100.0 * sqrt((dred * coe) / Q); - protect_red = 100.0 * sqrt((protect_red * coe) / Q); - sk = 0; - Color::skinred(Jpro, hpro, sres, Sp, dred, protect_red, sk, rstprotection, ko, spro); - //double Q1; - Qpro = (4.0 / c) * sqrt(Jpro / 100.0) * (aw + 4.0) ; - Cpro = (spro * spro * Qpro) / (10000.0); - Cp = Cpro / 100.0; - parsat = 1.8; //parsat=1.5 =>saturation ; 1.8 => chroma ; 2.5 => colorfullness (personal evaluation : for not) - - if (chr == -100.0) { - chr = -99.8; - } - - if (alg != 2) { - Ciecam02::curvecolor(chr, Cp, sres, parsat); - } else { - Ciecam02::curvecolor(0.0, Cp, sres, parsat); //chroma - } - - dred = 55.f; - protect_red = 30.0f; - sk = 1; - Color::skinred(Jpro, hpro, sres, Cp, dred, protect_red, sk, rstprotection, ko, Cpro); - - if (Jpro < 1. && Cpro > 12.) { - Cpro = 12.; //reduce artifacts by "pseudo gamut control CIECAM" - } else if (Jpro < 2. && Cpro > 15.) { - Cpro = 15.; - } else if (Jpro < 4. && Cpro > 30.) { - Cpro = 30.; - } else if (Jpro < 7. && Cpro > 50.) { - Cpro = 50.; - } - - hpro = hpro + hue; - - if (hpro < 0.0) { - hpro += 360.0; //hue - } - } - - if (hasColCurve1) {//curve 1 with Lightness and Brightness - if (curveMode == ColorAppearanceParams::TcMode::LIGHT) { - /* float Jj=(float) Jpro*327.68; - float Jold=Jj; - const Lightcurve& userColCurve = static_cast(customColCurve1); - userColCurve.Apply(Jj); - Jj=0.7f*(Jj-Jold)+Jold;//divide sensibility - */ - float Jj = (float) Jpro * 327.68f; - float Jold = Jj; - float Jold100 = (float) Jpro; - float redu = 25.f; - float reduc = 1.f; - const Lightcurve& userColCurveJ1 = static_cast(customColCurve1); - userColCurveJ1.Apply(Jj); - - if (Jj > Jold) { - if (Jj < 65535.f) { - if (Jold < 327.68f * redu) { - Jj = 0.3f * (Jj - Jold) + Jold; //divide sensibility - } else { - reduc = LIM((100.f - Jold100) / (100.f - redu), 0.f, 1.f); - Jj = 0.3f * reduc * (Jj - Jold) + Jold; //reduct sensibility in highlights - } - } - } else if (Jj > 10.f) { - Jj = 0.8f * (Jj - Jold) + Jold; - } else if (Jj >= 0.f) { - Jj = 0.90f * (Jj - Jold) + Jold; // not zero ==>artifacts - } - - - Jpro = (double)(Jj / 327.68f); - - if (Jpro < 1.) { - Jpro = 1.; - } - - t1L = true; - } else if (curveMode == ColorAppearanceParams::TcMode::BRIGHT) { - //attention! Brightness curves are open - unlike Lightness or Lab or RGB==> rendering and algorithms will be different - float coef = ((aw + 4.f) * (4.f / c)) / 100.f; - float Qanc = Qpro; - float Qq = (float) Qpro * 327.68f * (1.f / coef); - float Qold100 = (float) Qpro / coef; - - float Qold = Qq; - float redu = 20.f; - float reduc = 1.f; - - const Brightcurve& userColCurveB1 = static_cast(customColCurve1); - userColCurveB1.Apply(Qq); - - if (Qq > Qold) { - if (Qq < 65535.f) { - if (Qold < 327.68f * redu) { - Qq = 0.25f * (Qq - Qold) + Qold; //divide sensibility - } else { - reduc = LIM((100.f - Qold100) / (100.f - redu), 0.f, 1.f); - Qq = 0.25f * reduc * (Qq - Qold) + Qold; //reduct sensibility in highlights - } - } - } else if (Qq > 10.f) { - Qq = 0.5f * (Qq - Qold) + Qold; - } else if (Qq >= 0.f) { - Qq = 0.7f * (Qq - Qold) + Qold; // not zero ==>artifacts - } - - if (Qold == 0.f) { - Qold = 0.001f; - } - - Qpro = Qanc * (Qq / Qold); - Jpro = Jpro * SQR(Qq / Qold); - -// Qpro = (double) (Qq * (coef) / 327.68f); -// Jpro = 100.* (Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0)); - t1B = true; - - if (Jpro < 1.) { - Jpro = 1.; - } - - } - } - - if (hasColCurve2) {//curve 2 with Lightness and Brightness - if (curveMode2 == ColorAppearanceParams::TcMode::LIGHT) { - float Jj = (float) Jpro * 327.68; - float Jold = Jj; - /* - const Lightcurve& userColCurve = static_cast(customColCurve2); - userColCurve.Apply(Jj); - Jj=0.7f*(Jj-Jold)+Jold;//divide sensibility - */ - float Jold100 = (float) Jpro; - float redu = 25.f; - float reduc = 1.f; - const Lightcurve& userColCurveJ2 = static_cast(customColCurve2); - userColCurveJ2.Apply(Jj); - - if (Jj > Jold) { - if (Jj < 65535.f) { - if (Jold < 327.68f * redu) { - Jj = 0.3f * (Jj - Jold) + Jold; //divide sensibility - } else { - reduc = LIM((100.f - Jold100) / (100.f - redu), 0.f, 1.f); - Jj = 0.3f * reduc * (Jj - Jold) + Jold; //reduct sensibility in highlights - } - } - } else if (Jj > 10.f) { - if (!t1L) { - Jj = 0.8f * (Jj - Jold) + Jold; - } else { - Jj = 0.4f * (Jj - Jold) + Jold; - } - } else if (Jj >= 0.f) { - if (!t1L) { - Jj = 0.90f * (Jj - Jold) + Jold; // not zero ==>artifacts - } else { - Jj = 0.5f * (Jj - Jold) + Jold; - } - } - - Jpro = (double)(Jj / 327.68f); - - if (Jpro < 1.) { - Jpro = 1.; - } - - } else if (curveMode2 == ColorAppearanceParams::TcMode::BRIGHT) { // - float Qanc = Qpro; - float coef = ((aw + 4.f) * (4.f / c)) / 100.f; - float Qq = (float) Qpro * 327.68f * (1.f / coef); - float Qold100 = (float) Qpro / coef; - - float Qold = Qq; - float redu = 20.f; - float reduc = 1.f; - - const Brightcurve& userColCurveB2 = static_cast(customColCurve2); - userColCurveB2.Apply(Qq); - - if (Qq > Qold) { - if (Qq < 65535.f) { - if (Qold < 327.68f * redu) { - Qq = 0.25f * (Qq - Qold) + Qold; //divide sensibility - } else { - reduc = LIM((100.f - Qold100) / (100.f - redu), 0.f, 1.f); - Qq = 0.25f * reduc * (Qq - Qold) + Qold; //reduct sensibility in highlights - } - } - } else if (Qq > 10.f) { - Qq = 0.5f * (Qq - Qold) + Qold; - } else if (Qq >= 0.f) { - Qq = 0.7f * (Qq - Qold) + Qold; // not zero ==>artifacts - } - - if (Qold == 0.f) { - Qold = 0.001f; - } - - // Qpro = (float) (Qq * (coef) / 327.68f); - Qpro = Qanc * (Qq / Qold); - Jpro = Jpro * SQR(Qq / Qold); - - // Qpro = (double) (Qq * (coef) / 327.68f); - // Jpro = 100.* (Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0)); - t2B = true; - - if (t1L) { //to workaround the problem if we modify curve1-lightnees after curve2 brightness(the cat that bites its own tail!) in fact it's another type of curve only for this case - coef = 2.f; //adapt Q to J approximation - Qq = (float) Qpro * coef; - Qold = Qq; - const Lightcurve& userColCurveJ1 = static_cast(customColCurve1); - userColCurveJ1.Apply(Qq); - Qq = 0.1f * (Qq - Qold) + Qold; //approximative adaptation - Qpro = (double)(Qq / coef); - Jpro = 100.* (Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0)); - } - - if (Jpro < 1.) { - Jpro = 1.; - } - } - } - - if (hasColCurve3) {//curve 3 with chroma saturation colorfullness - if (curveMode3 == ColorAppearanceParams::CtcMode::CHROMA) { - double parsat = 0.8; //0.68; - double coef = 327.68 / parsat; - float Cc = (float) Cpro * coef; - float Ccold = Cc; - const Chromacurve& userColCurve = static_cast(customColCurve3); - userColCurve.Apply(Cc); - float dred = 55.f; - float protect_red = 30.0f; - float sk = 1; - float ko = 1.f / coef; - Color::skinred(Jpro, hpro, Cc, Ccold, dred, protect_red, sk, rstprotection, ko, Cpro); - - if (Jpro < 1. && Cpro > 12.) { - Cpro = 12.; //reduce artifacts by "pseudo gamut control CIECAM" - } else if (Jpro < 2. && Cpro > 15.) { - Cpro = 15.; - } else if (Jpro < 4. && Cpro > 30.) { - Cpro = 30.; - } else if (Jpro < 7. && Cpro > 50.) { - Cpro = 50.; - } - - // Cpro=Cc/coef; - } else if (curveMode3 == ColorAppearanceParams::CtcMode::SATUR) { // - double parsat = 0.8; //0.6 - double coef = 327.68 / parsat; - float Ss = (float) spro * coef; - float Sold = Ss; - const Saturcurve& userColCurve = static_cast(customColCurve3); - userColCurve.Apply(Ss); - Ss = 0.6f * (Ss - Sold) + Sold; //divide sensibility saturation - double coe = pow(fl, 0.25); - float dred = 100.f; // in C mode - float protect_red = 80.0f; // in C mode - dred = 100.0 * sqrt((dred * coe) / Qpro); - protect_red = 100.0 * sqrt((protect_red * coe) / Qpro); - int sk = 0; - float ko = 1.f / coef; - Color::skinred(Jpro, hpro, Ss, Sold, dred, protect_red, sk, rstprotection, ko, spro); - Qpro = (4.0 / c) * sqrt(Jpro / 100.0) * (aw + 4.0) ; - Cpro = (spro * spro * Qpro) / (10000.0); - c1s = 1; - - } else if (curveMode3 == ColorAppearanceParams::CtcMode::COLORF) { // - double parsat = 0.8; //0.68; - double coef = 327.68 / parsat; - float Mm = (float) Mpro * coef; - float Mold = Mm; - const Colorfcurve& userColCurve = static_cast(customColCurve3); - userColCurve.Apply(Mm); - double coe = pow(fl, 0.25); - float dred = 100.f; //in C mode - float protect_red = 80.0f; // in C mode - dred *= coe; //in M mode - protect_red *= coe; - int sk = 0; - float ko = 1.f / coef; - Color::skinred(Jpro, hpro, Mm, Mold, dred, protect_red, sk, rstprotection, ko, Mpro); - Cpro = Mpro / coe; - - if (Jpro < 1. && Mpro > 12.*coe) { - Mpro = 12.*coe; //reduce artifacts by "pseudo gamut control CIECAM" - } else if (Jpro < 2. && Mpro > 15.*coe) { - Mpro = 15.*coe; - } else if (Jpro < 4. && Mpro > 30.*coe) { - Mpro = 30.*coe; - } else if (Jpro < 7. && Mpro > 50.*coe) { - Mpro = 50.*coe; - } - - - c1co = 1; - } - } - - //to retrieve the correct values of variables - if (t2B && t1B) { - Jpro = (100.0 * Qpro * Qpro) / (wh * wh); // for brightness curve - } - - if (c1s == 1) { - Qpro = (4.0 / c) * sqrt(Jpro / 100.0) * (aw + 4.0) ; //for saturation curve - Cpro = (spro * spro * Qpro) / (10000.0); - } - - if (c1co == 1) { - double coe = pow(fl, 0.25); // for colorfullness curve - Cpro = Mpro / coe; - } - - //retrieve values C,J...s - C = Cpro; - J = Jpro; - Q = Qpro; - M = Mpro; - h = hpro; - s = spro; - - if (params->colorappearance.tonecie || settings->autocielab) { //use pointer for tonemapping with CIECAM and also sharpening , defringe, contrast detail - // if(params->colorappearance.tonecie || params->colorappearance.sharpcie){//use pointer for tonemapping with CIECAM and also sharpening , defringe, contrast detail - float Qred = (4.0 / c) * (aw + 4.0); //estimate Q max if J=100.0 - ncie->Q_p[i][j] = (float)Q + epsil; //epsil to avoid Q=0 - ncie->M_p[i][j] = (float)M + epsil; - ncie->J_p[i][j] = (float)J + epsil; - ncie->h_p[i][j] = (float)h; - ncie->C_p[i][j] = (float)C + epsil; - // ncie->s_p[i][j]=(float)s; - ncie->sh_p[i][j] = (float) 32768.* ((4.0 / c) * sqrt(J / 100.0) * (aw + 4.0)) / Qred ; - - // ncie->ch_p[i][j]=(float) 327.68*C; - if (ncie->Q_p[i][j] < minQ) { - minQ = ncie->Q_p[i][j]; //minima - } - - if (ncie->Q_p[i][j] > maxQ) { - maxQ = ncie->Q_p[i][j]; //maxima - } - } - - if (!params->colorappearance.tonecie || !settings->autocielab || !params->epd.enabled) { - -// if(!params->epd.enabled || !params->colorappearance.tonecie || !settings->autocielab){ - // if(!params->epd.enabled || !params->colorappearance.tonecie || !params->colorappearance.sharpcie){ - double brli = 327.; - double chsacol = 327.; - int libr = 0; - int colch = 0; - - if (curveMode == ColorAppearanceParams::TcMode::BRIGHT) { - brli = 70.0; - libr = 1; - } else if (curveMode == ColorAppearanceParams::TcMode::LIGHT) { - brli = 327.; - libr = 0; - } - - if (curveMode3 == ColorAppearanceParams::CtcMode::CHROMA) { - chsacol = 400.;//327.; - colch = 0; - } else if (curveMode3 == ColorAppearanceParams::CtcMode::SATUR) { - chsacol = 450.0; - colch = 1; - } else if (curveMode3 == ColorAppearanceParams::CtcMode::COLORF) { - chsacol = 400.;//327.0; - colch = 2; - } - - if (ciedata) { - // Data for J Q M s and C histograms - //update histogram - jp = true; - - if (pW != 1) { //only with improccoordinator - int posl; - - if (libr == 1) { - posl = CLIP((int)(Q * brli)); //40.0 to 100.0 approximative factor for Q - 327 for J - } else { /*if(libr == 0)*/ - posl = CLIP((int)(J * brli)); //327 for J - } - - hist16JCAM[posl]++; - } - - chropC = true; - - if (pW != 1) { //only with improccoordinator - int posc; - - if (colch == 0) { - posc = CLIP((int)(C * chsacol)); //450.0 approximative factor for s 320 for M - } else if (colch == 1) { - posc = CLIP((int)(s * chsacol)); - } else { /*if(colch == 2)*/ - posc = CLIP((int)(M * chsacol)); - } - - hist16_CCAM[posc]++; - } - } - - double xx, yy, zz; - //double nj, nbbj, ncbj, flj, czj, dj, awj; - //process normal==> viewing - Ciecam02::jch2xyz_ciecam02(xx, yy, zz, - J, C, h, - xw2, yw2, zw2, - c2, nc2, gamu, nj, nbbj, ncbj, flj, czj, dj, awj); - x = (float)xx * 655.35; - y = (float)yy * 655.35; - z = (float)zz * 655.35; - float Ll, aa, bb; - //convert xyz=>lab - Color::XYZ2Lab(x, y, z, Ll, aa, bb); - lab->L[i][j] = Ll; - lab->a[i][j] = aa; - lab->b[i][j] = bb; - - // gamut control in Lab mode; I must study how to do with cIECAM only - if (gamu == 1) { - float R, G, B; - float HH, Lprov1, Chprov1; - Lprov1 = lab->L[i][j] / 327.68f; - Chprov1 = sqrt(SQR(lab->a[i][j] / 327.68f) + SQR(lab->b[i][j] / 327.68f)); - HH = atan2(lab->b[i][j], lab->a[i][j]); - -#ifdef _DEBUG - bool neg = false; - bool more_rgb = false; - //gamut control : Lab values are in gamut - Color::gamutLchonly(HH, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f, neg, more_rgb); -#else - //gamut control : Lab values are in gamut - Color::gamutLchonly(HH, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f); -#endif - - lab->L[i][j] = Lprov1 * 327.68f; - lab->a[i][j] = 327.68f * Chprov1 * cos(HH); - lab->b[i][j] = 327.68f * Chprov1 * sin(HH); - - } - } - } - } - - // End of parallelization - if (!params->epd.enabled || !params->colorappearance.tonecie || !settings->autocielab) { //normal -//if(!params->epd.enabled || !params->colorappearance.tonecie || !params->colorappearance.sharpcie){//normal - - if (ciedata) { - //update histogram J - if (pW != 1) { //only with improccoordinator - for (int i = 0; i < 32768; i++) { // - if (jp) { - float hval = dLcurve[i]; - int hi = (int)(255.0 * CLIPD(hval)); // - histLCAM[hi] += hist16JCAM[i] ; - } - } - } - - if (pW != 1) { //only with improccoordinator - for (int i = 0; i < 48000; i++) { // - if (chropC) { - float hvalc = dCcurve[i]; - int hic = (int)(255.0 * CLIPD(hvalc)); // - histCCAM[hic] += hist16_CCAM[i] ; - } - } - } - } - } - -#ifdef _DEBUG - - if (settings->verbose) { - t2e.set(); - printf("CIECAM02 performed in %d usec:\n", t2e.etime(t1e)); - // printf("minc=%f maxc=%f minj=%f maxj=%f\n",minc,maxc,minj,maxj); - } - -#endif - - if (settings->autocielab) { -//if(params->colorappearance.sharpcie) { - -//all this treatments reduce artifacts, but can lead to slightly different results - if (params->defringe.enabled) if (execsharp) { - ImProcFunctions::defringecam(ncie); // - } - -//if(params->dirpyrequalizer.enabled) if(execsharp) { - if (params->dirpyrequalizer.enabled && params->dirpyrequalizer.gamutlab && rtt) { //remove artifacts by gaussian blur - skin control, but not for thumbs - constexpr float artifact = 4.f; - constexpr float chrom = 50.f; - const bool hotbad = params->dirpyrequalizer.skinprotect != 0.0; - ImProcFunctions::badpixcam (ncie, artifact / scale, 5, 2, chrom, hotbad); //enabled remove artifacts for cbDL - } - - if (params->colorappearance.badpixsl > 0 && execsharp) { - int mode = params->colorappearance.badpixsl; - ImProcFunctions::badpixcam (ncie, 3.4, 5, mode, 0, true);//for bad pixels CIECAM - } - - if (params->sharpenMicro.enabled)if (execsharp) { - ImProcFunctions::MLmicrocontrastcam(ncie); - } - - if (params->sharpening.enabled) - if (execsharp) { - float **buffer = lab->L; // We can use the L-buffer from lab as buffer to save some memory - ImProcFunctions::sharpeningcam(ncie, buffer); // sharpening adapted to CIECAM - } - -//if(params->dirpyrequalizer.enabled) if(execsharp) { - if (params->dirpyrequalizer.enabled /*&& (execsharp)*/) { - -// if (params->dirpyrequalizer.algo=="FI") choice=0; -// else if(params->dirpyrequalizer.algo=="LA") choice=1; - if (rtt == 1) { - float b_l = static_cast(params->dirpyrequalizer.hueskin.getBottomLeft()) / 100.0f; - float t_l = static_cast(params->dirpyrequalizer.hueskin.getTopLeft()) / 100.0f; - float t_r = static_cast(params->dirpyrequalizer.hueskin.getTopRight()) / 100.0f; - dirpyr_equalizercam(ncie, ncie->sh_p, ncie->sh_p, ncie->W, ncie->H, ncie->h_p, ncie->C_p, params->dirpyrequalizer.mult, params->dirpyrequalizer.threshold, params->dirpyrequalizer.skinprotect, true, b_l, t_l, t_r, scale); //contrast by detail adapted to CIECAM - } - } - - float Qredi = (4.0 / c_) * (a_w + 4.0); - float co_e = (pow(f_l, 0.25f)); - -#ifndef _DEBUG - #pragma omp parallel default(shared) firstprivate(height,width, Qredi,a_w,c_) -#endif - { -#ifndef _DEBUG - #pragma omp for schedule(dynamic, 10) -#endif - - for (int i = 0; i < height; i++) // update CieImages with new values after sharpening, defringe, contrast by detail level - for (int j = 0; j < width; j++) { - float interm = Qredi * ncie->sh_p[i][j] / (32768.f); - ncie->J_p[i][j] = 100.0 * interm * interm / ((a_w + 4.) * (a_w + 4.) * (4. / c_) * (4. / c_)); - ncie->Q_p[i][j] = (4.0 / c_) * (a_w + 4.0) * sqrt(ncie->J_p[i][j] / 100.f); - ncie->M_p[i][j] = ncie->C_p[i][j] * co_e; - } - } - } - - if ((params->colorappearance.tonecie || (params->colorappearance.tonecie && params->epd.enabled)) || (params->sharpening.enabled && settings->autocielab) - || (params->dirpyrequalizer.enabled && settings->autocielab) || (params->defringe.enabled && settings->autocielab) || (params->sharpenMicro.enabled && settings->autocielab) - || (params->colorappearance.badpixsl > 0 && settings->autocielab)) { - - if (params->epd.enabled && params->colorappearance.tonecie && algepd) { - ImProcFunctions::EPDToneMapCIE(ncie, a_w, c_, width, height, minQ, maxQ, Iterates, scale); - } - - //EPDToneMapCIE adapted to CIECAM - - -#ifndef _DEBUG - #pragma omp parallel default(shared) firstprivate(lab,xw2,yw2,zw2,chr,yb,la2,yb2, height,width, nc2,f2,c2, gamu, highlight,pW) -#endif - { - TMatrix wiprofa = ICCStore::getInstance()->workingSpaceInverseMatrix(params->icm.working); - double wipa[3][3] = { - {wiprofa[0][0], wiprofa[0][1], wiprofa[0][2]}, - {wiprofa[1][0], wiprofa[1][1], wiprofa[1][2]}, - {wiprofa[2][0], wiprofa[2][1], wiprofa[2][2]} - }; - - -#ifndef _DEBUG - #pragma omp for schedule(dynamic, 10) -#endif - - for (int i = 0; i < height; i++) // update CIECAM with new values after tone-mapping - - // for (int i=begh; iepd.enabled) ncie->J_p[i][j]=(100.0* ncie->Q_p[i][j]*ncie->Q_p[i][j])/(w_h*w_h); - if (params->epd.enabled) { - ncie->J_p[i][j] = (100.0 * ncie->Q_p[i][j] * ncie->Q_p[i][j]) / SQR((4. / c) * (aw + 4.)); - } - - ncie->C_p[i][j] = (ncie->M_p[i][j]) / co_e; - //show histogram in CIECAM mode (Q,J, M,s,C) - double brli = 327.; - double chsacol = 327.; - int libr = 0; - int colch = 0; - - if (curveMode == ColorAppearanceParams::TcMode::BRIGHT) { - brli = 70.0; - libr = 1; - } else if (curveMode == ColorAppearanceParams::TcMode::LIGHT) { - brli = 327.; - libr = 0; - } - - if (curveMode3 == ColorAppearanceParams::CtcMode::CHROMA) { - chsacol = 400.;//327.; - colch = 0; - } else if (curveMode3 == ColorAppearanceParams::CtcMode::SATUR) { - chsacol = 450.0; - colch = 1; - } else if (curveMode3 == ColorAppearanceParams::CtcMode::COLORF) { - chsacol = 400.;//327.0; - colch = 2; - } - - if (ciedata) { - // Data for J Q M s and C histograms - //update histogram - jp = true; - - if (pW != 1) { //only with improccoordinator - int posl; - - if (libr == 1) { - posl = CLIP((int)(ncie->Q_p[i][j] * brli)); //40.0 to 100.0 approximative factor for Q - 327 for J - } else { /*if(libr == 0)*/ - posl = CLIP((int)(ncie->J_p[i][j] * brli)); //327 for J - } - - hist16JCAM[posl]++; - } - - chropC = true; - - if (pW != 1) { //only with improccoordinator - int posc; - - if (colch == 0) { - posc = CLIP((int)(ncie->C_p[i][j] * chsacol)); //450.0 approximative factor for s 320 for M - } else if (colch == 1) { - float sa_t = 100.f * sqrt(ncie->C_p[i][j] / ncie->Q_p[i][j]); //Q_p always > 0 - posc = CLIP((int)(sa_t * chsacol)); - } else { /*if(colch == 2)*/ - posc = CLIP((int)(ncie->M_p[i][j] * chsacol)); - } - - hist16_CCAM[posc]++; - } - } - - //end histograms - // double nd, nbbd, ncbd, fld, czd, dd, awd; - Ciecam02::jch2xyz_ciecam02(xx, yy, zz, - ncie->J_p[i][j], ncie->C_p[i][j], ncie->h_p[i][j], - xw2, yw2, zw2, - c2, nc2, gamu, nj, nbbj, ncbj, flj, czj, dj, awj); - x = (float)xx * 655.35; - y = (float)yy * 655.35; - z = (float)zz * 655.35; - float Ll, aa, bb; - //convert xyz=>lab - Color::XYZ2Lab(x, y, z, Ll, aa, bb); - lab->L[i][j] = Ll; - lab->a[i][j] = aa; - lab->b[i][j] = bb; - - if (gamu == 1) { - float R, G, B; - float HH, Lprov1, Chprov1; - Lprov1 = lab->L[i][j] / 327.68f; - Chprov1 = sqrt(SQR(lab->a[i][j] / 327.68f) + SQR(lab->b[i][j] / 327.68f)); - HH = atan2(lab->b[i][j], lab->a[i][j]); - -#ifdef _DEBUG - bool neg = false; - bool more_rgb = false; - //gamut control : Lab values are in gamut - Color::gamutLchonly(HH, Lprov1, Chprov1, R, G, B, wipa, highlight, 0.15f, 0.96f, neg, more_rgb); -#else - //gamut control : Lab values are in gamut - Color::gamutLchonly(HH, Lprov1, Chprov1, R, G, B, wipa, highlight, 0.15f, 0.96f); -#endif - - lab->L[i][j] = Lprov1 * 327.68f; - lab->a[i][j] = 327.68f * Chprov1 * cos(HH); - lab->b[i][j] = 327.68f * Chprov1 * sin(HH); - } - } - - - } - - //end parallelization - //show CIECAM histograms - if (ciedata) { - //update histogram J and Q - if (pW != 1) { //only with improccoordinator - for (int i = 0; i < 32768; i++) { // - if (jp) { - float hval = dLcurve[i]; - int hi = (int)(255.0 * CLIPD(hval)); // - histLCAM[hi] += hist16JCAM[i] ; - } - } - } - - //update color histogram M,s,C - if (pW != 1) { //only with improccoordinator - for (int i = 0; i < 48000; i++) { // - if (chropC) { - float hvalc = dCcurve[i]; - int hic = (int)(255.0 * CLIPD(hvalc)); // - histCCAM[hic] += hist16_CCAM[i] ; - } - } - } - } - - } - - } -} -//end CIECAM - - -// Copyright (c) 2012 Jacques Desmis void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb, LabImage* lab, const ProcParams* params, const ColorAppearance & customColCurve1, const ColorAppearance & customColCurve2, const ColorAppearance & customColCurve3, LUTu & histLCAM, LUTu & histCCAM, LUTf & CAMBrightCurveJ, LUTf & CAMBrightCurveQ, float &mean, int Iterates, int scale, bool execsharp, float &d, float &dj, float &yb, int rtt) @@ -3775,19 +2488,35 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer dcpProf->step2ApplyTile(rtemp, gtemp, btemp, tW - jstart, tH - istart, TS, asIn); } - for (int i = istart, ti = 0; i < tH; i++, ti++) { - for (int j = jstart, tj = 0; j < tW; j++, tj++) { - // clip out of gamut colors, without distorting colour too bad - float r = std::max(rtemp[ti * TS + tj], 0.f); - float g = std::max(gtemp[ti * TS + tj], 0.f); - float b = std::max(btemp[ti * TS + tj], 0.f); + if (params->toneCurve.clampOOG) { + for (int i = istart, ti = 0; i < tH; i++, ti++) { + for (int j = jstart, tj = 0; j < tW; j++, tj++) { + // clip out of gamut colors, without distorting colour too bad + float r = std::max(rtemp[ti * TS + tj], 0.f); + float g = std::max(gtemp[ti * TS + tj], 0.f); + float b = std::max(btemp[ti * TS + tj], 0.f); - if (max(r, g, b) > MAXVALF && min(r, g, b) < MAXVALF) { - filmlike_clip(&r, &g, &b); + if (OOG(r) || OOG(g) || OOG(b)) { + filmlike_clip(&r, &g, &b); + } + rtemp[ti * TS + tj] = r; + gtemp[ti * TS + tj] = g; + btemp[ti * TS + tj] = b; + } + } + } else { + for (int i = istart, ti = 0; i < tH; i++, ti++) { + for (int j = jstart, tj = 0; j < tW; j++, tj++) { + // clip out of gamut colors, without distorting colour too bad + float r = std::max(rtemp[ti * TS + tj], 0.f); + float g = std::max(gtemp[ti * TS + tj], 0.f); + float b = std::max(btemp[ti * TS + tj], 0.f); + + if (OOG(max(r, g, b)) && !OOG(min(r, g, b))) { + filmlike_clip(&r, &g, &b); + } + setUnlessOOG(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], r, g, b); } - rtemp[ti * TS + tj] = r; - gtemp[ti * TS + tj] = g; - btemp[ti * TS + tj] = b; } } @@ -3803,15 +2532,13 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer int y = CLIP (lumimulf[0] * Color::gamma2curve[rtemp[ti * TS + tj]] + lumimulf[1] * Color::gamma2curve[gtemp[ti * TS + tj]] + lumimulf[2] * Color::gamma2curve[btemp[ti * TS + tj]]); histToneCurveThr[y >> histToneCurveCompression]++; - setUnlessOOG(rtemp[ti * TS + tj], r); - setUnlessOOG(gtemp[ti * TS + tj], g); - setUnlessOOG(btemp[ti * TS + tj], b); + setUnlessOOG(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], r, g, b); } } } else { - vfloat tmpr; - vfloat tmpg; - vfloat tmpb; + float tmpr[4] ALIGNED16; + float tmpg[4] ALIGNED16; + float tmpb[4] ALIGNED16; for (int i = istart, ti = 0; i < tH; i++, ti++) { int j = jstart, tj = 0; @@ -3823,9 +2550,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer STVF(tmpg[0], tonecurve(LVF(gtemp[ti * TS + tj]))); STVF(tmpb[0], tonecurve(LVF(btemp[ti * TS + tj]))); for (int k = 0; k < 4; ++k) { - setUnlessOOG(rtemp[ti * TS + tj + k], tmpr[k]); - setUnlessOOG(gtemp[ti * TS + tj + k], tmpg[k]); - setUnlessOOG(btemp[ti * TS + tj + k], tmpb[k]); + setUnlessOOG(rtemp[ti * TS + tj + k], gtemp[ti * TS + tj + k], btemp[ti * TS + tj + k], tmpr[k], tmpg[k], tmpb[k]); } } @@ -3833,9 +2558,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer for (; j < tW; j++, tj++) { //brightness/contrast - setUnlessOOG(rtemp[ti * TS + tj], tonecurve[rtemp[ti * TS + tj]]); - setUnlessOOG(gtemp[ti * TS + tj], tonecurve[gtemp[ti * TS + tj]]); - setUnlessOOG(btemp[ti * TS + tj], tonecurve[btemp[ti * TS + tj]]); + setUnlessOOG(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], tonecurve[rtemp[ti * TS + tj]], tonecurve[gtemp[ti * TS + tj]], tonecurve[btemp[ti * TS + tj]]); } } } @@ -3973,9 +2696,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer Color::xyz2rgb (x_, y_, z_, r, g, b, wip); } - setUnlessOOG(rtemp[ti * TS + tj], r); - setUnlessOOG(gtemp[ti * TS + tj], g); - setUnlessOOG(btemp[ti * TS + tj], b); + setUnlessOOG(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], r, g, b); } } } @@ -4126,9 +2847,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer bo *= preserv; } - setUnlessOOG(rtemp[ti * TS + tj], CLIP(ro)); - setUnlessOOG(gtemp[ti * TS + tj], CLIP(go)); - setUnlessOOG(btemp[ti * TS + tj], CLIP(bo)); + setUnlessOOG(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], CLIP(ro), CLIP(go), CLIP(bo)); } } } @@ -4182,11 +2901,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer float b = btemp[ti * TS + tj]; float ro, go, bo; labtoning(r, g, b, ro, go, bo, algm, metchrom, twoc, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, clToningcurve, cl2Toningcurve, iplow, iphigh, wp, wip); - if (!OOG(rtemp[ti * TS + tj]) || !OOG(gtemp[ti * TS + tj]) || !OOG(btemp[ti * TS + tj])) { - rtemp[ti * TS + tj] = ro; - gtemp[ti * TS + tj] = go; - btemp[ti * TS + tj] = bo; - } + setUnlessOOG(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], ro, go, bo); } } } @@ -4523,11 +3238,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer } for (int j = jstart, tj = 0; j < tW; j++, tj++) { - if (!OOG(rtemp[ti * TS + tj]) || !OOG(gtemp[ti * TS + tj]) || !OOG(btemp[ti * TS + tj])) { - rtemp[ti * TS + tj] = clutr[tj]; - gtemp[ti * TS + tj] = clutg[tj]; - btemp[ti * TS + tj] = clutb[tj]; - } + setUnlessOOG(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], clutr[tj], clutg[tj], clutb[tj]); } } } @@ -4862,12 +3573,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer float b = tmpImage->b(i, j); float ro, bo, go; labtoning(r, g, b, ro, go, bo, algm, metchrom, twoc, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, clToningcurve, cl2Toningcurve, iplow, iphigh, wp, wip); - if (!OOG(tmpImage->r(i, j)) || !OOG(tmpImage->g(i, j)) || !OOG(tmpImage->b(i, j))) { - tmpImage->r (i, j) = ro; - tmpImage->g (i, j) = go; - tmpImage->b (i, j) = bo; - } - + setUnlessOOG(tmpImage->r(i, j), tmpImage->g(i, j), tmpImage->b(i, j), ro, go, bo); } } } @@ -5378,9 +4084,7 @@ void ImProcFunctions::toning2col (float r, float g, float b, float &ro, float &g preserv = lumbefore / lumafter; } - setUnlessOOG(ro, CLIP(r * preserv)); - setUnlessOOG(go, CLIP(g * preserv)); - setUnlessOOG(bo, CLIP(b * preserv)); + setUnlessOOG(ro, go, bo, CLIP(r * preserv), CLIP(g * preserv), CLIP(b * preserv)); } /** diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index ff914ca2c..cd2d96b4d 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -244,9 +244,6 @@ public: void ciecam_02float(CieImage* ncie, float adap, int pW, int pwb, LabImage* lab, const ProcParams* params, const ColorAppearance & customColCurve1, const ColorAppearance & customColCurve, const ColorAppearance & customColCurve3, LUTu &histLCAM, LUTu &histCCAM, LUTf & CAMBrightCurveJ, LUTf & CAMBrightCurveQ, float &mean, int Iterates, int scale, bool execsharp, float &d, float &dj, float &yb, int rtt); - void ciecam_02(CieImage* ncie, double adap, int pW, int pwb, LabImage* lab, const ProcParams* params, - const ColorAppearance & customColCurve1, const ColorAppearance & customColCurve, const ColorAppearance & customColCurve3, - LUTu &histLCAM, LUTu &histCCAM, LUTf & CAMBrightCurveJ, LUTf & CAMBrightCurveQ, float &mean, int Iterates, int scale, bool execsharp, double &d, double &dj, int rtt); void chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, LabImage* lold, LabImage* lnew, LUTf &acurve, LUTf &bcurve, LUTf & satcurve, LUTf & satclcurve, LUTf &clcurve, LUTf &curve, bool utili, bool autili, bool butili, bool ccutili, bool cclutili, bool clcutili, LUTu &histCCurve, LUTu &histLurve); void vibrance(LabImage* lab); //Jacques' vibrance // void colorCurve (LabImage* lold, LabImage* lnew); diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index fbfd34ed6..248f70cff 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -106,7 +106,7 @@ void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, i for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { - tmpI[i][j] = luminance[i][j]; + tmpI[i][j] = max(luminance[i][j], 0.f); } } @@ -122,6 +122,14 @@ void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, i if (!needdamp) { // apply gaussian blur and divide luminance by result of gaussian blur gaussianBlur (tmpI, tmp, W, H, sigma, nullptr, GAUSS_DIV, luminance); +#ifdef _OPENMP + #pragma omp for +#endif + for (int i = 0; i < H; i++) { + for(int j = 0; j < W; j++) { + tmp[i][j] = max(tmp[i][j], 0.f); + } + } } else { // apply gaussian blur + damping gaussianBlur (tmpI, tmp, W, H, sigma); diff --git a/rtengine/ipvibrance.cc b/rtengine/ipvibrance.cc index d7fb0da97..26141423c 100644 --- a/rtengine/ipvibrance.cc +++ b/rtengine/ipvibrance.cc @@ -19,7 +19,6 @@ */ #include "rt_math.h" -//#include #include "rtengine.h" #include "improcfun.h" @@ -28,7 +27,7 @@ #include "../rtgui/thresholdselector.h" #include "curves.h" #include "color.h" - +#include "StopWatch.h" #ifdef _OPENMP #include #endif @@ -41,8 +40,6 @@ namespace rtengine using namespace procparams; -#define SAT(a,b,c) ((float)max(a,b,c)-(float)min(a,b,c))/(float)max(a,b,c) - extern const Settings* settings; void fillCurveArrayVib (DiagonalCurve* diagCurve, LUTf &outCurve) @@ -75,6 +72,7 @@ void ImProcFunctions::vibrance (LabImage* lab) if (!params->vibrance.enabled) { return; } + BENCHFUN // int skip=1; //scale==1 ? 1 : 16; bool skinCurveIsSet = false; @@ -101,42 +99,23 @@ void ImProcFunctions::vibrance (LabImage* lab) const int width = lab->W; const int height = lab->H; -#ifdef _DEBUG - MyTime t1e, t2e; - t1e.set(); - int negat = 0, moreRGB = 0, negsat = 0, moresat = 0; -#endif - // skin hue curve // I use diagonal because I think it's better - LUTf skin_curve (65536, 0); - if (skinCurveIsSet) { - fillCurveArrayVib (dcurve, skin_curve); - } - - if (dcurve) { - delete dcurve; - dcurve = nullptr; - } - - -// skin_curve.dump("skin_curve"); - - const float chromaPastel = float (params->vibrance.pastels) / 100.0f; - const float chromaSatur = float (params->vibrance.saturated) / 100.0f; - const float p00 = 0.07f; - const float limitpastelsatur = (static_cast(params->vibrance.psthreshold.getTopLeft()) / 100.0f) * (1.0f - p00) + p00; - const float maxdp = (limitpastelsatur - p00) / 4.0f; - const float maxds = (1.0 - limitpastelsatur) / 4.0f; + const float chromaPastel = params->vibrance.pastels / 100.f; + const float chromaSatur = params->vibrance.saturated / 100.f; + constexpr float p00 = 0.07f; + const float limitpastelsatur = (static_cast(params->vibrance.psthreshold.getTopLeft()) / 100.f) * (1.f - p00) + p00; + const float maxdp = (limitpastelsatur - p00) / 4.f; + const float maxds = (1.f - limitpastelsatur) / 4.f; const float p0 = p00 + maxdp; - const float p1 = p00 + 2.0f * maxdp; - const float p2 = p00 + 3.0f * maxdp; + const float p1 = p00 + 2.f * maxdp; + const float p2 = p00 + 3.f * maxdp; const float s0 = limitpastelsatur + maxds; - const float s1 = limitpastelsatur + 2.0f * maxds; - const float s2 = limitpastelsatur + 3.0f * maxds; - const float transitionweighting = static_cast(params->vibrance.psthreshold.getBottomLeft()) / 100.0f; - float chromamean = 0.0f; + const float s1 = limitpastelsatur + 2.f * maxds; + const float s2 = limitpastelsatur + 3.f * maxds; + const float transitionweighting = static_cast(params->vibrance.psthreshold.getBottomLeft()) / 100.f; + float chromamean = 0.f; if (chromaPastel != chromaSatur) { //if sliders pastels and saturated are different: transition with a double linear interpolation: between p2 and limitpastelsatur, and between limitpastelsatur and s0 @@ -144,9 +123,9 @@ void ImProcFunctions::vibrance (LabImage* lab) chromamean = maxdp * (chromaSatur - chromaPastel) / (s0 - p2) + chromaPastel; // move chromaMean up or down depending on transitionCtrl - if (transitionweighting > 0.0f) { + if (transitionweighting > 0.f) { chromamean = (chromaSatur - chromamean) * transitionweighting + chromamean; - } else if (transitionweighting < 0.0f) { + } else if (transitionweighting < 0.f) { chromamean = (chromamean - chromaPastel) * transitionweighting + chromamean; } } @@ -157,13 +136,26 @@ void ImProcFunctions::vibrance (LabImage* lab) const float chromaSatur_a = (chromaSatur - chromamean) / (s0 - limitpastelsatur); const float chromaSatur_b = chromaSatur - chromaSatur_a * s0; - const float dhue = 0.15f; //hue transition - const float dchr = 20.0f; //chroma transition - const float skbeg = -0.05f; //begin hue skin - const float skend = 1.60f; //end hue skin - const float xx = 0.5f; //soft : between 0.3 and 1.0 - const float ask = 65535.0f / (skend - skbeg); - const float bsk = -skbeg * ask; + constexpr float dhue = 0.15f; //hue transition + constexpr float dchr = 20.f; //chroma transition + constexpr float skbeg = -0.05f; //begin hue skin + constexpr float skend = 1.60f; //end hue skin + constexpr float xx = 0.5f; //soft : between 0.3 and 1.0 + constexpr float ask = 65535.f / (skend - skbeg); + constexpr float bsk0 = -skbeg; + constexpr float bsk = -skbeg * ask; + + LUTf skin_curve (65536, 0); + + if (skinCurveIsSet) { + fillCurveArrayVib (dcurve, skin_curve); + skin_curve /= ask; + } + + if (dcurve) { + delete dcurve; + dcurve = nullptr; + } const bool highlight = params->toneCurve.hrenabled;//Get the value if "highlight reconstruction" is activated @@ -172,139 +164,118 @@ void ImProcFunctions::vibrance (LabImage* lab) TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix (params->icm.working); //inverse matrix user select - const double wip[3][3] = { - {wiprof[0][0], wiprof[0][1], wiprof[0][2]}, - {wiprof[1][0], wiprof[1][1], wiprof[1][2]}, - {wiprof[2][0], wiprof[2][1], wiprof[2][2]} + const float wip[3][3] = { + {static_cast(wiprof[0][0]), static_cast(wiprof[0][1]), static_cast(wiprof[0][2])}, + {static_cast(wiprof[1][0]), static_cast(wiprof[1][1]), static_cast(wiprof[1][2])}, + {static_cast(wiprof[2][0]), static_cast(wiprof[2][1]), static_cast(wiprof[2][2])} }; -#ifdef _DEBUG - MunsellDebugInfo* MunsDebugInfo = nullptr; - - if (avoidcolorshift) { - MunsDebugInfo = new MunsellDebugInfo(); + if (settings->verbose) { + printf ("vibrance: p0=%1.2f p1=%1.2f p2=%1.2f s0=%1.2f s1=%1.2f s2=%1.2f\n", p0, p1, p2, s0, s1, s2); + printf (" pastel=%f satur=%f limit= %1.2f chromamean=%0.5f\n", 1.0f + chromaPastel, 1.0f + chromaSatur, limitpastelsatur, chromamean); } - #pragma omp parallel default(shared) firstprivate(lab, MunsDebugInfo) reduction(+: negat, moreRGB, negsat, moresat) if (multiThread) -#else - #pragma omp parallel default(shared) if (multiThread) -#endif + #pragma omp parallel if (multiThread) { - float sathue[5], sathue2[4]; // adjust sat in function of hue - - /* - // Fitting limitpastelsatur into the real 0.07->1.0 range - // limitpastelsatur = limitpastelsatur*(1.0f-p00) + p00; - float p0,p1,p2;//adapt limit of pyramid to psThreshold - float s0,s1,s2; - */ - -#ifdef _OPENMP - - if (settings->verbose && omp_get_thread_num() == 0) { -#else - - if (settings->verbose) { +#ifdef __SSE2__ + float HHbuffer[width] ALIGNED16; + float CCbuffer[width] ALIGNED16; #endif - printf ("vibrance: p0=%1.2f p1=%1.2f p2=%1.2f s0=%1.2f s1=%1.2f s2=%1.2f\n", p0, p1, p2, s0, s1, s2); - printf (" pastel=%f satur=%f limit= %1.2f chromamean=%0.5f\n", 1.0f + chromaPastel, 1.0f + chromaSatur, limitpastelsatur, chromamean); - } + float sathue[5], sathue2[4]; // adjust sat in function of hue #pragma omp for schedule(dynamic, 16) - for (int i = 0; i < height; i++) + for (int i = 0; i < height; i++) { +#ifdef __SSE2__ + // vectorized per row calculation of HH and CC + vfloat c327d68v = F2V(327.68f); + int k = 0; + for (; k < width - 3; k += 4) { + vfloat av = LVFU(lab->a[i][k]); + vfloat bv = LVFU(lab->b[i][k]); + STVF(HHbuffer[k], xatan2f(bv, av)); + STVF(CCbuffer[k], vsqrtf(SQRV(av) + SQRV(bv)) / c327d68v); + } + for (; k < width; k++) { + HHbuffer[k] = xatan2f (lab->b[i][k], lab->a[i][k]); + CCbuffer[k] = sqrt (SQR (lab->a[i][k]) + SQR (lab->b[i][k])) / 327.68f; + } +#endif for (int j = 0; j < width; j++) { float LL = lab->L[i][j] / 327.68f; - float CC = sqrt (SQR (lab->a[i][j]) + SQR (lab->b[i][j])) / 327.68f; +#ifdef __SSE2__ + float HH = HHbuffer[j]; + float CC = CCbuffer[j]; +#else float HH = xatan2f (lab->b[i][j], lab->a[i][j]); - - float satredu = 1.0f; //reduct sat in function of skin - - if (protectskins) { - Color::SkinSat (LL, HH, CC, satredu);// for skin colors - } + float CC = sqrt (SQR (lab->a[i][j]) + SQR (lab->b[i][j])) / 327.68f; +#endif // here we work on Chromaticity and Hue // variation of Chromaticity ==> saturation via RGB // Munsell correction, then conversion to Lab float Lprov = LL; float Chprov = CC; - float R, G, B; float2 sincosval; - if (CC == 0.0f) { + if (CC == 0.f) { sincosval.y = 1.f; - sincosval.x = 0.0f; + sincosval.x = 0.f; } else { sincosval.y = lab->a[i][j] / (CC * 327.68f); sincosval.x = lab->b[i][j] / (CC * 327.68f); } -#ifdef _DEBUG - bool neg = false; - bool more_rgb = false; //gamut control : Lab values are in gamut - Color::gamutLchonly (HH, sincosval, Lprov, Chprov, R, G, B, wip, highlight, 0.15f, 0.98f, neg, more_rgb); + float saturation; + Color::gamutLchonly(HH, sincosval, Lprov, Chprov, saturation, wip, highlight, 0.15f, 0.98f); - if (neg) { - negat++; - } + if (Chprov > 6.f) { + float satredu = 1.f; //reduct sat in function of skin - if (more_rgb) { - moreRGB++; - } + if (protectskins) { + Color::SkinSat (LL, HH, CC, satredu);// for skin colors + } -#else - //gamut control : Lab values are in gamut - Color::gamutLchonly (HH, sincosval, Lprov, Chprov, R, G, B, wip, highlight, 0.15f, 0.98f); -#endif - - if (Chprov > 6.0f) { - const float saturation = SAT (R, G, B); - - if (saturation > 0.0f) { - if (satredu != 1.0f) { + if (saturation > 0.f) { + if (satredu != 1.f) { // for skin, no differentiation - sathue [0] = sathue [1] = sathue [2] = sathue [3] = sathue[4] = 1.0f; - sathue2[0] = sathue2[1] = sathue2[2] = sathue2[3] = 1.0f; + sathue [0] = sathue [1] = sathue [2] = sathue [3] = sathue[4] = 1.f; + sathue2[0] = sathue2[1] = sathue2[2] = sathue2[3] = 1.f; } else { //double pyramid: LL and HH //I try to take into account: Munsell response (human vision) and Gamut..(less response for red): preferably using Prophoto or WideGamut //blue: -1.80 -3.14 green = 2.1 3.14 green-yellow=1.4 2.1 red:0 1.4 blue-purple:-0.7 -1.4 purple: 0 -0.7 //these values allow a better and differential response if (LL < 20.0f) { //more for blue-purple, blue and red modulate + sathue[4] = 0.4f; + sathue2[3] = 1.f; if (/*HH> -3.1415f &&*/ HH < -1.5f ) { sathue[0] = 1.3f; //blue sathue[1] = 1.2f; sathue[2] = 1.1f; sathue[3] = 1.05f; - sathue[4] = 0.4f; sathue2[0] = 1.05f; sathue2[1] = 1.1f ; sathue2[2] = 1.05f; - sathue2[3] = 1.0f; } else if (/*HH>=-1.5f &&*/ HH < -0.7f ) { sathue[0] = 1.6f; //blue purple 1.2 1.1 sathue[1] = 1.4f; sathue[2] = 1.3f; sathue[3] = 1.2f ; - sathue[4] = 0.4f; sathue2[0] = 1.2f ; sathue2[1] = 1.15f; sathue2[2] = 1.1f ; - sathue2[3] = 1.0f; } else if (/*HH>=-0.7f &&*/ HH < 0.0f ) { sathue[0] = 1.2f; //purple sathue[1] = 1.0f; sathue[2] = 1.0f; sathue[3] = 1.0f ; - sathue[4] = 0.4f; sathue2[0] = 1.0f ; sathue2[1] = 1.0f ; sathue2[2] = 1.0f ; - sathue2[3] = 1.0f; } // else if( HH>= 0.0f && HH<= 1.4f ) {sathue[0]=1.1f;sathue[1]=1.1f;sathue[2]=1.1f;sathue[3]=1.0f ;sathue[4]=0.4f;sathue2[0]=1.0f ;sathue2[1]=1.0f ;sathue2[2]=1.0f ;sathue2[3]=1.0f;}//red 0.8 0.7 else if (/*HH>= 0.0f &&*/ HH <= 1.4f ) { @@ -312,39 +283,33 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.2f; sathue[2] = 1.1f; sathue[3] = 1.0f ; - sathue[4] = 0.4f; sathue2[0] = 1.0f ; sathue2[1] = 1.0f ; sathue2[2] = 1.0f ; - sathue2[3] = 1.0f; } else if (/*HH> 1.4f &&*/ HH <= 2.1f ) { sathue[0] = 1.0f; //green yellow 1.2 1.1 sathue[1] = 1.0f; sathue[2] = 1.0f; sathue[3] = 1.0f ; - sathue[4] = 0.4f; sathue2[0] = 1.0f ; sathue2[1] = 1.0f ; sathue2[2] = 1.0f ; - sathue2[3] = 1.0f; } else { /*if(HH> 2.1f && HH<= 3.1415f)*/ sathue[0] = 1.4f; //green sathue[1] = 1.3f; sathue[2] = 1.2f; sathue[3] = 1.15f; - sathue[4] = 0.4f; sathue2[0] = 1.15f; sathue2[1] = 1.1f ; sathue2[2] = 1.05f; - sathue2[3] = 1.0f; } } else if (LL < 50.0f) { //more for blue and green, less for red and green-yellow + sathue[4] = 0.4f; if (/*HH> -3.1415f &&*/ HH < -1.5f ) { sathue[0] = 1.5f; //blue sathue[1] = 1.4f; sathue[2] = 1.3f; sathue[3] = 1.2f ; - sathue[4] = 0.4f; sathue2[0] = 1.2f ; sathue2[1] = 1.1f ; sathue2[2] = 1.05f; @@ -354,7 +319,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.2f; sathue[2] = 1.1f; sathue[3] = 1.05f; - sathue[4] = 0.4f; sathue2[0] = 1.05f; sathue2[1] = 1.05f; sathue2[2] = 1.0f ; @@ -364,7 +328,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.0f; sathue[2] = 1.0f; sathue[3] = 1.0f ; - sathue[4] = 0.4f; sathue2[0] = 1.0f ; sathue2[1] = 1.0f ; sathue2[2] = 1.0f ; @@ -376,7 +339,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.0f; sathue[2] = 0.9f; sathue[3] = 0.8f ; - sathue[4] = 0.4f; sathue2[0] = 0.8f ; sathue2[1] = 0.8f ; sathue2[2] = 0.8f ; @@ -386,7 +348,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.1f; sathue[2] = 1.1f; sathue[3] = 1.05f; - sathue[4] = 0.4f; sathue2[0] = 0.9f ; sathue2[1] = 0.8f ; sathue2[2] = 0.7f ; @@ -396,7 +357,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.4f; sathue[2] = 1.3f; sathue[3] = 1.2f ; - sathue[4] = 0.4f; sathue2[0] = 1.2f ; sathue2[1] = 1.1f ; sathue2[2] = 1.05f; @@ -404,12 +364,12 @@ void ImProcFunctions::vibrance (LabImage* lab) } } else if (LL < 80.0f) { //more for green, less for red and green-yellow + sathue[4] = 0.3f; if (/*HH> -3.1415f &&*/ HH < -1.5f ) { sathue[0] = 1.3f; //blue sathue[1] = 1.2f; sathue[2] = 1.15f; sathue[3] = 1.1f ; - sathue[4] = 0.3f; sathue2[0] = 1.1f ; sathue2[1] = 1.1f ; sathue2[2] = 1.05f; @@ -419,7 +379,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.2f; sathue[2] = 1.15f; sathue[3] = 1.1f ; - sathue[4] = 0.3f; sathue2[0] = 1.1f ; sathue2[1] = 1.05f; sathue2[2] = 1.0f ; @@ -429,7 +388,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.0f; sathue[2] = 1.0f ; sathue[3] = 1.0f ; - sathue[4] = 0.3f; sathue2[0] = 1.0f ; sathue2[1] = 1.0f ; sathue2[2] = 1.0f ; @@ -441,7 +399,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.0f; sathue[2] = 0.9f ; sathue[3] = 0.8f ; - sathue[4] = 0.3f; sathue2[0] = 0.8f ; sathue2[1] = 0.8f ; sathue2[2] = 0.8f ; @@ -451,7 +408,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.2f; sathue[2] = 1.1f ; sathue[3] = 1.05f; - sathue[4] = 0.3f; sathue2[0] = 1.0f ; sathue2[1] = 0.9f ; sathue2[2] = 0.8f ; @@ -461,19 +417,18 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.4f; sathue[2] = 1.3f ; sathue[3] = 1.25f; - sathue[4] = 0.3f; sathue2[0] = 1.25f; sathue2[1] = 1.2f ; sathue2[2] = 1.15f; sathue2[3] = 1.05f; } } else { /*if (LL>=80.0f)*/ //more for green-yellow, less for red and purple + sathue[4] = 0.2f; if (/*HH> -3.1415f &&*/ HH < -1.5f ) { sathue[0] = 1.0f; //blue sathue[1] = 1.0f; sathue[2] = 0.9f; sathue[3] = 0.8f; - sathue[4] = 0.2f; sathue2[0] = 0.8f; sathue2[1] = 0.8f ; sathue2[2] = 0.8f ; @@ -483,7 +438,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.0f; sathue[2] = 0.9f; sathue[3] = 0.8f; - sathue[4] = 0.2f; sathue2[0] = 0.8f; sathue2[1] = 0.8f ; sathue2[2] = 0.8f ; @@ -493,7 +447,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.0f; sathue[2] = 1.0f; sathue[3] = 0.9f; - sathue[4] = 0.2f; sathue2[0] = 0.9f; sathue2[1] = 0.9f ; sathue2[2] = 0.8f ; @@ -505,7 +458,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.0f; sathue[2] = 0.9f; sathue[3] = 0.8f; - sathue[4] = 0.2f; sathue2[0] = 0.8f; sathue2[1] = 0.8f ; sathue2[2] = 0.8f ; @@ -515,7 +467,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.5f; sathue[2] = 1.4f; sathue[3] = 1.2f; - sathue[4] = 0.2f; sathue2[0] = 1.1f; sathue2[1] = 1.05f; sathue2[2] = 1.0f ; @@ -525,7 +476,6 @@ void ImProcFunctions::vibrance (LabImage* lab) sathue[1] = 1.3f; sathue[2] = 1.2f; sathue[3] = 1.1f; - sathue[4] = 0.2f; sathue2[0] = 1.1f; sathue2[1] = 1.05f; sathue2[2] = 1.05f; @@ -534,97 +484,83 @@ void ImProcFunctions::vibrance (LabImage* lab) } } - float chmodpastel = 0.f, chmodsat = 0.f; + float chmod = 0.f; // variables to improve transitions float pa, pb;// transition = pa*saturation + pb - float chl00 = chromaPastel * satredu * sathue[4]; - float chl0 = chromaPastel * satredu * sathue[0]; - float chl1 = chromaPastel * satredu * sathue[1]; - float chl2 = chromaPastel * satredu * sathue[2]; - float chl3 = chromaPastel * satredu * sathue[3]; - float chs0 = chromaSatur * satredu * sathue2[0]; - float chs1 = chromaSatur * satredu * sathue2[1]; - float chs2 = chromaSatur * satredu * sathue2[2]; - float chs3 = chromaSatur * satredu * sathue2[3]; - float s3 = 1.0f; // We handle only positive values here ; improve transitions if (saturation < p00) { - chmodpastel = chl00 ; //neutral tones + pa = 0.f; + pb = chromaPastel * sathue[4]; } else if (saturation < p0 ) { + float chl00 = chromaPastel * sathue[4]; + float chl0 = chromaPastel * sathue[0]; pa = (chl00 - chl0) / (p00 - p0); pb = chl00 - pa * p00; - chmodpastel = pa * saturation + pb; } else if (saturation < p1) { + float chl0 = chromaPastel * sathue[0]; + float chl1 = chromaPastel * sathue[1]; pa = (chl0 - chl1) / (p0 - p1); pb = chl0 - pa * p0; - chmodpastel = pa * saturation + pb; } else if (saturation < p2) { + float chl1 = chromaPastel * sathue[1]; + float chl2 = chromaPastel * sathue[2]; pa = (chl1 - chl2) / (p1 - p2); pb = chl1 - pa * p1; - chmodpastel = pa * saturation + pb; } else if (saturation < limitpastelsatur) { + float chl2 = chromaPastel * sathue[2]; + float chl3 = chromaPastel * sathue[3]; pa = (chl2 - chl3) / (p2 - limitpastelsatur); pb = chl2 - pa * p2; - chmodpastel = pa * saturation + pb; } else if (saturation < s0) { + float chl3 = chromaPastel * sathue[3]; + float chs0 = chromaSatur * sathue2[0]; pa = (chl3 - chs0) / (limitpastelsatur - s0) ; pb = chl3 - pa * limitpastelsatur; - chmodsat = pa * saturation + pb; } else if (saturation < s1) { + float chs0 = chromaSatur * sathue2[0]; + float chs1 = chromaSatur * sathue2[1]; pa = (chs0 - chs1) / (s0 - s1); pb = chs0 - pa * s0; - chmodsat = pa * saturation + pb; } else if (saturation < s2) { + float chs1 = chromaSatur * sathue2[1]; + float chs2 = chromaSatur * sathue2[2]; pa = (chs1 - chs2) / (s1 - s2); pb = chs1 - pa * s1; - chmodsat = pa * saturation + pb; } else { - pa = (chs2 - chs3) / (s2 - s3); + float chs2 = chromaSatur * sathue2[2]; + float chs3 = chromaSatur * sathue2[3]; + pa = (chs2 - chs3) / (s2 - 1.f); pb = chs2 - pa * s2; - chmodsat = pa * saturation + pb; } + chmod = pa * saturation + pb; + chmod *= satredu; if (chromaPastel != chromaSatur) { // Pastels if (saturation > p2 && saturation < limitpastelsatur) { float newchromaPastel = chromaPastel_a * saturation + chromaPastel_b; - chmodpastel = newchromaPastel * satredu * sathue[3]; + chmod = newchromaPastel * satredu * sathue[3]; } // Saturated if (saturation < s0 && saturation >= limitpastelsatur) { float newchromaSatur = chromaSatur_a * saturation + chromaSatur_b; - chmodsat = newchromaSatur * satredu * sathue2[0]; + chmod = newchromaSatur * satredu * sathue2[0]; } }// end transition if (saturation <= limitpastelsatur) { - if (chmodpastel > 2.0f ) { - chmodpastel = 2.0f; //avoid too big values - } else if (chmodpastel < -0.93f) { - chmodpastel = -0.93f; //avoid negative values - } + chmod = rtengine::LIM(chmod, -0.93f, 2.f); + Chprov *= 1.0f + chmod; - Chprov *= (1.0f + chmodpastel); - - if (Chprov < 6.0f) { - Chprov = 6.0f; - } } else { //if (saturation > limitpastelsatur) - if (chmodsat > 1.8f ) { - chmodsat = 1.8f; //saturated - } else if (chmodsat < -0.93f) { - chmodsat = -0.93f; - } + chmod = rtengine::LIM(chmod, -0.93f, 1.8f); + Chprov *= 1.0f + chmod; - Chprov *= 1.0f + chmodsat; - - if (Chprov < 6.0f) { - Chprov = 6.0f; - } } + Chprov = rtengine::max(Chprov, 6.f); } } @@ -633,36 +569,36 @@ void ImProcFunctions::vibrance (LabImage* lab) // Vibrance's Skin curve if (skinCurveIsSet) { if (HH > skbeg && HH < skend) { - if (Chprov < 60.0f) { //skin hue : todo ==> transition + if (Chprov < 60.f) { //skin hue : todo ==> transition float HHsk = ask * HH + bsk; - float Hn = (skin_curve[HHsk] - bsk) / ask; - float Hc = (Hn * xx + HH * (1.0f - xx)); + float Hn = skin_curve[HHsk] - bsk0; + float Hc = Hn * xx + HH * (1.f - xx); HH = Hc; hhModified = true; - } else if (Chprov < (60.0f + dchr)) { //transition chroma + } else if (Chprov < (60.f + dchr)) { //transition chroma float HHsk = ask * HH + bsk; - float Hn = (skin_curve[HHsk] - bsk) / ask; - float Hc = (Hn * xx + HH * (1.0f - xx)); + float Hn = skin_curve[HHsk] - bsk0; + float Hc = Hn * xx + HH * (1.f - xx); float aa = (HH - Hc) / dchr ; - float bb = HH - (60.0f + dchr) * aa; + float bb = HH - (60.f + dchr) * aa; HH = aa * Chprov + bb; hhModified = true; } } //transition hue - else if (HH > (skbeg - dhue) && HH <= skbeg && Chprov < (60.0f + dchr * 0.5f)) { + else if (HH > (skbeg - dhue) && HH <= skbeg && Chprov < (60.f + dchr * 0.5f)) { float HHsk = ask * skbeg + bsk; - float Hn = (skin_curve[HHsk] - bsk) / ask; - float Hcc = (Hn * xx + skbeg * (1.0f - xx)); - float adh = (Hcc - (skbeg - dhue)) / (dhue); + float Hn = skin_curve[HHsk] - bsk0; + float Hcc = Hn * xx + skbeg * (1.f - xx); + float adh = (Hcc - (skbeg - dhue)) / dhue; float bdh = Hcc - adh * skbeg; HH = adh * HH + bdh; hhModified = true; - } else if (HH >= skend && HH < (skend + dhue) && Chprov < (60.0f + dchr * 0.5f)) { + } else if (HH >= skend && HH < (skend + dhue) && Chprov < (60.f + dchr * 0.5f)) { float HHsk = ask * skend + bsk; - float Hn = (skin_curve[HHsk] - bsk) / ask; - float Hcc = (Hn * xx + skend * (1.0f - xx)); - float adh = (skend + dhue - Hcc) / (dhue); + float Hn = skin_curve[HHsk] - bsk0; + float Hcc = Hn * xx + skend * (1.f - xx); + float adh = (skend + dhue - Hcc) / dhue; float bdh = Hcc - adh * skend; HH = adh * HH + bdh; hhModified = true; @@ -670,7 +606,6 @@ void ImProcFunctions::vibrance (LabImage* lab) } // end skin hue //Munsell correction -// float2 sincosval; if (!avoidcolorshift && hhModified) { sincosval = xsincosf (HH); } @@ -678,21 +613,18 @@ void ImProcFunctions::vibrance (LabImage* lab) float aprovn, bprovn; bool inGamut; + const float fyy = Color::c1By116 * Lprov + Color::c16By116; + const float yy_ = (Lprov > Color::epskap) ? fyy * fyy*fyy : Lprov / Color::kappaf; do { inGamut = true; if (avoidcolorshift) { float correctionHue = 0.0f; - float correctlum = 0.0f; -#ifdef _DEBUG - Color::AllMunsellLch (/*lumaMuns*/false, Lprov, Lprov, HH, Chprov, CC, correctionHue, correctlum, MunsDebugInfo); -#else - Color::AllMunsellLch (/*lumaMuns*/false, Lprov, Lprov, HH, Chprov, CC, correctionHue, correctlum); -#endif + Color::AllMunsellLch(Lprov, HH, Chprov, CC, correctionHue); if (correctionHue != 0.f || hhModified) { - sincosval = xsincosf (HH + correctionHue); + sincosval = xsincosf(HH + correctionHue); hhModified = false; } } @@ -700,29 +632,21 @@ void ImProcFunctions::vibrance (LabImage* lab) aprovn = Chprov * sincosval.y; bprovn = Chprov * sincosval.x; - float fyy = (Color::c1By116 * Lprov ) + Color::c16By116; - float fxx = (0.002f * aprovn) + fyy; - float fzz = fyy - (0.005f * bprovn); - float xx_ = 65535.f * Color::f2xyz (fxx) * Color::D50x; - // float yy_ = 65535.0f * Color::f2xyz(fyy); - float zz_ = 65535.f * Color::f2xyz (fzz) * Color::D50z; - float yy_ = 65535.f * ((Lprov > Color::epskap) ? fyy * fyy*fyy : Lprov / Color::kappa); + float fxx = 0.002f * aprovn + fyy; + float fzz = fyy - 0.005f * bprovn; + float xx_ = Color::f2xyz(fxx) * Color::D50x; + float zz_ = Color::f2xyz(fzz) * Color::D50z; + float R, G, B; Color::xyz2rgb (xx_, yy_, zz_, R, G, B, wip); - if (R < 0.0f || G < 0.0f || B < 0.0f) { -#ifdef _DEBUG - negsat++; -#endif + if (rtengine::min(R, G, B) < 0.0f) { Chprov *= 0.98f; inGamut = false; } // if "highlight reconstruction" enabled don't control Gamut for highlights - if ((!highlight) && (R > 65535.0f || G > 65535.0f || B > 65535.0f)) { -#ifdef _DEBUG - moresat++; -#endif + if (!highlight && max(R, G, B) > 1.f && min(R, G, B) <= 1.f) { Chprov *= 0.98f; inGamut = false; } @@ -733,27 +657,8 @@ void ImProcFunctions::vibrance (LabImage* lab) lab->a[i][j] = aprovn * 327.68f; lab->b[i][j] = bprovn * 327.68f; } - - } // end of parallelization - -#ifdef _DEBUG - t2e.set(); - - if (settings->verbose) { - printf ("Vibrance (performed in %d usec):\n", t2e.etime (t1e)); - printf (" Gamut: G1negat=%iiter G165535=%iiter G2negsat=%iiter G265535=%iiter\n", negat, moreRGB, negsat, moresat); - - if (MunsDebugInfo) { - printf (" Munsell chrominance: MaxBP=%1.2frad MaxRY=%1.2frad MaxGY=%1.2frad MaxRP=%1.2frad depass=%u\n", MunsDebugInfo->maxdhue[0], MunsDebugInfo->maxdhue[1], MunsDebugInfo->maxdhue[2], MunsDebugInfo->maxdhue[3], MunsDebugInfo->depass); } - } - - if (MunsDebugInfo) { - delete MunsDebugInfo; - } - -#endif - + } // end of parallelization } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index ed41d7ce2..d4f8463ef 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -332,7 +332,8 @@ curveMode(ToneCurveParams::TcMode::STD), shcompr(50), hlcompr(0), hlcomprthresh(33), - histmatching(false) + histmatching(false), + clampOOG(true) { } @@ -355,7 +356,8 @@ bool ToneCurveParams::operator ==(const ToneCurveParams& other) const && shcompr == other.shcompr && hlcompr == other.hlcompr && hlcomprthresh == other.hlcomprthresh - && histmatching == other.histmatching; + && histmatching == other.histmatching + && clampOOG == other.clampOOG; } bool ToneCurveParams::operator !=(const ToneCurveParams& other) const @@ -3132,6 +3134,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->toneCurve.hlcomprthresh, "Exposure", "HighlightComprThreshold", toneCurve.hlcomprthresh, keyFile); saveToKeyfile(!pedited || pedited->toneCurve.shcompr, "Exposure", "ShadowCompr", toneCurve.shcompr, keyFile); saveToKeyfile(!pedited || pedited->toneCurve.histmatching, "Exposure", "HistogramMatching", toneCurve.histmatching, keyFile); + saveToKeyfile(!pedited || pedited->toneCurve.clampOOG, "Exposure", "ClampOOG", toneCurve.clampOOG, keyFile); // Highlight recovery saveToKeyfile(!pedited || pedited->toneCurve.hrenabled, "HLRecovery", "Enabled", toneCurve.hrenabled, keyFile); @@ -4035,6 +4038,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Exposure", "Curve2", pedited, toneCurve.curve2, pedited->toneCurve.curve2); } assignFromKeyfile(keyFile, "Exposure", "HistogramMatching", pedited, toneCurve.histmatching, pedited->toneCurve.histmatching); + assignFromKeyfile(keyFile, "Exposure", "ClampOOG", pedited, toneCurve.clampOOG, pedited->toneCurve.clampOOG); } if (keyFile.has_group("HLRecovery")) { diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 1d2e087d5..83d559713 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -286,6 +286,7 @@ struct ToneCurveParams { int hlcompr; // Highlight Recovery's compression int hlcomprthresh; // Highlight Recovery's threshold bool histmatching; // histogram matching + bool clampOOG; // clamp out of gamut colours ToneCurveParams(); diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 1e52e1b6b..8607c383d 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -1807,7 +1807,7 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens } // Correct vignetting of lens profile - if (!hasFlatField && lensProf.useVign) { + if (!hasFlatField && lensProf.useVign && lensProf.lcMode != LensProfParams::LcMode::NONE) { std::unique_ptr pmap; if (lensProf.useLensfun()) { @@ -4196,7 +4196,7 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement for (int w = 0; w < im->getWidth(); ++w) { - float r, g, b, hr, hg, hb; + float r, g, b, hr = 0.f, hg = 0.f, hb = 0.f; if (transform_via_pcs_lab) { float L = * (p++); diff --git a/rtengine/settings.h b/rtengine/settings.h index 484f588d7..b338335d4 100644 --- a/rtengine/settings.h +++ b/rtengine/settings.h @@ -64,7 +64,6 @@ public: bool gamutICC; // no longer used bool gamutLch; - bool ciecamfloat; bool HistogramWorking; int amchroma; int protectred; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 29f65b57a..1c81af783 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -2357,23 +2357,8 @@ private: LUTf CAMBrightCurveQ; float CAMMean = NAN; - if (params.sharpening.enabled) { - if (settings->ciecamfloat) { - float d, dj, yb; - ipf.ciecam_02float(cieView, float (adap), 1, 2, labView, ¶ms, customColCurve1, customColCurve2, customColCurve3, dummy, dummy, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, true, d, dj, yb, 1); - } else { - double dd, dj; - ipf.ciecam_02(cieView, adap, 1, 2, labView, ¶ms, customColCurve1, customColCurve2, customColCurve3, dummy, dummy, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, true, dd, dj, 1); - } - } else { - if (settings->ciecamfloat) { - float d, dj, yb; - ipf.ciecam_02float(cieView, float (adap), 1, 2, labView, ¶ms, customColCurve1, customColCurve2, customColCurve3, dummy, dummy, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, true, d, dj, yb, 1); - } else { - double dd, dj; - ipf.ciecam_02(cieView, adap, 1, 2, labView, ¶ms, customColCurve1, customColCurve2, customColCurve3, dummy, dummy, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, true, dd, dj, 1); - } - } + float d, dj, yb; + ipf.ciecam_02float (cieView, float (adap), 1, 2, labView, ¶ms, customColCurve1, customColCurve2, customColCurve3, dummy, dummy, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, true, d, dj, yb, 1); } delete cieView; diff --git a/rtexif/nikonattribs.cc b/rtexif/nikonattribs.cc index 3d844d2af..3cb7a442e 100644 --- a/rtexif/nikonattribs.cc +++ b/rtexif/nikonattribs.cc @@ -23,7 +23,6 @@ #include #include #include - #include "rtexif.h" using namespace std; @@ -543,7 +542,16 @@ public: if (r != lenses.end()) { if (r == lenses.begin() && EffectiveMaxApertureString != "") { // first entry is for unchipped lenses - ld << "Lens = Unknown $FL$mm f/" << EffectiveMaxApertureString; + Tag *FLTag = t->getParent()->getRoot()->findTag ("FocalLength"); + ld << "Lens = MF "; + + if(FLTag) { + ld << FLTag->valueToString () << "mm"; + } else { + ld << "0mm"; + } + + ld << " f/" << EffectiveMaxApertureString; } else { ld << "Lens = " << r->second; } diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index 33411b6a7..e23266e58 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -942,9 +942,8 @@ void FileCatalog::deleteRequested (std::vector tbe, bool inc return; } - Gtk::MessageDialog msd (M("FILEBROWSER_DELETEDLGLABEL"), true, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO, true); + Gtk::MessageDialog msd (getToplevelWindow(this), M("FILEBROWSER_DELETEDLGLABEL"), true, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO, true); msd.set_secondary_text(Glib::ustring::compose ( inclBatchProcessed ? M("FILEBROWSER_DELETEDLGMSGINCLPROC") : M("FILEBROWSER_DELETEDLGMSG"), tbe.size()), true); - if (msd.run() == Gtk::RESPONSE_YES) { for (unsigned int i = 0; i < tbe.size(); i++) { const auto fname = tbe[i]->filename; diff --git a/rtgui/options.cc b/rtgui/options.cc index cc8b77696..7713685fe 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -564,7 +564,6 @@ void Options::setDefaults () // end locallab - rtSettings.ciecamfloat = true; rtSettings.protectred = 60; rtSettings.protectredh = 0.3; rtSettings.CRI_color = 0; @@ -1478,11 +1477,6 @@ void Options::readFromFile (Glib::ustring fname) rtSettings.gamutICC = keyFile.get_boolean ("Color Management", "GamutICC"); } - //if ( keyFile.has_key ("Color Management", "BWcomplement")) rtSettings.bw_complementary = keyFile.get_boolean("Color Management", "BWcomplement"); - if ( keyFile.has_key ("Color Management", "Ciecamfloat")) { - rtSettings.ciecamfloat = keyFile.get_boolean ("Color Management", "Ciecamfloat"); - } - if ( keyFile.has_key ("Color Management", "AdobeRGB")) { rtSettings.adobe = keyFile.get_string ("Color Management", "AdobeRGB"); } @@ -2055,8 +2049,6 @@ void Options::saveToFile (Glib::ustring fname) keyFile.set_string ("Color Management", "Bruce", rtSettings.bruce); keyFile.set_integer ("Color Management", "WhiteBalanceSpotSize", whiteBalanceSpotSize); keyFile.set_boolean ("Color Management", "GamutICC", rtSettings.gamutICC); - //keyFile.set_boolean ("Color Management", "BWcomplement", rtSettings.bw_complementary); - keyFile.set_boolean ("Color Management", "Ciecamfloat", rtSettings.ciecamfloat); keyFile.set_boolean ("Color Management", "GamutLch", rtSettings.gamutLch); keyFile.set_integer ("Color Management", "ProtectRed", rtSettings.protectred); keyFile.set_integer ("Color Management", "Amountchroma", rtSettings.amchroma); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 4e7977ac0..2c3278134 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -50,6 +50,7 @@ void ParamsEdited::set(bool v) toneCurve.hrenabled = v; toneCurve.method = v; toneCurve.histmatching = v; + toneCurve.clampOOG = v; retinex.cdcurve = v; retinex.mapcurve = v; retinex.cdHcurve = v; @@ -727,6 +728,7 @@ void ParamsEdited::initFrom(const std::vector& toneCurve.hrenabled = toneCurve.hrenabled && p.toneCurve.hrenabled == other.toneCurve.hrenabled; toneCurve.method = toneCurve.method && p.toneCurve.method == other.toneCurve.method; toneCurve.histmatching = toneCurve.histmatching && p.toneCurve.histmatching == other.toneCurve.histmatching; + toneCurve.clampOOG = toneCurve.clampOOG && p.toneCurve.clampOOG == other.toneCurve.clampOOG; retinex.cdcurve = retinex.cdcurve && p.retinex.cdcurve == other.retinex.cdcurve; retinex.mapcurve = retinex.mapcurve && p.retinex.mapcurve == other.retinex.mapcurve; retinex.cdHcurve = retinex.cdHcurve && p.retinex.cdHcurve == other.retinex.cdHcurve; @@ -1444,6 +1446,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.toneCurve.histmatching = mods.toneCurve.histmatching; } + if (toneCurve.clampOOG) { + toEdit.toneCurve.clampOOG = mods.toneCurve.clampOOG; + } + if (retinex.enabled) { toEdit.retinex.enabled = mods.retinex.enabled; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index b5008b3d7..c9f491cde 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -54,6 +54,7 @@ public: bool hrenabled; bool method; bool histmatching; + bool clampOOG; }; class RetinexParamsEdited diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 5b9a694d8..a50ce7aee 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -270,7 +270,6 @@ Gtk::Widget* Preferences::getBatchProcPanel() mi = behModel->append(); mi->set_value(behavColumns.label, M("TP_COLORAPP_LABEL")); - appendBehavList(mi, M("TP_COLORAPP_CIECAT_DEGREE"), ADDSET_CAT_DEGREE, true); appendBehavList(mi, M("TP_COLORAPP_ADAPTSCENE"), ADDSET_CAT_ADAPTSCENE, true); appendBehavList(mi, M("TP_COLORAPP_LIGHT"), ADDSET_CAT_LIGHT, true); appendBehavList(mi, M("TP_COLORAPP_BRIGHT"), ADDSET_CAT_BRIGHT, true); @@ -934,30 +933,6 @@ Gtk::Widget* Preferences::getColorManagementPanel() fprinter->add(*gprinter); mvbcm->pack_start(*fprinter, Gtk::PACK_SHRINK); - Gtk::Frame* fcielab = Gtk::manage(new Gtk::Frame(M("PREFERENCES_CIEART_FRAME"))); - setExpandAlignProperties(fcielab, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - - Gtk::Grid* colo = Gtk::manage(new Gtk::Grid()); - setExpandAlignProperties(colo, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - Gtk::Label* lreloadneeded1 = Gtk::manage(new Gtk::Label(M("PREFERENCES_IMG_RELOAD_NEEDED"), Gtk::ALIGN_START)); - setExpandAlignProperties(lreloadneeded1, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - colo->attach(*lreloadneeded1, 0, 0, 2, 1); - /* - colo->attach (*viewlab, 0, 1, 1, 1); - colo->attach (*view, 1, 1, 1, 1); - colo->attach (*greylab, 0, 2, 1, 1); - colo->attach (*grey, 1, 2, 1, 1); - */ -// colo->attach (*greySclab, 0, 3, 1, 1); -// colo->attach (*greySc, 1, 3, 1, 1); - cbciecamfloat = Gtk::manage(new Gtk::CheckButton(M("PREFERENCES_CIEART_LABEL"))); - setExpandAlignProperties(cbciecamfloat, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - colo->attach(*cbciecamfloat, 0, 4, 2, 1); - cbciecamfloat->set_tooltip_markup(M("PREFERENCES_CIEART_TOOLTIP")); - fcielab->add(*colo); - - mvbcm->pack_start(*fcielab, Gtk::PACK_SHRINK, 4); - return mvbcm; } @@ -1798,7 +1773,6 @@ void Preferences::storePreferences() // moptions.rtSettings.viewingdevicegrey = grey->get_active_row_number (); // moptions.rtSettings.viewinggreySc = greySc->get_active_row_number (); // moptions.rtSettings.autocielab = cbAutocielab->get_active (); - moptions.rtSettings.ciecamfloat = cbciecamfloat->get_active(); moptions.rtSettings.leveldnv = dnv->get_active_row_number(); moptions.rtSettings.leveldnti = dnti->get_active_row_number(); moptions.rtSettings.leveldnliss = dnliss->get_active_row_number(); @@ -1975,7 +1949,6 @@ void Preferences::fillPreferences() // clocalajust->set_active (moptions.locaaju); // cbAutocielab->set_active (moptions.rtSettings.autocielab); - cbciecamfloat->set_active(moptions.rtSettings.ciecamfloat); languages->set_active_text(moptions.language); ckbLangAutoDetect->set_active(moptions.languageAutoDetect); int themeNbr = getThemeRowNumber(moptions.theme); diff --git a/rtgui/preferences.h b/rtgui/preferences.h index b64c7ee1d..4c48720ac 100644 --- a/rtgui/preferences.h +++ b/rtgui/preferences.h @@ -114,7 +114,6 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener Gtk::CheckButton* monBPC; Gtk::CheckButton* cbAutoMonProfile; //Gtk::CheckButton* cbAutocielab; - Gtk::CheckButton* cbciecamfloat; Gtk::CheckButton* cbdaubech; Gtk::SpinButton* hlThresh; Gtk::SpinButton* shThresh; diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc index 4b50c97cc..043d1d055 100644 --- a/rtgui/tonecurve.cc +++ b/rtgui/tonecurve.cc @@ -32,6 +32,7 @@ ToneCurve::ToneCurve () : FoldableToolPanel(this, "tonecurve", M("TP_EXPOSURE_LA auto m = ProcEventMapper::getInstance(); EvHistMatching = m->newEvent(AUTOEXP, "HISTORY_MSG_HISTMATCHING"); EvHistMatchingBatch = m->newEvent(M_VOID, "HISTORY_MSG_HISTMATCHING"); + EvClampOOG = m->newEvent(RGBCURVE, "HISTORY_MSG_CLAMPOOG"); CurveListener::setMulti(true); @@ -39,6 +40,12 @@ ToneCurve::ToneCurve () : FoldableToolPanel(this, "tonecurve", M("TP_EXPOSURE_LA bottomMilestones.push_back( GradientMilestone(0., 0., 0., 0.) ); bottomMilestones.push_back( GradientMilestone(1., 1., 1., 1.) ); +//----------- OOG clamping ---------------------------------- + clampOOG = Gtk::manage(new Gtk::CheckButton(M("TP_EXPOSURE_CLAMPOOG"))); + pack_start(*clampOOG); + pack_start (*Gtk::manage (new Gtk::HSeparator())); + clampOOG->signal_toggled().connect(sigc::mem_fun(*this, &ToneCurve::clampOOGChanged)); + //----------- Auto Levels ---------------------------------- abox = Gtk::manage (new Gtk::HBox ()); abox->set_spacing (10); @@ -236,6 +243,7 @@ void ToneCurve::read (const ProcParams* pp, const ParamsEdited* pedited) toneCurveMode2->set_active(rtengine::toUnderlying(pp->toneCurve.curveMode2)); histmatching->set_active(pp->toneCurve.histmatching); + clampOOG->set_active(pp->toneCurve.clampOOG); if (pedited) { expcomp->setEditedState (pedited->toneCurve.expcomp ? Edited : UnEdited); @@ -261,6 +269,7 @@ void ToneCurve::read (const ProcParams* pp, const ParamsEdited* pedited) } histmatching->set_inconsistent(!pedited->toneCurve.histmatching); + clampOOG->set_inconsistent(!pedited->toneCurve.clampOOG); } enaconn.block (true); @@ -357,6 +366,7 @@ void ToneCurve::write (ProcParams* pp, ParamsEdited* pedited) } pp->toneCurve.histmatching = histmatching->get_active(); + pp->toneCurve.clampOOG = clampOOG->get_active(); if (pedited) { pedited->toneCurve.expcomp = expcomp->getEditedState (); @@ -376,6 +386,7 @@ void ToneCurve::write (ProcParams* pp, ParamsEdited* pedited) pedited->toneCurve.method = method->get_active_row_number() != 4; pedited->toneCurve.hrenabled = !hrenabled->get_inconsistent(); pedited->toneCurve.histmatching = !histmatching->get_inconsistent(); + pedited->toneCurve.clampOOG = !clampOOG->get_inconsistent(); } pp->toneCurve.hrenabled = hrenabled->get_active(); @@ -443,6 +454,17 @@ void ToneCurve::methodChanged () } } } + + +void ToneCurve::clampOOGChanged() +{ + if (listener) { + listener->panelChanged(EvClampOOG, clampOOG->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); + } +} + + + void ToneCurve::setRaw (bool raw) { diff --git a/rtgui/tonecurve.h b/rtgui/tonecurve.h index e85fefa39..7d4440e2c 100644 --- a/rtgui/tonecurve.h +++ b/rtgui/tonecurve.h @@ -58,6 +58,7 @@ protected: MyComboBoxText* toneCurveMode; MyComboBoxText* toneCurveMode2; Gtk::ToggleButton *histmatching; + Gtk::CheckButton *clampOOG; bool clipDirty, lastAuto; sigc::connection autoconn, neutralconn, tcmodeconn, tcmode2conn; @@ -69,6 +70,7 @@ protected: rtengine::ProcEvent EvHistMatching; rtengine::ProcEvent EvHistMatchingBatch; + rtengine::ProcEvent EvClampOOG; // used temporarily in eventing double nextExpcomp; @@ -124,6 +126,7 @@ public: void hrenabledChanged (); void methodChanged (); + void clampOOGChanged(); }; #endif diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index e267b7bcc..b4b13b862 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -597,7 +597,6 @@ void ToolPanelCoordinator::updateToolState() locallab->setExpanded(true); wavelet->updateToolState(temp); - wavelet->setExpanded(true); retinex->updateToolState(temp);