Merge branch 'dev' into clear-pp3-bug-fix

This commit is contained in:
Lawrence Lee 2025-01-19 12:50:55 -08:00
commit d3dca005eb
No known key found for this signature in database
GPG Key ID: 048FF2B76A63895F
31 changed files with 3654 additions and 711 deletions

View File

@ -41,13 +41,13 @@ jobs:
echo "Running apt update."
sudo apt update
echo "Installing dependencies with apt."
DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexiv2-dev libtcmalloc-minimal4 libhwy0 libhwy-dev
DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexiv2-dev libtcmalloc-minimal4 libhwy-dev libopenexr-dev libgif-dev
- name: Install libjxl
run: |
echo "Downloading and installing libjxl..."
VERSION_UBUNTU=22.04
VERSION_JXL=0.10.3
VERSION_UBUNTU=24.04
VERSION_JXL=0.11.1
curl -Ss -qgb "" -fLC - --retry 3 --retry-delay 3 -o libjxl-debs.tar.gz \
"https://github.com/libjxl/libjxl/releases/download/v${VERSION_JXL}/jxl-debs-amd64-ubuntu-${VERSION_UBUNTU}-v${VERSION_JXL}.tar.gz"
tar xf libjxl-debs.tar.gz

View File

@ -1124,8 +1124,8 @@ HISTORY_MSG_888;Local - Contrast Wavelet Balance Threshold
HISTORY_MSG_889;Local - Contrast Wavelet Graduated Strength
HISTORY_MSG_890;Local - Contrast Wavelet Graduated angle
HISTORY_MSG_891;Local - Contrast Wavelet Graduated
HISTORY_MSG_892;Local - Log Encoding Graduated Strength
HISTORY_MSG_893;Local - Log Encoding Graduated angle
HISTORY_MSG_892;Local - Log encoding Graduated Strength
HISTORY_MSG_893;Local - Log encoding Graduated angle
HISTORY_MSG_894;Local - SD - ΔE preview color intensity
HISTORY_MSG_897;Local - Contrast Wavelet ES strength
HISTORY_MSG_898;Local - Contrast Wavelet ES radius
@ -1191,7 +1191,7 @@ HISTORY_MSG_957;Local - Denoise mode
HISTORY_MSG_958;Local - Show/hide settings
HISTORY_MSG_959;Local - Inverse blur
HISTORY_MSG_960;Local - Log encoding - cat16
HISTORY_MSG_961;Local - Log encoding Ciecam
HISTORY_MSG_961;Local - Log encoding CIECAM
HISTORY_MSG_962;Local - Log encoding Absolute luminance source
HISTORY_MSG_963;Local - Log encoding Absolute luminance target
HISTORY_MSG_964;Local - Log encoding Surround
@ -1308,9 +1308,9 @@ HISTORY_MSG_1075;Local - CIECAM Surround viewing
HISTORY_MSG_1076;Local - CIECAM Scope
HISTORY_MSG_1077;Local - CIECAM Mode
HISTORY_MSG_1078;Local - Red and skin protection
HISTORY_MSG_1079;Local - CIECAM Sigmoid strength J
HISTORY_MSG_1080;Local - CIECAM Sigmoid threshold
HISTORY_MSG_1081;Local - CIECAM Sigmoid blend
HISTORY_MSG_1079;Local - CIECAM Sigmoid Q Contrast
HISTORY_MSG_1080;Local - CIECAM Sigmoid Q Skew
HISTORY_MSG_1081;Local - CIECAM Sigmoid Q Display white point
HISTORY_MSG_1082;Local - CIECAM Auto threshold
HISTORY_MSG_1083;Local - CIECAM Hue
HISTORY_MSG_1084;Local - Uses Black Ev - White Ev
@ -1318,9 +1318,9 @@ HISTORY_MSG_1085;Local - Jz lightness
HISTORY_MSG_1086;Local - Jz contrast
HISTORY_MSG_1087;Local - Jz chroma
HISTORY_MSG_1088;Local - Jz hue
HISTORY_MSG_1089;Local - Jz Sigmoid strength
HISTORY_MSG_1090;Local - Jz Sigmoid threshold
HISTORY_MSG_1091;Local - Jz Sigmoid blend
HISTORY_MSG_1089;Local - Jz Sigmoid contrast
HISTORY_MSG_1090;Local - Jz Sigmoid skew
HISTORY_MSG_1091;Local - Jz Sigmoid Display White point
HISTORY_MSG_1092;Local - Jz adaptation
HISTORY_MSG_1093;Local - CAM model
HISTORY_MSG_1094;Local - Jz highligths
@ -1376,9 +1376,9 @@ HISTORY_MSG_1143;Local - Jz blackev
HISTORY_MSG_1144;Local - Jz whiteev
HISTORY_MSG_1145;Local - Jz Log encoding
HISTORY_MSG_1146;Local - Jz Log encoding target gray
HISTORY_MSG_1147;Local - Jz BlackEv WhiteEv
HISTORY_MSG_1147;Local - Jz Scale Yb scene
HISTORY_MSG_1148;Local - Jz Sigmoid
HISTORY_MSG_1149;Local - Q Sigmoid
HISTORY_MSG_1149;Local - Q Sigmoid & Slope based
HISTORY_MSG_1150;Local - Log encoding Q instead Sigmoid Q
HISTORY_MSG_BLSHAPE;Blur by level
HISTORY_MSG_BLURCWAV;Blur chroma
@ -1465,23 +1465,39 @@ HISTORY_MSG_ICM_GAMUT;Gamut control
HISTORY_MSG_ICM_GREX;Primaries Green X
HISTORY_MSG_ICM_GREY;Primaries Green Y
HISTORY_MSG_ICM_MIDTCIE;Midtones
HISTORY_MSG_ICM_OFFSTRC;Offset
HISTORY_MSG_ICM_OPACITYW;Offset
HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries
HISTORY_MSG_ICM_OUTPUT_TEMP;Output - ICC-v4 illuminant D
HISTORY_MSG_ICM_OUTPUT_TYPE;Output - Type
HISTORY_MSG_ICM_PRESER;Preserve neutral
HISTORY_MSG_ICM_PYRWAVTRC;Contrast profile
HISTORY_MSG_ICM_REDX;Primaries Red X
HISTORY_MSG_ICM_REDY;Primaries Red Y
HISTORY_MSG_ICM_REFI;Refinement Colors
HISTORY_MSG_ICM_RESIDTRC;Residual contrast
HISTORY_MSG_ICM_SIGMATRC;Local contrast Attenation response
HISTORY_MSG_ICM_SHIFTX;Refinement Colors - Shift x
HISTORY_MSG_ICM_SHIFTY;Refinement Colors - Shift y
HISTORY_MSG_ICM_SMOOTHCIE;Smooth highlights
HISTORY_MSG_ICM_TRCEXP;Abstract Profile
HISTORY_MSG_ICM_WAVEXP;Contrast Enhancement
HISTORY_MSG_ICM_WORKING_GAMMA;TRC - Gamma
HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method
HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method
HISTORY_MSG_ICM_WORKING_SLOPE;TRC - Slope
HISTORY_MSG_ICM_WORKING_TRC_METHOD;TRC method
HISTORY_MSG_ILLUM;CAL - SC - Illuminant
HISTORY_MSG_LOCAL_CIE_CONTSIG;Local CIECAM - Sigmoid contrast
HISTORY_MSG_LOCAL_CIE_SKEWSIG;Local CIECAM - Sigmoid skew
HISTORY_MSG_LOCAL_CIE_SMOOTHTH;Local CIECAM - Attenuation threshold
HISTORY_MSG_LOCAL_CIE_SMOOTHLNK;Local CIECAM - Link R G B
HISTORY_MSG_LOCAL_CIE_WEVMETHOD11;Local CIECAM - Black Ev White Ev
HISTORY_MSG_LOCAL_CIE_WHITSIG;Local CIECAM - Sigmoid Display white point
HISTORY_MSG_LOCAL_CIE_SMOOTH_HIGH;Local CIECAM - Highlight Attenuation only
HISTORY_MSG_LOCAL_CIE_SMOOTHTRC;Local CIECAM - Gamma based Highlight attenuation
HISTORY_MSG_LOCAL_CIE_SMOOTHTRCREL;Local CIECAM - Relative gamma mode
HISTORY_MSG_LOCAL_OFFSETWAV;Local Wav offset
HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness
HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast
@ -1516,7 +1532,7 @@ HISTORY_MSG_LOCAL_CIE_GREYL;Local - CIECAM Green Y
HISTORY_MSG_LOCAL_CIE_ILL;Local - CIECAM TRC Illuminant
HISTORY_MSG_LOCAL_CIE_LOGCIEQ;Local - CIECAM Log encoding Q
HISTORY_MSG_LOCAL_CIE_MIDT;Local - CIECAM Mid Tones
HISTORY_MSG_LOCAL_CIE_NORM;Local - CIECAM Normalize L
HISTORY_MSG_LOCAL_CIE_NORM11;Local - CIECAM Normalize luminance 5.11
HISTORY_MSG_LOCAL_CIE_PRIM;Local - CIECAM TRC primaries
HISTORY_MSG_LOCAL_CIE_REDXL;Local - CIECAM Red X
HISTORY_MSG_LOCAL_CIE_REDYL;Local - CIECAM Red Y
@ -1525,10 +1541,11 @@ HISTORY_MSG_LOCAL_CIE_SATCIE;Local - CIECAM Saturation control
HISTORY_MSG_LOCAL_CIE_SHIFTXL;Local - CIECAM Shift x
HISTORY_MSG_LOCAL_CIE_SHIFTYL;Local - CIECAM Shift y
HISTORY_MSG_LOCAL_CIE_SIG;Local - Sigmoid
HISTORY_MSG_LOCAL_CIE_SIGADAP;Local - CIECAM Sigmoid adaptability
HISTORY_MSG_LOCAL_CIE_SIGMET;Local - CIECAM Sigmoid method
HISTORY_MSG_LOCAL_CIE_SIGADAP;Local - CIECAM Sigmoid adaptability 5.11
HISTORY_MSG_LOCAL_CIE_SIGMET;Local - CIECAM Tone mapping Q
HISTORY_MSG_LOCAL_CIE_SLOP;Local - CIECAM Slope
HISTORY_MSG_LOCAL_CIE_SLOPESMO;Local - CIECAM Gray balance
HISTORY_MSG_LOCAL_CIE_SLOPESMOQ;Local - CIECAM Gray balance
HISTORY_MSG_LOCAL_CIE_SLOPESMOB;Local - CIECAM Blue balance
HISTORY_MSG_LOCAL_CIE_SLOPESMOG;Local - CIECAM Green balance
HISTORY_MSG_LOCAL_CIE_SLOPESMOR;Local - CIECAM Red balance
@ -1554,7 +1571,21 @@ HISTORY_MSG_LOCAL_LOG_BLACKS;Local - Log Blacks distribution
HISTORY_MSG_LOCAL_LOG_COMPR;Local - Log Compress brightness
HISTORY_MSG_LOCAL_LOG_SAT;Local - Log Saturation control
HISTORY_MSG_LOCAL_LOG_WHITES;Local - Log Whites distribution
HISTORY_MSG_LOCAL_LOGCIE12;Local - CIECAM - Log encoding
HISTORY_MSG_LOCAL_PROCESSWAV;Local - Wavelets - Show modifications
HISTORY_MSG_LOCAL_TMO_SATUR;Local Exp Fattal Saturation
HISTORY_MSG_LOCAL_QJMETHOD;Local - CIECAM Tone mapping operator Q and J
HISTORY_MSG_LOCAL_SIGDACIE;Local - CIECAM Contrast 5.11
HISTORY_MSG_LOCAL_SIGTHCIE;Local - CIECAM Threshold 5.11
HISTORY_MSG_LOCAL_SIGBLCIE;Local - CIECAM Blend 5.11
HISTORY_MSG_LOCAL_SIGQ11;Local - CIECAM Sigmoid Q - deprecated
HISTORY_MSG_LOCAL_SIGQ12;Local - CIECAM Sigmoid Q and Slope based
HISTORY_MSG_LOCAL_SIGSENSICIE;Local - CIECAM Adaptability 5.11
HISTORY_MSG_LOCAL_SIGJZ11;Local - Jz Sigmoid J 5.11
HISTORY_MSG_LOCAL_SIGFORCEBW;Local - Jz White Ev and Black Ev 5.11
HISTORY_MSG_LOCAL_SIGJZ11CONT;Local - Jz Contrast 5.11
HISTORY_MSG_LOCAL_SIGJZ11GRAY;Local - Jz Threshold 5.11
HISTORY_MSG_LOCAL_SIGJZ11BL;Local - Jz Blend 5.11
HISTORY_MSG_METADATA_MODE;Metadata copy mode
HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold
HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold
@ -1968,7 +1999,7 @@ PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction
PREFERENCES_CHUNKSIZE_RAW_RCD;RCD demosaic
PREFERENCES_CHUNKSIZE_RAW_XT;Xtrans demosaic
PREFERENCES_CHUNKSIZE_RGB;RGB processing
PREFERENCES_CIE;Ciecam
PREFERENCES_CIE;CIECAM
PREFERENCES_CIEARTIF;Avoid artifacts
PREFERENCES_CLIPPINGIND;Clipping Indication
PREFERENCES_CLUTSCACHE;HaldCLUT Cache
@ -2282,6 +2313,8 @@ SORT_DESCENDING;Descending
TC_LOCALLAB_PRIM_SHIFTX;Shift x
TC_LOCALLAB_PRIM_SHIFTX_TOOLTIP;In combination with "Refine colors", allows you to:\n 1) for low values, adjust the image purity.\n 2) for higher values, carry out moderate color toning.\nBe careful not to go outside the CIE xy diagram.
TC_LOCALLAB_PRIM_SHIFTY;Shift y
TP_LOCALLAB_PROCESSWAV;Show modified areas with Wavelets
TP_LOCALLAB_PROCESSWAV_TOOLTIP;Wavelet decomposition:\nShows the changes made by the wavelet settings.\n\nYou see the changes made to the decomposed image, factoring in the deltaE and transitions, when you modify the wavelet settings. Note that this is different from Wavelet levels in the Advanced tab in which you always see the results of the decomposition.
TC_PRIM_BLUX;Bx
TC_PRIM_BLUY;By
TC_PRIM_GREX;Gx
@ -2418,7 +2451,7 @@ TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the
TP_COLORAPP_FREE;Free temp + tint + CAT02/16 +[output]
TP_COLORAPP_GAMUT;Use gamut control in L*a*b* mode
TP_COLORAPP_GEN;Settings
TP_COLORAPP_GEN_TOOLTIP;This module is based on the CIECAM color appearance models, which were designed to better simulate how human vision perceives colors under different lighting conditions, e.g. against different backgrounds. It takes into account the environment of each color and modifies its appearance to get as close as possible to human perception. It also adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic appearance is preserved across the scene and display environments.
TP_COLORAPP_GEN_TOOLTIP;This module is based on the CIECAM Color Appearance models, which were designed to better simulate how human vision perceives colors under different lighting conditions, e.g. against different backgrounds. It takes into account the environment of each color and modifies its appearance to get as close as possible to human perception. It also adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic appearance is preserved across the scene and display environments.
TP_COLORAPP_HUE;Hue (h)
TP_COLORAPP_HUE_TOOLTIP;Hue (h) is the degree to which a stimulus can be described as similar to a color described as red, green, blue and yellow.
TP_COLORAPP_IL41;D41
@ -2816,9 +2849,11 @@ TP_ICM_LABEL;Color Management
TP_ICM_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6
TP_ICM_NEUTRAL;Reset
TP_ICM_NOICM;No ICM: sRGB Output
TP_ICM_OPACITYWLI;Variable contrast
TP_ICM_OUTPUTPROFILE;Output Profile
TP_ICM_OUTPUTPROFILE_TOOLTIP;By default all RTv4 or RTv2 profiles are with TRC - sRGB: g=2.4 s=12.92\n\nWith 'ICC Profile Creator' you can generate v4 or v2 profiles with the following choices;\n-Primaries: Aces AP0, Aces AP1, AdobeRGB, Prophoto, Rec2020, sRGB, Widegamut, BestRGB, BetaRGB, BruceRGB, Custom\n-TRC: BT709, sRGB, linear, standard g=2.2, standard g=1.8, Custom\n-Illuminant: D41, D50, D55, D60, D65, D80, stdA 2856K
TP_ICM_PRIMBLU_TOOLTIP;Primaries Blue:\nsRGB x=0.15 y=0.06\nAdobe x=0.15 y=0.06\nWidegamut x=0.157 y=0.018\nRec2020 x=0.131 y=0.046\nACES P1 x=0.128 y= 0.044\nACES P0 x=0.0001 y=-0.077\nProphoto x=0.0366 y=0.0001\nBruceRGB x=0.15 y=0.06\nBeta RGB x=0.1265 y=0.0352\nBestRGB x=0.131 y=0.046
TP_ICM_PRIMFRAME;Primaries & Illuminant
TP_ICM_PRIMGRE_TOOLTIP;Primaries Green:\nsRGB x=0.3 y=0.6\nAdobe x=0.21 y=0.71\nWidegamut x=0.115 y=0.826\nRec2020 x=0.17 y=0.797\nACES P1 x=0.165 y= 0.83\nACES P0 x=0.0 y=1.0\nProphoto x=0.1596 y=0.8404\nBruceRGB x=0.28 y=0.65\nBeta RGB x=0.1986 y=0.7551\nBest RGB x=0.2150 0.7750
TP_ICM_PRIMILLUM_TOOLTIP;You can change an image from its original mode ('working profile') to a different mode ('destination primaries'). When you choose a different color mode for an image, you permanently change the color values in the image.\n\nChanging the 'primaries' is quite complex and difficult to use. It requires a lot of experimenting.\n It is capable of making exotic color adjustments as Channel Mixer primaries.\n Allows you to modify the camera calibration with Custom (sliders).
TP_ICM_PRIMRED_TOOLTIP;Primaries Red:\nsRGB x=0.64 y=0.33\nAdobe x=0.64 y=0.33\nWidegamut x=0.735 y=0.265\nRec2020 x=0.708 y=0.292\nACES P1 x=0.713 y= 0.293\nACES P0 x=0.7347 y=0.2653\nProphoto x=0.7347 y=0.2653\nBruceRGB x=0.64 y=0.33\nBeta RGB x=0.688 y=0.3112\nBestRGB x=0.7347 y=0.2653
@ -2828,11 +2863,14 @@ TP_ICM_SAVEREFERENCE;Save Reference Image
TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
TP_ICM_SMOOTHFRAME;Highlight attenuation
TP_ICM_TONECURVE;Tone curve
TP_ICM_TONECURVE_TOOLTIP;Employ the embedded DCP tone curve. The setting is only available if the selected DCP has a tone curve.
TP_ICM_TRCFRAME;Abstract Profile
TP_ICM_TRCFRAME_TOOLTIP;Also known as 'synthetic' or 'virtual' profiles, which are applied at the end of the processing pipeline (prior to CIECAM) allowing you to create custom image effects.\nYou can make changes to the:\n 'Tone response curve', which modifies the tones of the image.\n 'Illuminant', which allows you to change the profile primaries to adapt them to the shooting conditions.\n 'Destination primaries', which allows you to change the destination primaries with three main uses - channel mixer, restore image color (saturation), and calibration.\nNote: Abstract profiles take into account the built-in working profiles without modifying them. They do not work with custom working profiles.
TP_ICM_TRC_TOOLTIP;Allows you to change the default sRGB 'Tone response curve' in RT (g=2.4 s=12.92).\nThis TRC modifies the tones of the image. The RGB and Lab values, histogram and output (screen, TIF, JPG) are changed:\n-Gamma acts mainly on light tones -Slope acts mainly on dark tones.\nYou can choose any pair of 'gamma and slope' (values >1) and the algorithm will ensure that there is continuity between the linear and parabolic parts of the curve.\nA selection other than 'none' activates the 'Illuminant' and 'Destination primaries' menus.
TP_ICM_WAVFRAME;Contrast Enhancement
TP_ICM_WAVREFI;Refinement
TP_ICM_WORKINGPROFILE;Working Profile
TP_ICM_WORKING_CAT;Matrix adaptation
TP_ICM_WORKING_CAT_BRAD;Bradford
@ -2876,6 +2914,7 @@ TP_ICM_WORKING_PRIM_REC;Rec2020
TP_ICM_WORKING_PRIM_SRGB;sRGB
TP_ICM_WORKING_PRIM_TOOLTIP;Performs a gamut control. Destination primaries (Advanced) allows you to change the destination primaries to restore or change image color (saturation). The color balance is significantly preserved when the 'Working Profile' and the 'Destination primaries' are similar. 'Working Profile' is not modified.\nWhen 'Custom LA (sliders)' is selected, you can modify the values of the 3 primaries (Red, Green, and Blue) for x and y.
TP_ICM_WORKING_PRIM_WID;WideGamut
TP_ICM_WORKING_SMOOTH;Highlight attenuation
TP_ICM_WORKING_TRC;Tone response curve:
TP_ICM_WORKING_TRC_18;Prophoto g=1.8
TP_ICM_WORKING_TRC_22;Adobe g=2.2
@ -2999,12 +3038,14 @@ TP_LOCALLAB_BUTTON_DUPL;Duplicate
TP_LOCALLAB_BUTTON_REN;Rename
TP_LOCALLAB_BUTTON_VIS;Show/Hide
TP_LOCALLAB_BWEVNONE;None
TP_LOCALLAB_BWEVSIG;Activated
TP_LOCALLAB_BWEVSIGLOG;Sigmoid & Log-Encoding
TP_LOCALLAB_BWEVSIG;Sigmoid
TP_LOCALLAB_BWEVSLOP;Slope based
TP_LOCALLAB_BWEVNONE11;None
TP_LOCALLAB_BWEVSIG11;Activated
TP_LOCALLAB_BWFORCE;Uses Black Ev & White Ev
TP_LOCALLAB_CAM16PQREMAP;HDR PQ (Peak Luminance)
TP_LOCALLAB_CAM16PQREMAP_TOOLTIP;PQ (Perceptual Quantizer) adapted to CAM16 (experimental). Allows you to change the internal PQ function (usually 10000 cd/m2 - default 100 cd/m2 - disabled for 100 cd/m2).\nCan be used to adapt to different devices and images, for example, to match CAM16 processing with the maximum monitor brightness of 400cd/m2.
TP_LOCALLAB_CAM16_FRA;Cam16 Image Adjustments
TP_LOCALLAB_CAM16_FRA;CAM16 Image Adjustments
TP_LOCALLAB_CAMMODE;CAM model
TP_LOCALLAB_CAMMODE_CAM16;CAM16
TP_LOCALLAB_CAMMODE_JZ;Jz Cz Hz
@ -3029,9 +3070,13 @@ TP_LOCALLAB_CHROMASKCOL;Chroma
TP_LOCALLAB_CHROMASK_TOOLTIP;Changes the chroma of the mask if one exists (i.e. C(C) or LC(H) is activated).
TP_LOCALLAB_CHROML;Chroma (C)
TP_LOCALLAB_CHRRT;Chroma
TP_LOCALLAB_CIE;Color appearance (Cam16 & JzCzHz)
TP_LOCALLAB_CIEC;Use Ciecam environment parameters
TP_LOCALLAB_CIECAMLOG_TOOLTIP;This module is based on the CIECAM color appearance model which was designed to better simulate how human vision perceives colors under different lighting conditions.\nThe first Ciecam process 'Scene conditions' is carried out by Log encoding, it also uses 'Absolute luminance' at the time of shooting.\nThe second Ciecam process 'Image adjustments' is simplified and uses only 3 variables (local contrast, contrast J, saturation s).\nThe third Ciecam process 'Viewing conditions' adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic and contrast appearance is preserved across the display environment.
TP_LOCALLAB_CIE;Color Appearance (CAM16 & JzCzHz)
TP_LOCALLAB_CIE_SMOOTHFRAME12;Tone Mapping Operators
TP_LOCALLAB_CIE_SMOOTH_LEVELS;RGB channel Slope
TP_LOCALLAB_CIE_SMOOTH_LEVELSTRC;RGB channel TRC
TP_LOCALLAB_CIE_SMOOTH_SIG;Sigmoid based
TP_LOCALLAB_CIEC;Use CIECAM environment parameters
TP_LOCALLAB_CIECAMLOG_TOOLTIP;This module is based on the CIECAM Color Appearance model which was designed to better simulate how human vision perceives colors under different lighting conditions.\nThe first CIECAM process 'Scene conditions' is carried out by Log encoding, it also uses 'Absolute luminance' at the time of shooting.\nThe second CIECAM process 'Image adjustments' is simplified and uses only 3 variables (local contrast, contrast J, saturation s).\nThe third CIECAM process 'Viewing conditions' adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic and contrast appearance is preserved across the display environment.
TP_LOCALLAB_CIECOLORFRA;Color
TP_LOCALLAB_CIECONTFRA;Contrast
TP_LOCALLAB_CIELIGHTCONTFRA;Lighting & Contrast
@ -3040,7 +3085,7 @@ TP_LOCALLAB_CIEMODE;Change tool position
TP_LOCALLAB_CIEMODE_COM;Default
TP_LOCALLAB_CIEMODE_DR;Dynamic Range
TP_LOCALLAB_CIEMODE_TM;Tone-Mapping
TP_LOCALLAB_CIEMODE_TOOLTIP;In Default mode, Ciecam is added at the end of the process. 'Mask and modifications' and 'Recovery based on luminance mask' are available for'Cam16 and JzCzHz' at your disposal .\nYou can also integrate Ciecam into other tools if you wish (TM, Wavelet, Dynamic Range, Log Encoding). The results for these tools will be different to those without Ciecam. In this mode, you can also use 'Mask and modifications' and 'Recovery based on luminance mask'.
TP_LOCALLAB_CIEMODE_TOOLTIP;In Default mode, CIECAM is added at the end of the process. 'Mask And Modifications' and 'Recovery Based On Luminance Mask' are available for'CAM16 and JzCzHz' at your disposal .\nYou can also integrate CIECAM into other tools if you wish (TM, Wavelet, Dynamic Range, Log encoding). The results for these tools will be different to those without CIECAM. In this mode, you can also use 'Mask And Modifications' and 'Recovery Based On Luminance Mask'.
TP_LOCALLAB_CIEMODE_WAV;Wavelet
TP_LOCALLAB_CIETOOLEXP;Curves
TP_LOCALLAB_CIE_SMOOTHFRAME;Highlight Attenuation & Levels
@ -3049,7 +3094,7 @@ TP_LOCALLAB_CIE_SMOOTH_GAMMA;Slope based
TP_LOCALLAB_CIE_SMOOTH_GAMMA ROLLOFF;Gamma based
TP_LOCALLAB_CIE_SMOOTH_LEVELS;Levels
TP_LOCALLAB_CIE_SMOOTH_NONE;None
TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz)
TP_LOCALLAB_CIE_TOOLNAME;Color Appearance (CAM16 & JzCzHz)
TP_LOCALLAB_CIRCRADIUS;Spot size
TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin.
TP_LOCALLAB_CLARICRES;Merge chroma
@ -3064,9 +3109,9 @@ TP_LOCALLAB_CLARI_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLev
TP_LOCALLAB_CLIPTM;Clip restored data (gain)
TP_LOCALLAB_COFR;Color & Light
TP_LOCALLAB_COLORDE;ΔE preview color - intensity
TP_LOCALLAB_COLORDEPREV_TOOLTIP;Preview ΔE button in Settings will only work if you have activated 'Sharpening', 'Soft Light and Original Retinex', 'Blur/Grain and Denoise', 'Dehaze and Retinex', or 'Contrast by Detail Levels' in the 'Add tool to current spot' menu.\nFor others tools, the Preview ΔE button is in the tool, which allows previewing ΔE with several tools enabled. Prefer using Mask and modifications.
TP_LOCALLAB_COLORDE_TOOLTIP;Show a blue color preview for ΔE selection if negative and green if positive.\n\nMask and modifications (show modified areas without mask): show actual modifications if positive, show enhanced modifications (luminance only) with blue and yellow if negative.
TP_LOCALLAB_COLORFRAME;Dominant color
TP_LOCALLAB_COLORDEPREV_TOOLTIP;Preview ΔE button in Settings will only work if you have activated 'Sharpening', 'Soft Light and Original Retinex', 'Blur/Grain and Denoise', 'Dehaze and Retinex', or 'Contrast by Detail Levels' in the 'Add tool to current spot' menu.\nFor others tools, the Preview ΔE button is in the tool, which allows previewing ΔE with several tools enabled. Prefer using Mask And Modifications.
TP_LOCALLAB_COLORDE_TOOLTIP;Show a blue color preview for ΔE selection if negative and green if positive.\n\nMask And Modifications (show modified areas without mask): show actual modifications if positive, show enhanced modifications (luminance only) with blue and yellow if negative.
TP_LOCALLAB_COLORFRAME;Dominant Color
TP_LOCALLAB_COLORSCOPE;Scope (color tools)
TP_LOCALLAB_COLORSCOPE_TOOLTIP;Common Scope slider for Color and Light, Shadows/Highlights, Vibrance.\nOther tools have their own scope controls.
TP_LOCALLAB_COLOR_CIE;Color curve
@ -3106,8 +3151,8 @@ TP_LOCALLAB_DEHAZFRAME_TOOLTIP;Removes atmospheric haze. Increases overall satur
TP_LOCALLAB_DEHAZ_TOOLTIP;Negative values add haze.
TP_LOCALLAB_DELTAD;Delta balance
TP_LOCALLAB_DELTAEC;ΔE Image mask
TP_LOCALLAB_DENOI1_EXP;Denoise based on luminance mask
TP_LOCALLAB_DENOI2_EXP;Recovery based on luminance mask
TP_LOCALLAB_DENOI1_EXP;Denoise Based On Luminance Mask
TP_LOCALLAB_DENOI2_EXP;Recovery Based On Luminance Mask
TP_LOCALLAB_DENOIBILAT_TOOLTIP;Allows you to reduce impulse or 'salt & pepper' noise.
TP_LOCALLAB_DENOICHROC_TOOLTIP;Allows you to deal with blotches and packets of noise.
TP_LOCALLAB_DENOICHRODET_TOOLTIP;Allows you to recover chrominance detail by progressively applying a Fourier transform (DCT).
@ -3128,7 +3173,7 @@ TP_LOCALLAB_DETAIL;Local contrast
TP_LOCALLAB_DETAILFRA;Edge detection - DCT
TP_LOCALLAB_DETAILSH;Details
TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold
TP_LOCALLAB_DISAB_CIECAM;Disable Ciecam or Weak Jz surround
TP_LOCALLAB_DISAB_CIECAM;Disable CIECAM or Weak Jz surround
TP_LOCALLAB_DIVGR;Gamma
TP_LOCALLAB_DUPLSPOTNAME;Copy
TP_LOCALLAB_EDGFRA;Edge sharpness
@ -3203,7 +3248,7 @@ TP_LOCALLAB_GAM;Gamma
TP_LOCALLAB_GAMC;Gamma
TP_LOCALLAB_GAMCOL_TOOLTIP;Apply a gamma on Luminance L*a*b* datas.\nIf gamma = 3.0 Luminance 'linear' is used.
TP_LOCALLAB_GAMC_TOOLTIP;Apply a gamma on Luminance L*a*b* datas before and after treatment Pyramid 1 and Pyramid 2.\nIf gamma = 3.0 Luminance 'linear' is used.
TP_LOCALLAB_GAMFRA;Tone response curve (TRC)
TP_LOCALLAB_GAMFRA;Tone Response Curve (TRC)
TP_LOCALLAB_GAMM;Gamma
TP_LOCALLAB_GAMMASKCOL;Gamma
TP_LOCALLAB_GAMMASK_TOOLTIP;Adjusting Gamma and Slope can provide a soft and artifact-free transformation of the mask by progressively modifying 'L' to avoid any discontinuities.
@ -3258,6 +3303,7 @@ TP_LOCALLAB_JZ100;Jz reference 100cd/m2
TP_LOCALLAB_JZ100_TOOLTIP;Automatically adjusts the reference Jz 100 cd/m2 level (image signal).\nChanges the saturation level and action of 'PU adaptation' (Perceptual Uniform adaptation).
TP_LOCALLAB_JZADAP;PU adaptation
TP_LOCALLAB_JZCH;Chroma
TP_LOCALLAB_JZCH;Chroma
TP_LOCALLAB_JZCHROM;Chroma
TP_LOCALLAB_JZCLARICRES;Merge chroma Cz
TP_LOCALLAB_JZCLARILRES;Merge Jz
@ -3267,16 +3313,17 @@ TP_LOCALLAB_JZFORCE_TOOLTIP;Allows you to force the maximum Jz value to 1 for be
TP_LOCALLAB_JZFRA;Jz Cz Hz Image Adjustments
TP_LOCALLAB_JZHFRA;Curves Hz
TP_LOCALLAB_JZHJZFRA;Curve Jz(Hz)
TP_LOCALLAB_JZHUECIE;Hue Rotation
TP_LOCALLAB_JZHUECIE;Hue rotation
TP_LOCALLAB_JZLIGHT;Brightness
TP_LOCALLAB_JZLOG;Log encoding Jz
TP_LOCALLAB_JZLOGWBS_TOOLTIP;Black Ev and White Ev adjustments can be different depending on whether Log encoding or Sigmoid is used.\nFor Sigmoid, a change (increase in most cases) of White Ev may be necessary to obtain a better rendering of highlights, contrast and saturation.
TP_LOCALLAB_JZLOGWB_TOOLTIP;If Auto is enabled, it will calculate and adjust the Ev levels and the 'Mean luminance Yb%' for the spot area. The resulting values will be used by all Jz operations including 'Log Encoding Jz'.\nAlso calculates the absolute luminance at the time of shooting.
TP_LOCALLAB_JZLOGYBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed as a percentage of gray. 18% gray corresponds to a background luminance of 50% when expressed in CIE L.\nThe data is based on the mean luminance of the image.\nWhen used with Log Encoding, the mean luminance is used to determine the amount of gain that needs to be applied to the signal prior to the log encoding. Lower values of mean luminance will result in increased gain.
TP_LOCALLAB_JZLOGWB_TOOLTIP;If Auto is enabled, it will calculate and adjust the Ev levels and the 'Mean luminance Yb%' for the spot area. The resulting values will be used by all Jz operations including 'Log encoding Jz'.\nAlso calculates the absolute luminance at the time of shooting.
TP_LOCALLAB_JZLOGYBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed as a percentage of gray. 18% gray corresponds to a background luminance of 50% when expressed in CIE L.\nThe data is based on the mean luminance of the image.\nWhen used with Log encoding, the mean luminance is used to determine the amount of gain that needs to be applied to the signal prior to the Log encoding. Lower values of mean luminance will result in increased gain.
TP_LOCALLAB_JZMODECAM_TOOLTIP;Jz (only in 'Advanced' mode). Only operational if the output device (monitor) is HDR (peak luminance higher than 100 cd/m2 - ideally between 4000 and 10000 cd/m2. Black point luminance inferior to 0.005 cd/m2). This supposes a) the ICC-PCS for the screen uses Jzazbz (or XYZ), b) works in real precision, c) that the monitor is calibrated (if possible with a DCI-P3 or Rec-2020 gamut), d) that the usual gamma (sRGB or BT709) is replaced by a Perceptual Quantiser (PQ) function.
TP_LOCALLAB_JZPQFRA;Jz remapping
TP_LOCALLAB_JZPQFRA_TOOLTIP;Allows you to adapt the Jz algorithm to an SDR environment or to the characteristics (performance) of an HDR environment as follows:\n a) for luminance values between 0 and 100 cd/m2, the system behaves as if it were in an SDR environment.\n b) for luminance values between 100 and 10000 cd/m2, you can adapt the algorithm to the HDR characteristics of the image and the monitor.\n\nIf 'PQ - Peak luminance' is set to 10000, 'Jz remappping' behaves in the same way as the original Jzazbz algorithm.
TP_LOCALLAB_JZPQREMAP;PQ - Peak luminance
TP_LOCALLAB_JZPQREMAP;PQ - Peak luminance (cd/m2)
TP_LOCALLAB_JZPQREMAP_TOOLTIP;PQ (Perceptual Quantizer) - allows you to change the internal PQ function (usually 10000 cd/m2 - default 120 cd/m2).\nCan be used to adapt to different images, processes and devices.
TP_LOCALLAB_JZPQREMAP_TOOLTIP;PQ (Perceptual Quantizer) - allows you to change the internal PQ function (usually 10000 cd/m2 - default 120 cd/m2).\nCan be used to adapt to different images, processes and devices.
TP_LOCALLAB_JZQTOJ;Relative luminance
TP_LOCALLAB_JZQTOJ_TOOLTIP;Allows you to use 'Relative luminance' instead of 'Absolute luminance' - Brightness becomes Lightness.\nThe changes affect: the Brightness slider, the Contrast slider and the Jz(Jz) curve.
@ -3285,7 +3332,7 @@ TP_LOCALLAB_JZSHFRA;Shadows/Highlights Jz
TP_LOCALLAB_JZSOFTCIE;Soft radius (GuidedFilter)
TP_LOCALLAB_JZSTRSOFTCIE;Strength GuidedFilter
TP_LOCALLAB_JZTARGET_EV;Viewing Mean luminance (Yb%)
TP_LOCALLAB_JZTHRHCIE;Threshold Chroma for Jz(Hz)
TP_LOCALLAB_JZTHRHCIE;Threshold chroma for Jz(Hz)
TP_LOCALLAB_JZWAVEXP;Wavelet Jz
TP_LOCALLAB_LABBLURM;Blur Mask
TP_LOCALLAB_LABEL;Selective Editing
@ -3334,8 +3381,8 @@ TP_LOCALLAB_LOGAUTO_TOOLTIP;Pressing this button will calculate the dynamic rang
TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action of the algorithm making the shadows darker and the highlights brighter.\nWith values greater than 2, the shadows are grayer and the highlights become more washed out.
TP_LOCALLAB_LOGCATAD_TOOLTIP;Chromatic adaptation allows us to interpret a color according to its spatio-temporal environment.\nUseful when the white balance deviates significantly from the D50 reference.\nAdapts colors to the illuminant of the output device.
TP_LOCALLAB_LOGCIE;Log encoding
TP_LOCALLAB_LOGCIEQ;Log Encoding Q (with Ciecam)
TP_LOCALLAB_LOGCIEQ_TOOLTIP;Activating the checkbox allows you to switch between log encoding based on the 3 RGB channels, and log encoding based solely on Ciecams brightness (Q) channel.\nUsing the Q channel instead of the RGB channels helps avoid undesirable edge effects such as hue and saturation shifts.\nHowever, the settings are more difficult to optimise because Q is unbounded and Ciecam alters the data to take into account the surround conditions, simultaneous contrast, etc.\nYou may have to adjust the following:\n Scene conditions: Mean luminance (Yb), Whites & Blacks distribution, Black Ev, White Ev.\n Source Data Adjustments : Brightness compression, Strength.\n\nNote: when using Log Encoding (Q), be careful not to activate the Disable Ciecam option in the Scene Conditions, Surround menu.
TP_LOCALLAB_LOGCIEQ;Log encoding Q with CIECAM (deprecated)
TP_LOCALLAB_LOGCIEQ_TOOLTIP;Activating the checkbox allows you to switch between Log encoding based on the 3 RGB channels, and Log encoding based solely on CIECAMs brightness (Q) channel.\nUsing the Q channel instead of the RGB channels helps avoid undesirable edge effects such as hue and saturation shifts.\nHowever, the settings are more difficult to optimise because Q is unbounded and CIECAM alters the data to take into account the surround conditions, simultaneous contrast, etc.\nYou may have to adjust the following:\n Scene conditions: Mean luminance (Yb), Whites & Blacks distribution, Black Ev, White Ev.\n Source Data Adjustments : Brightness compression, Strength.\n\nNote: when using Log encoding (Q), be careful not to activate the Disable CIECAM option in the Scene Conditions, Surround menu.
TP_LOCALLAB_LOGCIE_TOOLTIP;Allows you to use Black Ev, White Ev, White and Black distribution, Scene Mean luminance(Yb%) and Viewing Mean luminance(Yb%) for tone-mapping using 'Log encoding' with Brightness compression.
TP_LOCALLAB_LOGCOLORFL;Colorfulness (M)
TP_LOCALLAB_LOGCOLORF_TOOLTIP;Perceived amount of hue in relation to gray.\nIndicator that a stimulus appears more or less colored.
@ -3350,16 +3397,16 @@ TP_LOCALLAB_LOGENCOD_TOOLTIP;Tone Mapping with Logarithmic encoding (ACES).\nUse
TP_LOCALLAB_LOGEXP;All tools
TP_LOCALLAB_LOGFRA;Scene Conditions
TP_LOCALLAB_LOGFRAME_TOOLTIP;Allows you to calculate and adjust the Ev levels and the 'Mean luminance Yb%' (source gray point) for the spot area. The resulting values will be used by all Lab operations and most RGB operations in the pipeline.\nAlso calculates the absolute luminance at the time of shooting.
TP_LOCALLAB_LOGIMAGE_TOOLTIP;Takes into account corresponding Ciecam variables: i.e. Contrast (J) and Saturation (s), as well as Contrast (Q), Brightness (Q), Lightness (J) and Colorfulness (M) (in Advanced mode).
TP_LOCALLAB_LOGIMAGE_TOOLTIP;Takes into account corresponding CIECAM variables: i.e. Contrast (J) and Saturation (s), as well as Contrast (Q), Brightness (Q), Lightness (J) and Colorfulness (M) (in Advanced mode).
TP_LOCALLAB_LOGLIGHTL;Lightness (J)
TP_LOCALLAB_LOGLIGHTL_TOOLTIP;Close to lightness (L*a*b*). Takes into account the increase in perceived coloration.
TP_LOCALLAB_LOGLIGHTQ;Brightness (Q)
TP_LOCALLAB_LOGLIGHTQ_TOOLTIP;Perceived amount of light emanating from a stimulus.\nIndicator that a stimulus appears to be more or less bright, clear.
TP_LOCALLAB_LOGLIN;Logarithm mode
TP_LOCALLAB_LOGPFRA;Relative Exposure Levels
TP_LOCALLAB_LOGPFRA2;Log Encoding settings
TP_LOCALLAB_LOGPFRA2;Log Encoding Settings
TP_LOCALLAB_LOGREPART;Overall strength
TP_LOCALLAB_LOGREPART_TOOLTIP;Allows you to adjust the relative strength of the log-encoded image with respect to the original image.\nDoes not affect the Ciecam component.
TP_LOCALLAB_LOGREPART_TOOLTIP;Allows you to adjust the relative strength of the log-encoded image with respect to the original image.\nDoes not affect the CIECAM component.
TP_LOCALLAB_LOGSATURL_TOOLTIP;Saturation (s) in CIECAM16 corresponds to the color of a stimulus in relation to its own brightness.\nActs mainly on medium tones and on the highlights.
TP_LOCALLAB_LOGSCENE_TOOLTIP;Corresponds to the shooting conditions.
TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\n<b>Average</b>: Average light conditions (standard). The image will not change.\n\n<b>Dim</b>: Dim conditions. The image will become slightly brighter.\n\n<b>Dark</b>: Dark conditions. The image will become more bright.
@ -3369,7 +3416,7 @@ TP_LOCALLAB_LUM;LL - CC
TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2
TP_LOCALLAB_LUMADARKEST;Darkest
TP_LOCALLAB_LUMASK;Background color/luma mask
TP_LOCALLAB_LUMASK_TOOLTIP;Adjusts the shade of gray or color of the mask background in Show Mask (Mask and modifications).
TP_LOCALLAB_LUMASK_TOOLTIP;Adjusts the shade of gray or color of the mask background in Show Mask (Mask And Modifications).
TP_LOCALLAB_LUMAWHITESEST;Lightest
TP_LOCALLAB_LUMFRA;L*a*b* standard
TP_LOCALLAB_LUMLABEL;Luma levels 0123: Mean=%1 High=%2
@ -3384,20 +3431,20 @@ TP_LOCALLAB_MASKCURVE_TOOLTIP;The 3 curves are set to 1 (maximum) by default:\nC
TP_LOCALLAB_MASKDDECAY;Decay strength
TP_LOCALLAB_MASKDECAY_TOOLTIP;Manages the rate of decay for the gray levels in the mask.\n Decay = 1 linear, Decay > 1 sharper parabolic transitions, Decay < 1 more gradual transitions.
TP_LOCALLAB_MASKDEINV_TOOLTIP;Reverses the way the algorithm interprets the mask.\nIf checked black and very light areas will be decreased.
TP_LOCALLAB_MASKDE_TOOLTIP;Used to target the denoise as a function of the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n If the mask is below the 'dark' threshold, then the Denoise will be applied progressively.\n iIf the mask is above the 'light' threshold, then the Denoise will be applied progressively.\n Between the two, the image settings without the Denoise will be maintained, unless you adjust the sliders 'Gray area luminance denoise' or 'Gray area chrominance denoise'.
TP_LOCALLAB_MASKGF_TOOLTIP;Used to target the Guided Filter as a function of the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n If the mask is below the 'dark' threshold, then the GF will be applied progressively.\n If the mask is above the 'light' threshold, then the GF will be applied progressively.\n Between the two, the image settings without the GF will be maintained.
TP_LOCALLAB_MASKDE_TOOLTIP;Used to target the denoise as a function of the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n If the mask is below the 'dark' threshold, then the Denoise will be applied progressively.\n iIf the mask is above the 'light' threshold, then the Denoise will be applied progressively.\n Between the two, the image settings without the Denoise will be maintained, unless you adjust the sliders 'Gray area luminance denoise' or 'Gray area chrominance denoise'.
TP_LOCALLAB_MASKGF_TOOLTIP;Used to target the Guided Filter as a function of the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n If the mask is below the 'dark' threshold, then the GF will be applied progressively.\n If the mask is above the 'light' threshold, then the GF will be applied progressively.\n Between the two, the image settings without the GF will be maintained.
TP_LOCALLAB_MASKH;Hue curve
TP_LOCALLAB_MASKHIGTHRESCB_TOOLTIP;Lighter-tone limit above which CBDL (Luminance only) parameters will be restored progressively to their original values prior to being modified by the CBDL settings .\n You can use certain tools in 'Mask and modifications' to change the gray levels:'Smooth radius', Gamma and Slope, 'Contrast curve'.\nUse a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESC_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'Blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESD_TOOLTIP; The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (as determined by the mask).\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESE_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable colorpicker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESL_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Log encoding settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels:'Smooth radius', 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESRETI_TOOLTIP;Lighter-tone limit above which Retinex (Luminance only) parameters will be restored progressively to their original values prior to being modified by the Retinex settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESS_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Shadows Highlights settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESTM_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Tone Mapping settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESVIB_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Vibrance and Warm Cool settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels:'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESWAV_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRES_TOOLTIP; The Guided Filter is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (as determined by the mask).\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'structure mask', 'Smooth radius', 'Gamma and slope', 'Contrast curve', 'Local contrast wavelet'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESCB_TOOLTIP;Lighter-tone limit above which CBDL (Luminance only) parameters will be restored progressively to their original values prior to being modified by the CBDL settings .\n You can use certain tools in 'Mask and Modifications' to change the gray levels:'Smooth radius', Gamma and Slope, 'Contrast curve'.\nUse a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESC_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Structure mask', 'Blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESD_TOOLTIP; The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (as determined by the mask).\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Structure mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESE_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable colorpicker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESL_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Log encoding settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels:'Smooth radius', 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESRETI_TOOLTIP;Lighter-tone limit above which Retinex (Luminance only) parameters will be restored progressively to their original values prior to being modified by the Retinex settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESS_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Shadows Highlights settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESTM_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Tone Mapping settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESVIB_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Vibrance and Warm Cool settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels:'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRESWAV_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKHIGTHRES_TOOLTIP; The Guided Filter is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (as determined by the mask).\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'structure mask', 'Smooth radius', 'Gamma and slope', 'Contrast curve', 'Local contrast wavelet'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLCTHR;Light area luminance threshold
TP_LOCALLAB_MASKLCTHR2;Light area luma threshold
TP_LOCALLAB_MASKLCTHRLOW;Dark area luminance threshold
@ -3406,29 +3453,29 @@ TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise
TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise
TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask.
TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas
TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESD_TOOLTIP;The denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (as determined by the mask).\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESE_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESL_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Log encoding settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels:'Smooth radius', 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESRETI_TOOLTIP;Dark-tone limit below which the Retinex (Luminance only) parameters will be restored progressively to their original values prior to being modified by the Retinex settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESS_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Shadows Highlights settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESTM_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Tone Mapping settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESVIB_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Vibrance and Warm Cool settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESWAV_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRES_TOOLTIP;The Guided Filter is progressively increased from 0% at the threshold setting to 100% at the maximum black value (as determined by the mask).\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKRECOL_TOOLTIP;Used to modulate the effect of the Color and Light settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Color and Light settings \n In between these two areas, the full value of the Color and Light settings will be applied.
TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESD_TOOLTIP;The denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (as determined by the mask).\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Structure mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESE_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESL_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Log encoding settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels:'Smooth radius', 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESRETI_TOOLTIP;Dark-tone limit below which the Retinex (Luminance only) parameters will be restored progressively to their original values prior to being modified by the Retinex settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESS_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Shadows Highlights settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESTM_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Tone Mapping settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESVIB_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Vibrance and Warm Cool settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRESWAV_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings.\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKLOWTHRES_TOOLTIP;The Guided Filter is progressively increased from 0% at the threshold setting to 100% at the maximum black value (as determined by the mask).\n You can use certain tools in 'Mask and Modifications' to change the gray levels: 'Structure mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
TP_LOCALLAB_MASKRECOL_TOOLTIP;Used to modulate the effect of the Color and Light settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Color and Light settings \n In between these two areas, the full value of the Color and Light settings will be applied.
TP_LOCALLAB_MASKRECOTHRES;Recovery threshold
TP_LOCALLAB_MASKREEXP_TOOLTIP;Used to modulate the effect of the 'Dynamic range and Exposure' settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' settings \n In between these two areas, the full value of the 'Dynamic range and Exposure' settings will be applied.
TP_LOCALLAB_MASKRELOG_TOOLTIP;Used to modulate the effect of the Log encoding settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Log encoding settings - can be used to restore highlights reconstructed by Color propagation \n In between these two areas, the full value of the Log encoding settings will be applied.
TP_LOCALLAB_MASKRESCB_TOOLTIP;Used to modulate the effect of the CBDL (Luminance only) settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the CBDL settings \n In between these two areas, the full value of the CBDL settings will be applied.
TP_LOCALLAB_MASKRESH_TOOLTIP;Used to modulate the effect of the Shadows Highlights settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Shadows Highlights settings \n In between these two areas, the full value of the Shadows Highlights settings will be applied.
TP_LOCALLAB_MASKRESRETI_TOOLTIP;Used to modulate the effect of the Retinex (Luminance only) settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Retinex settings \n In between these two areas, the full value of the Retinex settings will be applied.
TP_LOCALLAB_MASKRESTM_TOOLTIP;Used to modulate the effect of the Tone Mapping settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Tone Mapping settings \n In between these two areas, the full value of the Tone Mapping settings will be applied.
TP_LOCALLAB_MASKRESVIB_TOOLTIP;Used to modulate the effect of the Vibrance and Warm Cool settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Vibrance and Warm Cool settings \n In between these two areas, the full value of the Vibrance and Warm Cool settings will be applied.
TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied.
TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Enable in Mask & modifications)
TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications)
TP_LOCALLAB_MASKREEXP_TOOLTIP;Used to modulate the effect of the 'Dynamic range and Exposure' settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' settings \n In between these two areas, the full value of the 'Dynamic range and Exposure' settings will be applied.
TP_LOCALLAB_MASKRELOG_TOOLTIP;Used to modulate the effect of the Log encoding settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Log encoding settings - can be used to restore highlights reconstructed by Color propagation \n In between these two areas, the full value of the Log encoding settings will be applied.
TP_LOCALLAB_MASKRESCB_TOOLTIP;Used to modulate the effect of the CBDL (Luminance only) settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the CBDL settings \n In between these two areas, the full value of the CBDL settings will be applied.
TP_LOCALLAB_MASKRESH_TOOLTIP;Used to modulate the effect of the Shadows Highlights settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Shadows Highlights settings \n In between these two areas, the full value of the Shadows Highlights settings will be applied.
TP_LOCALLAB_MASKRESRETI_TOOLTIP;Used to modulate the effect of the Retinex (Luminance only) settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Retinex settings \n In between these two areas, the full value of the Retinex settings will be applied.
TP_LOCALLAB_MASKRESTM_TOOLTIP;Used to modulate the effect of the Tone Mapping settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Tone Mapping settings \n In between these two areas, the full value of the Tone Mapping settings will be applied.
TP_LOCALLAB_MASKRESVIB_TOOLTIP;Used to modulate the effect of the Vibrance and Warm Cool settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Vibrance and Warm Cool settings \n In between these two areas, the full value of the Vibrance and Warm Cool settings will be applied.
TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied.
TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Enable in Mask & Modifications)
TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & Modifications)
TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments.
TP_LOCALLAB_MEDIAN;Median Low
TP_LOCALLAB_MEDIANITER_TOOLTIP;The number of successive iterations carried out by the median filter.
@ -3515,12 +3562,16 @@ TP_LOCALLAB_PDEFRAME_TOOLTIP;PDE IPOL algorithm adapted for RawTherapee: gives d
TP_LOCALLAB_PRECAMGAMUT_TOOLTIP;If checked, ensures a gamut control just after primary conversion to XYZ.
TP_LOCALLAB_PRECAMREFIMAIN_TOOLTIP;Allows you to move the white-point in such a way that it approaches the dominant color. This action modifies the purity. In combination with "Shift x" and "Shift y", allows you to carry out moderate color toning.
TP_LOCALLAB_PRECAMREFI_TOOLTIP;Allows you to move the white-point in such a way that it approaches the dominant color. This action modifies the purity.
TP_LOCALLAB_PRECAM_TOOLTIP;'Source Data Adjustments' modifies the Dynamic Range using Log encoding, the tones of the image and primaries (simplified Abstract Profile), and midtones, just before the Ciecam process. These values are adjustable:\nGamma: Acts mainly on light tones\nSlope: Acts mainly on dark tones. You can choose any pair of gamma and slope (values >1) and the algorithm will ensure that there is continuity between the linear and parabolic parts of the curve.\nDestination primaries: Allows you to change the destination primaries to restore or change image color (saturation). The color balance is significantly preserved when the 'Working Profile' and the 'Destination primaries' are similar. 'Working Profile' is not modified. You can also finely adapt the primaries and the illuminant (white-point). Moving a primary away from the white point reduces saturation and vice versa. Pay attention to the gamut.
TP_LOCALLAB_PRECAM_TOOLTIP;'Source Data Adjustments' modifies the Dynamic Range using Log encoding, the tones of the image and primaries (simplified Abstract Profile), and midtones, just before the CIECAM process. These values are adjustable:\nGamma: Acts mainly on light tones\nSlope: Acts mainly on dark tones. You can choose any pair of gamma and slope (values >1) and the algorithm will ensure that there is continuity between the linear and parabolic parts of the curve.\nDestination primaries: Allows you to change the destination primaries to restore or change image color (saturation). The color balance is significantly preserved when the 'Working Profile' and the 'Destination primaries' are similar. 'Working Profile' is not modified. You can also finely adapt the primaries and the illuminant (white-point). Moving a primary away from the white point reduces saturation and vice versa. Pay attention to the gamut.
TP_LOCALLAB_PREVHIDE;Hide additional settings
TP_LOCALLAB_PREVIEW;Preview ΔE
TP_LOCALLAB_PREVSHOW;Show additional settings
TP_LOCALLAB_PRIMILLFRAME;Primaries & Illuminant
TP_LOCALLAB_PROXI;ΔE decay
TP_LOCALLAB_QJMODE;Tone Mapping Operators Q(CAM16) & J(Jz)
TP_LOCALLAB_QJMODE_511;5.11 deprecated
TP_LOCALLAB_QJMODE_512;5.12
TP_LOCALLAB_QJMODE_TOOLTIP;The tone-mapping operators that use brightness data (Q for CAM16 and J for Jz) have been modified in RawTherapee version 5.12. This allows you to select either the current or the deprecated version.
TP_LOCALLAB_QUAAGRES;Aggressive
TP_LOCALLAB_QUACONSER;Conservative
TP_LOCALLAB_QUALCURV_METHOD;Curve type
@ -3530,7 +3581,7 @@ TP_LOCALLAB_QUANONEWAV;Non-local means only
TP_LOCALLAB_RADIUS;Radius
TP_LOCALLAB_RADIUS_TOOLTIP;Uses a Fast Fourier Transform for radius > 30.
TP_LOCALLAB_RADMASKCOL;Smooth radius
TP_LOCALLAB_RECOTHRES02_TOOLTIP;If the 'Recovery threshold' value is greater than 1, the mask in Mask and Modifications takes into account any previous modifications made to the image but not those made with the current tool (e.g. Color and Light, Wavelet, Cam16, etc.)\nIf the value of the 'Recovery threshold' is less than 1, the mask in Mask and Modifications does not take into account any previous modifications to the image.\n\nIn both cases, the 'Recovery threshold' acts on the masked image as modified by the current tool (Color and Light, Wavelet, Cam16, etc.).
TP_LOCALLAB_RECOTHRES02_TOOLTIP;If the 'Recovery threshold' value is greater than 1, the mask in Mask and Modifications takes into account any previous modifications made to the image but not those made with the current tool (e.g. Color and Light, Wavelet, CAM16, etc.)\nIf the value of the 'Recovery threshold' is less than 1, the mask in Mask and Modifications does not take into account any previous modifications to the image.\n\nIn both cases, the 'Recovery threshold' acts on the masked image as modified by the current tool (Color and Light, Wavelet, CAM16, etc.).
TP_LOCALLAB_RECT;Rectangle
TP_LOCALLAB_RECURS;Recursive references
TP_LOCALLAB_RECURS_TOOLTIP;Forces the algorithm to recalculate the references after each tool is applied.\nAlso useful for working with masks.
@ -3603,73 +3654,93 @@ TP_LOCALLAB_SHARP_TOOLNAME;Sharpening
TP_LOCALLAB_SHARRADIUS;Radius
TP_LOCALLAB_SHORTC;Short Curves 'L' Mask
TP_LOCALLAB_SHORTCMASK_TOOLTIP;Short circuit the 2 curves L(L) and L(H).\nAllows you to mix the current image with the original image modified by the mask job.\nUsable with masks 2, 3, 4, 6, 7.
TP_LOCALLAB_SHOWC;Mask and modifications
TP_LOCALLAB_SHOWC;Mask And Modifications
TP_LOCALLAB_SHOWC1;Merge file
TP_LOCALLAB_SHOWCB;Mask and modifications
TP_LOCALLAB_SHOWCB;Mask And Modifications
TP_LOCALLAB_SHOWDCT;Show Fourier (ƒ) process
TP_LOCALLAB_SHOWE;Mask and modifications
TP_LOCALLAB_SHOWE;Mask And Modifications
TP_LOCALLAB_SHOWFOURIER;Fourier ƒ(dct)
TP_LOCALLAB_SHOWLAPLACE;∆ Laplacian (first)
TP_LOCALLAB_SHOWLC;Mask and modifications
TP_LOCALLAB_SHOWLC;Mask And Modifications
TP_LOCALLAB_SHOWMASK;Show mask
TP_LOCALLAB_SHOWMASKCOL_TOOLTIP;Displays masks and modifications.\nBeware, you can only view one tool mask at a time.\nShow modified image: shows the modified image including the effect of any adjustments and masks.\nShow modified areas without mask: shows the modifications before any masks are applied.\nShow modified areas with mask: shows the modifications after a mask has been applied.\nShow mask: shows the aspect of the mask including the effect of any curves and filters.\nShow spot structure: allows you to see the structure-detection mask when the 'Spot structure' cursor is activated (when available).\nNote: The mask is applied before the shape detection algorithm.
TP_LOCALLAB_SHOWMASKCOL_TOOLTIP;Displays Masks and Modifications.\nBeware, you can only view one tool mask at a time.\nShow modified image: shows the modified image including the effect of any adjustments and masks.\nShow modified areas without mask: shows the modifications before any masks are applied.\nShow modified areas with mask: shows the modifications after a mask has been applied.\nShow mask: shows the aspect of the mask including the effect of any curves and filters.\nShow spot structure: allows you to see the structure-detection mask when the 'Spot structure' cursor is activated (when available).\nNote: The mask is applied before the shape detection algorithm.
TP_LOCALLAB_SHOWMASKSOFT_TOOLTIP;Allows you to visualize the different stages of the Fourier process.\n Laplace - calculates the second derivative of the Laplace transform as a function of the threshold.\nFourier - shows the Laplacian transform with DCT.\nPoisson - shows the solution of the Poisson DCE.\nNo luminance normalization - shows result without any luminance normalization.
TP_LOCALLAB_SHOWMASKTYP1;Blur & Noise
TP_LOCALLAB_SHOWMASKTYP2;Denoise
TP_LOCALLAB_SHOWMASKTYP3;Blur & Noise + Denoise
TP_LOCALLAB_SHOWMASKTYP_TOOLTIP;Can be used with 'Mask and modifications'.\nIf 'Blur and noise' is selected, the mask cannot be used for Denoise.\nIf Denoise is selected, the mask cannot be used for 'Blur and noise'.\nIf 'Blur and noise + Denoise' is selected, the mask is shared. Note that in this case, the Scope sliders for both 'Blur and noise' and Denoise will be active so it is advisable to use the option 'Show modifications with mask' when making any adjustments.
TP_LOCALLAB_SHOWMASKTYP_TOOLTIP;Can be used with 'Mask And Modifications'.\nIf 'Blur and noise' is selected, the mask cannot be used for Denoise.\nIf Denoise is selected, the mask cannot be used for 'Blur and noise'.\nIf 'Blur and noise + Denoise' is selected, the mask is shared. Note that in this case, the Scope sliders for both 'Blur and noise' and Denoise will be active so it is advisable to use the option 'Show modifications with mask' when making any adjustments.
TP_LOCALLAB_SHOWMNONE;Show modified image
TP_LOCALLAB_SHOWMODIF;Show modified areas without mask
TP_LOCALLAB_SHOWMODIF2;Show modified areas
TP_LOCALLAB_SHOWMODIFMASK;Show modified areas with mask
TP_LOCALLAB_SHOWNORMAL;No luminance normalization
TP_LOCALLAB_SHOWPLUS;Mask and modifications (Blur & Denoise)
TP_LOCALLAB_SHOWPLUS;Mask And Modifications (Blur & Denoise)
TP_LOCALLAB_SHOWPOISSON;Poisson (pde ƒ)
TP_LOCALLAB_SHOWR;Mask and modifications
TP_LOCALLAB_SHOWR;Mask And Modifications
TP_LOCALLAB_SHOWREF;Preview ΔE
TP_LOCALLAB_SHOWS;Mask and modifications
TP_LOCALLAB_SHOWS;Mask And Modifications
TP_LOCALLAB_SHOWSTRUC;Show spot structure(Advanced)
TP_LOCALLAB_SHOWSTRUCEX;Show spot structure(Advanced)
TP_LOCALLAB_SHOWT;Mask and modifications
TP_LOCALLAB_SHOWVI;Mask and modifications
TP_LOCALLAB_SHOWT;Mask And Modifications
TP_LOCALLAB_SHOWVI;Mask And Modifications
TP_LOCALLAB_SHRESFRA;Shadows/Highlights & TRC
TP_LOCALLAB_SHTRC_TOOLTIP;Based on 'working profile' (only those provided), modifies the tones of the image by acting on a TRC (Tone Response Curve).\nGamma acts mainly on light tones.\nSlope acts mainly on dark tones.\nIt is recommended that the TRC of both devices (monitor and output profile) be sRGB (default).
TP_LOCALLAB_SH_TOOLNAME;Shadows/Highlights & Tone Equalizer
TP_LOCALLAB_SIGBLACKSSCIE;Blacks distribution
TP_LOCALLAB_SIGCIE;Sigmoid
TP_LOCALLAB_SIGFRA;Sigmoid Q
TP_LOCALLAB_SIGFRA;Sigmoid Q & Slope based
TP_LOCALLAB_SIGFRA11;Sigmoid Q (deprecated)
TP_LOCALLAB_SIGGAMJCIE;Gamma
TP_LOCALLAB_SIGJZFRA;Sigmoid Jz
TP_LOCALLAB_SIGJZFRA11;Sigmoid Jz (deprecated)
TP_LOCALLAB_SIGMAWAV;Attenuation response
TP_LOCALLAB_SIGMOID16_TOOLTIP;Allows you to simulate a tone mapping appearance using both 'Ciecam' and 'Sigmoid Q'. Sigmoid Q has three sliders:\na) Contrast acts on the shape of the sigmoid curve and consequently on the strength\nb) Threshold (Gray point) distributes the action according to the luminance\nc) Adaptability weights the action of the sigmoid by action on the internal exponential function.
TP_LOCALLAB_SIGMOIDBL;Blend
TP_LOCALLAB_SIGMOID16_TOOLTIP;Allows you to simulate a tone mapping appearance using both 'CIECAM' and 'Sigmoid Q' or 'Slope based Q'. Sigmoid Q has three sliders:\na) Contrast acts on the shape of the sigmoid curve and consequently on the strength\nb) Skew (gray point) distributes the action according to the luminance.\nc) Display White point (cd/m2) - mode advanced. \n\nSlope based has only one slider: Gray balance (slope).\n\nThis new version of Sigmoid is incompatible with previous versions 5.11 and earlier. Log encoding inside CIECAM is removed.
TP_LOCALLAB_SIGMOIDBL;Display White point (cd/m2)
TP_LOCALLAB_SIGMOIDBL11;Blend
TP_LOCALLAB_SIGMOIDLAMBDA;Contrast
TP_LOCALLAB_SIGMOIDLOGAUTO;Auto threshold
TP_LOCALLAB_SIGMOIDLOGEV_TOOLTIP;If the combo box selection 'Black Ev and White Ev' is 'Sigmoid and Log encoding' instead of 'Sigmoid only', the two algorithms 'Log encoding' and 'Sigmoid' are used together.
TP_LOCALLAB_SIGMOIDNORMCIE;Normalize Luminance
TP_LOCALLAB_SIGMOIDNORMCIE;Scale Yb Scene
TP_LOCALLAB_SIGMOIDNORMCIE11;Normalize Luminance
TP_LOCALLAB_SIGMOIDNORMCIEBLEND_TOOLTIP;Blend acts on the final aspect of the image, contrast and luminance. Ratio between original and output image.
TP_LOCALLAB_SIGMOIDNORMCIE_TOOLTIP;Reconstruct luminance so that the mean and variance of the output image take into account those of the original.\nAll the adjustments acting on J or Q are taken into account, including those which are not relative to Sigmoid Q.
TP_LOCALLAB_SIGMOIDQJ;Black Ev & White Ev
TP_LOCALLAB_SIGMOIDNORMCIEDISP_TOOLTIP;Allows you to adapt the white point to the peak luminance of the display device. Its position in the processing pipeline is not optimal so use with caution.
TP_LOCALLAB_SIGMOIDQJ;Tone mapping Q
TP_LOCALLAB_SIGMOIDQJ11;Black Ev & White Ev
TP_LOCALLAB_SIGMOIDQJCOMPRCIE_TOOLTIP;When the combo box selection 'Uses Black Ev and White Ev' is 'Sigmoid and Log encoding Q' or 'Log encoding instead of Sigmoid' checked. This algorithm compress the data above the threshold slider value. The last value stands for brightness (Q) and should be close as possible to the value 'Compression threshold' (calculate when 'Auto threshold" checked, often > 1).
TP_LOCALLAB_SIGMOIDSENSI;Adaptability
TP_LOCALLAB_SIGMOIDTH;Threshold (Gray point)
TP_LOCALLAB_SIGMOIDTH;Skew
TP_LOCALLAB_SIGMOIDTH11;Threshold (Gray point)
TP_LOCALLAB_SIGMOIDWHITESCIE_TOOLTIP;Allows you, in Automatic when the dynamic range of the image is high, to change the distribution of lights in whites and deep blacks.\nCan be used with Log encoding or Sigmoid with Black Ev and White Ev enabled.\n\nThe algorithm does not change the basic data, but acts on the components necessary to calculate the Dynamic range, Black Ev, White Ev and the Gray point.
TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a tone mapping appearance using both the 'Jz' and 'Sigmoid' function. Three sliders:\na) Contrast acts on the shape of the sigmoid curve and consequently on the strength\nb) Threshold (Gray point) distributes the action according to the luminance\nc)Blend acts on the final aspect of the image, contrast and luminance.
TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a tone mapping appearance using both the 'Jz' and 'Sigmoid' function. Two sliders:\na) Contrast acts on the shape of the sigmoid curve and consequently on the strength\nb) Skew (Gray point) distributes the action according to the luminance.\n\nThis new version of Sigmoid is incompatible with previous versions 5.11 and earlier.
TP_LOCALLAB_SIGSLOPJCIE;Slope
TP_LOCALLAB_SIGTRCCIE;Source Data Adjustments
TP_LOCALLAB_SIGWHITESCIE;Whites distribution
TP_LOCALLAB_SLOMASKCOL;Slope
TP_LOCALLAB_SLOMASK_TOOLTIP;Adjusting Gamma and Slope can provide a soft and artifact-free transformation of the mask by progressively modifying 'L' to avoid any discontinuities.
TP_LOCALLAB_SLOPESMOOTH;Gray balance (Slope)
TP_LOCALLAB_SLOPESMOOTHB;Blue balance (Slope)
TP_LOCALLAB_SLOPESMOOTHR;Red Slope
TP_LOCALLAB_SLOPESMOOTHG;Green Slope
TP_LOCALLAB_SLOPESMOOTHB;Blue Slope
TP_LOCALLAB_SLOPESMOOTRCG;Green balance (TRC)
TP_LOCALLAB_SLOPESMOOTRCR;Red balance (TRC)
TP_LOCALLAB_SLOPESMOOTHG;Green balance (Slope)
TP_LOCALLAB_SLOPESMOOTHR;Red balance (Slope)
TP_LOCALLAB_SLOPESMOOTRCB;Blue balance (TRC)
TP_LOCALLAB_SLOSH;Slope
TP_LOCALLAB_SMOOTHCIE;Highlight Attenuation
TP_LOCALLAB_SMOOTHCIE;Highlight attenuation
TP_LOCALLAB_SMOOTHCIE_LNK;Link R, G, & B
TP_LOCALLAB_SMOOTHCIETH;Attenuation threshold
TP_LOCALLAB_SMOOTHCIE_HIGH;Highlight attenuation only
TP_LOCALLAB_SMOOTHCIE_TRC;Increase gamma-based attenuation
TP_LOCALLAB_SMOOTHCIE_TRCREL;Relative gamma mode
TP_LOCALLAB_SMOOTHCIE_LUM;Luminosity mode
TP_LOCALLAB_SMOOTHCIE_SCA;Scale Yb Scene
TP_LOCALLAB_SMOOTHCIE_TOOLTIP;Completes the processing carried out by gamma, slope and midtones by causing a slight lowering of lights. Please note this does not replace Highlight reconstruction.\n\nGamma based and Slope based (Standard and Advanced) allow you to simulate a tone mapping using:\na) Scene conditions: Black-Ev, White-Ev, Mean luminance (Yb%)\nb) Viewing conditions: Mean luminance (Yb%).\n\nScale Yb Scene is function of White-Ev.
TP_LOCALLAB_SMOOTHCIE_TOOLTIP;Completes the processing carried out by gamma, slope and midtones by causing a slight lowering of lights. Please note this does not replace Highlight reconstruction.\n\nGamma based and Slope based (Standard and Advanced) allow you to simulate a tone mapping using:\na) Scene conditions: Black-Ev, White-Ev, Mean luminance (Yb%)\nb) Viewing conditions: Mean luminance (Yb%).\n\nScale Yb Scene is function of White-Ev.\n\nSigmoid applies tone mapping with Contrast and Skew and Display White point allows you to adapt the white point to the peak luminance of the display device. Its position in the processing pipeline is not optimal so use with caution.\n\nThis new version of Sigmoid is incompatible with previous versions 5.11 and earlier.
TP_LOCALLAB_SMOOTHCIE_YB;Scale Yb Viewing
TP_LOCALLAB_SMOOTHCONTSIG;Contrast
TP_LOCALLAB_SMOOTHSKEWSIG;Skew
TP_LOCALLAB_SMOOTHWHITSIG;Display White point (cd/m2)
TP_LOCALLAB_SOFT;Soft Light & Original Retinex
TP_LOCALLAB_SOFTM;Soft Light
TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Apply a Soft-light blend (identical to the global adjustment). Carry out dodge and burn using the original Retinex algorithm.
@ -3677,7 +3748,7 @@ TP_LOCALLAB_SOFTRADIUSCOL;Soft radius
TP_LOCALLAB_SOFTRADIUSCOL_TOOLTIP;Applies a guided filter to the output image to reduce possible artifacts.
TP_LOCALLAB_SOFTRETI;Reduce ΔE artifacts
TP_LOCALLAB_SOFT_TOOLNAME;Soft Light & Original Retinex
TP_LOCALLAB_SOURCE_ABS;Absolute luminance
TP_LOCALLAB_SOURCE_ABS;Absolute luminance (cd/m2)
TP_LOCALLAB_SOURCE_GRAY;Mean luminance (Yb%)
TP_LOCALLAB_SPECCASE;Specific cases
TP_LOCALLAB_SPECIAL;Special use of RGB curves
@ -3696,7 +3767,7 @@ TP_LOCALLAB_STRGRID;Strength
TP_LOCALLAB_STRUC;Structure
TP_LOCALLAB_STRUCCOL;Spot structure
TP_LOCALLAB_STRUCCOL1;Spot structure
TP_LOCALLAB_STRUCT_TOOLTIP;Uses the Sobel algorithm to take into account structure for shape detection.\nActivate 'Mask and modifications' > 'Show spot structure' (Advanced mode) to see a preview of the mask (without modifications).\n\nCan be used in conjunction with the Structure Mask, Blur Mask and 'Local contrast' (by wavelet level) to improve edge detection.\n\nEffects of adjustments using Lightness, Contrast, Chrominance, Exposure or other non-mask-related tools visible using either 'Show modified image' or 'Show modified areas with mask'.
TP_LOCALLAB_STRUCT_TOOLTIP;Uses the Sobel algorithm to take into account structure for shape detection.\nActivate 'Mask And Modifications' > 'Show spot structure' (Advanced mode) to see a preview of the mask (without modifications).\n\nCan be used in conjunction with the Structure Mask, Blur Mask and 'Local contrast' (by wavelet level) to improve edge detection.\n\nEffects of adjustments using Lightness, Contrast, Chrominance, Exposure or other non-mask-related tools visible using either 'Show modified image' or 'Show modified areas with mask'.
TP_LOCALLAB_STRUMASKCOL;Structure mask strength
TP_LOCALLAB_STRUMASK_TOOLTIP;Structure mask (slider) with the checkbox 'Structure mask as tool' unchecked: In this case a mask showing the structure will be generated even if none of the 3 curves is activated. Structure masks are available for mask (Blur and denoise') and mask(Color &amp; Light).
TP_LOCALLAB_STRUSTRMASK_TOOLTIP;Moderate use of this slider is recommended!
@ -4219,8 +4290,9 @@ TP_WAVELET_DAUB4;D4 - standard
TP_WAVELET_DAUB6;D6 - standard plus
TP_WAVELET_DAUB10;D10 - medium
TP_WAVELET_DAUB14;D14 - high
TP_WAVELET_DAUB20;D20 - high plus
TP_WAVELET_DAUBLOCAL;Wavelet Edge performance
TP_WAVELET_DAUB_TOOLTIP;Changes Daubechies coefficients:\nD4 = Standard,\nD14 = Often best performance, 10% more time-intensive.\n\nAffects edge detection as well as the general quality of the first levels. However the quality is not strictly related to this coefficient and can vary depending on image and use.
TP_WAVELET_DAUB_TOOLTIP;Changes Daubechies coefficients:\nD4 = Standard,\nD14 D20 = Often best performance, 15% more time-intensive.\n\nAffects edge detection as well as the general quality of the first levels. However the quality is not strictly related to this coefficient and can vary depending on image and use.
TP_WAVELET_DEN5THR;Guided threshold
TP_WAVELET_DENCURV;Curve
TP_WAVELET_DENL;Correction structure
@ -4294,6 +4366,7 @@ TP_WAVELET_LEVELS_TOOLTIP;Choose the number of wavelet decomposition levels for
TP_WAVELET_LEVF;Contrast
TP_WAVELET_LEVFOUR;Level 5-6 denoise and guided threshold
TP_WAVELET_LEVLABEL;Preview maximum possible levels = %1
TP_WAVELET_LEVLOCLABEL;Increase the preview window size
TP_WAVELET_LEVONE;Level 2
TP_WAVELET_LEVTHRE;Level 4
TP_WAVELET_LEVTWO;Level 3
@ -4323,6 +4396,7 @@ TP_WAVELET_NPNONE;None
TP_WAVELET_NPTYPE;Neighboring pixels
TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced.
TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between low contrast and high contrast details.\nHigh values will amplify contrast changes to the higher contrast details, whereas low values will amplify contrast changes to low contrast details.\nBy using a low Attenuation response value you can select which contrast values will be enhanced.
TP_WAVELET_OFFSFIN;Offset
TP_WAVELET_OLDSH;Algorithm using negatives values
TP_WAVELET_OPACITY;Opacity blue-yellow
TP_WAVELET_OPACITYW;Contrast balance d/v-h curve
@ -4331,6 +4405,11 @@ TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the w
TP_WAVELET_PASTEL;Pastel chroma
TP_WAVELET_PROC;Process
TP_WAVELET_PROTAB;Protection
TP_WAVELET_PYRWAVTRC;Contrast profile
TP_WAVELET_PYRWAVTRC_TOOLTIP;A series of presets defining the strength of the contrast adjustment at different detail levels. Lower presets only affect fine details while higher presets affect both fine and coarse details.\n\nNote: The effect on coarse details may not be visible in the preview if the preview is too small.
TP_WAVELET_PYRWAVTRC_CURVE_TOOLTIP;The left end of the horizontal axis corresponds to close to zero contrast, while the right end corresponds to the strongest contrast in the image. The midpoint of the horizontal axis corresponds to the predominant contrast strength across all detail levels.\n\nThe effect of this curve is reduced for higher Contrast profile presets.\n\nTo avoid harsh contrast and halos, refrain from increasing the right half of the curve.
TP_WAVELET_PYRWAVTRC_RESID_TOOLTIP;Adjusts the contrast for all detail levels larger than those covered by the selected Contrast profile.
TP_WAVELET_PYRWAVTRC_SIGMA_TOOLTIP;Stretches the width of the "Variable contrast" curve. A value of 1 means no stretching.
TP_WAVELET_QUAAGRES;Aggressive
TP_WAVELET_QUACONSER;Conservative
TP_WAVELET_RADIUS;Radius shadows - highlight
@ -4345,6 +4424,7 @@ TP_WAVELET_RESCHRO;Strength
TP_WAVELET_RESCON;Shadows
TP_WAVELET_RESCONH;Highlights
TP_WAVELET_RESID;Residual Image
TP_WAVELET_RESIDTRC;Residual contrast
TP_WAVELET_SAT;Saturated chroma
TP_WAVELET_SETTINGS;Wavelet Settings
TP_WAVELET_SHA;Sharp mask

View File

@ -16,6 +16,8 @@
*
* 2010 Ilya Popov <ilia_popov@rambler.ru>
* 2012 Emil Martinec <ejmartin@uchicago.edu>
* 2024 Jacques Desmis <jdesmis@gmail.com>
*/
#pragma once
@ -170,14 +172,14 @@ wavelet_decomposition::wavelet_decomposition(
//n=0 lopass, n=1 hipass
}
}
/* } else if(wavfilt_len == 22) {
} else if(wavfilt_len == 22) {
for (int n = 0; n < 2; n++) {
for (int i = 0; i < wavfilt_len; i++) {
wavfilt_anal[wavfilt_len * (n) + i] = Daub4_anal22[n][i];
wavfilt_synth[wavfilt_len * (n) + i] = Daub4_anal22[n][wavfilt_len - 1 - i];
//n=0 lopass, n=1 hipass
}
} */
}
} else if(wavfilt_len == 4) {
for (int n = 0; n < 2; n++) {
for (int i = 0; i < wavfilt_len; i++) {

View File

@ -15,7 +15,7 @@
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
*
* 2012 Emil Martinec <ejmartin@uchicago.edu>
* 2014 Jacques Desmis <jdesmis@gmail.com>
* 2014 - 2024 Jacques Desmis <jdesmis@gmail.com>
*/
#pragma once
@ -49,13 +49,13 @@ const float Daub4_anal16[2][16] ALIGNED16 = {//Daub 14
{ -0.0002501134f, -0.0012739524f, -0.0003037575f, 0.008874895f, 0.01171997f , -0.026891225f, -0.057001725f, 0.05042335f, 0.158417505f, -0.10175691f, -0.33218624f, 0.515574245f, -0.28039564f, 0.055049715f, 0.f, 0.f}
};
const float Daub4_anal22[2][22] ALIGNED16 = {//Daub 20
const float Daub4_anal22[2][22] ALIGNED16 = {//Daub 20 - verified good 6 - 2024
{0.f, 0.f, 0.01885858f, 0.13306109f, 0.37278535f, 0.48681406f, 0.19881887f, -0.1766681f, -0.13855494f, 0.09006372f, 0.0658015f, -0.05048328f, -0.02082962f,
0.0234849f, 0.002550218f, -0.0075895f, 0.0009866627f, 0.001408843f, -0.000484973f, -0.0000823545f, 0.0000661271f, -0.00000939f},
{0.00000939f, -0.0000661271f, 0.0000823545f, 0.000484973f, -0.001408843f, -0.0009866627f, 0.0075895f, -0.002550218f, -0.0234849f,
0.02082962f, 0.05048328f, -0.0658015f, -0.09006372f, 0.13855494f, 0.1766681f, -0.19881887f, -0.48681406f, -0.37278535f, -0.13306109f, -0.01885858f, 0.f, 0.f}
{0.00000939f, 0.0000661271f, 0.0000823545f, -0.000484973f, -0.001408843f, 0.0009866627f, 0.0075895f, 0.002550218f, -0.0234849f,
-0.02082962f, 0.05048328f, 0.0658015f, -0.09006372f, -0.13855494f, 0.1766681f, 0.19881887f, -0.48681406f, 0.37278535f, -0.13306109f, 0.01885858f, 0.f, 0.f}
};
// if necessary ?? we can add D20 !!
}

View File

@ -1091,7 +1091,8 @@ void Crop::update(int todo)
float Lhighresi46 = 0.f;
float Lnresi46 = 0.f;
float contsig = params.locallab.spots.at(sp).contsigqcie;
float slopeg = 1.f;
bool linkrgb = true;
float lightsig = params.locallab.spots.at(sp).lightsigqcie;
/* huerefp[sp] = huere;
chromarefp[sp] = chromare;
@ -1163,7 +1164,7 @@ void Crop::update(int todo)
parent->previewDeltaE, parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallsharMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask,
parent->localllogMask, parent->locall_Mask, parent->locallcieMask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
meantme, stdtme, meanretie, stdretie, fab, maxicam,rdx, rdy, grx, gry, blx, bly, meanx, meany, meanxe, meanye, prim, ill, contsig, lightsig,
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46);
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46, slopeg, linkrgb);
LocallabListener::locallabDenoiseLC denoiselc;
denoiselc.highres = highresi;
@ -1276,7 +1277,7 @@ void Crop::update(int todo)
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
meantme, stdtme, meanretie, stdretie, fab, maxicam, rdx, rdy, grx, gry, blx, bly, meanx, meany, meanxe, meanye, prim, ill, contsig, lightsig,
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46);
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46, slopeg, linkrgb);
}
@ -1449,7 +1450,6 @@ void Crop::update(int todo)
WavOpacityCurveBY waOpacityCurveBY;
WavOpacityCurveW waOpacityCurveW;
WavOpacityCurveWL waOpacityCurveWL;
LUTf wavclCurve;
params.wavelet.getCurves(wavCLVCurve, wavdenoise, wavdenoiseh, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL);
@ -1628,6 +1628,23 @@ void Crop::update(int todo)
if (params.icm.workingTRC != ColorManagementParams::WorkingTrc::NONE && params.icm.trcExp) {
const int GW = labnCrop->W;
const int GH = labnCrop->H;
if(params.icm.trcExp) {//local contrast
int level_hr = 7;
int maxlevpo = 9;
bool wavcurvecont = false;
WaveletParams WaveParams = params.wavelet;
ColorManagementParams Colparams = params.icm;
WavOpacityCurveWL icmOpacityCurveWL;
Colparams.getCurves(icmOpacityCurveWL);
parent->ipf.complete_local_contrast(labnCrop, labnCrop, WaveParams, Colparams, icmOpacityCurveWL, skip, level_hr, maxlevpo, wavcurvecont);
bool enall = false;
enall = wavcurvecont && Colparams.wavExp;//enable message only if curve enable and Expander on
if (parent->primListener) {
parent->primListener->wavlocChanged(float (maxlevpo), float (level_hr), enall);
}
}
std::unique_ptr<LabImage> provis;
const float pres = 0.01f * params.icm.preser;
if (pres > 0.f && params.icm.wprim != ColorManagementParams::Primaries::DEFAULT) {
@ -1639,8 +1656,8 @@ void Crop::update(int todo)
parent->ipf.lab2rgb(*labnCrop, *tmpImage1, params.icm.workingProfile);
const float gamtone = parent->params->icm.workingTRCGamma;
const float slotone = parent->params->icm.workingTRCSlope;
const float gamtone = parent->params->icm.wGamma;
const float slotone = parent->params->icm.wSlope;
int illum = rtengine::toUnderlying(params.icm.will);
const int prim = rtengine::toUnderlying(params.icm.wprim);

View File

@ -1402,7 +1402,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
if(params->locallab.spots.at(sp).complexcie == 2) {
params->locallab.spots.at(sp).primMethod = prof;//in Basic mode set to Working profile
}
float slopeg = 1.f;
bool linkrgb = true;
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv.get(), savenormtm.get(), savenormreti.get(), lastorigimp.get(), fw, fh, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve,
lllocalcurve, locallutili,
cllocalcurve, localclutili,
@ -1458,7 +1459,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
meantm, stdtm, meanreti, stdreti, fab, maxicam, rdx, rdy, grx, gry, blx, bly, meanx, meany, meanxe, meanye, prim, ill, contsig, lightsig,
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46);
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46, slopeg, linkrgb);
fabrefp[sp] = fab;
@ -1561,6 +1562,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
loccielc.meanylc = meany;
loccielc.meanxelc = meanxe;
loccielc.meanyelc = meanye;
loccielc.slopeglc = slopeg;
loccielc.linkrgblc = linkrgb;
locallcielc.push_back(loccielc);
LocallabListener::locallabcieSIG locciesig;
@ -2080,6 +2083,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
const int GH = nprevl->H;
std::unique_ptr<LabImage> provis;
const float pres = 0.01f * params->icm.preser;
if(params->icm.trcExp) {//local contrast
int level_hr = 7;
int maxlevpo = 9;
bool wavcurvecont = false;
WaveletParams WaveParams = params->wavelet;
ColorManagementParams Colparams = params->icm;
Colparams.getCurves(icmOpacityCurveWL);
ipf.complete_local_contrast(nprevl, nprevl, WaveParams,Colparams, icmOpacityCurveWL, scale, level_hr, maxlevpo, wavcurvecont);
}
if (pres > 0.f && params->icm.wprim != ColorManagementParams::Primaries::DEFAULT) {
provis.reset(new LabImage(GW, GH));
@ -2090,8 +2102,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
ipf.lab2rgb(*nprevl, *tmpImage1, params->icm.workingProfile);
const float gamtone = params->icm.workingTRCGamma;
const float slotone = params->icm.workingTRCSlope;
const float gamtone = params->icm.wGamma;
const float slotone = params->icm.wSlope;
int illum = toUnderlying(params->icm.will);
const int prim = toUnderlying(params->icm.wprim);

View File

@ -160,6 +160,7 @@ protected:
WavOpacityCurveBY waOpacityCurveBY;
WavOpacityCurveW waOpacityCurveW;
WavOpacityCurveWL waOpacityCurveWL;
WavOpacityCurveWL icmOpacityCurveWL;
RetinextransmissionCurve dehatransmissionCurve;
RetinexgaintransmissionCurve dehagaintransmissionCurve;

View File

@ -1228,9 +1228,11 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
Qpro = (Qpro == 0.f ? epsil : Qpro); // avoid division by zero
spro = 100.0f * sqrtf(Mpro / Qpro);
if(settings->autocielab) {//avoid artifacts
if (Jpro > 99.9f) {
Jpro = 99.9f;
}
}
Jpro = CAMBrightCurveJ[(float)(Jpro * 327.68f)]; //lightness CIECAM02 + contrast
float Sp = spro / 100.0f;

View File

@ -389,11 +389,19 @@ enum class BlurType {
bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int lllogMask, int ll_Mask, int llcieMask,
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax,
float& meantm, float& stdtm, float& meanreti, float& stdreti, float &fab, float &maxicam, float &rdx, float &rdy, float &grx, float &gry, float &blx, float &bly, float &meanx, float &meany, float &meanxe, float &meanye, int &prim, int &ill, float &contsig, float &lightsig,
float &highresi, float &nresi, float &highresi46, float &nresi46, float &Lhighresi, float &Lnresi, float &Lhighresi46, float &Lnresi46);
float &highresi, float &nresi, float &highresi46, float &nresi46, float &Lhighresi, float &Lnresi, float &Lhighresi46, float &Lnresi46, float &slopeg, bool &linkrgb);
void tone_eqcam2(ImProcFunctions *ipf, Imagefloat *rgb, int whits, int blacks, const Glib::ustring &workingProfile, double scale, bool multithread);
void tone_eqdehaz(ImProcFunctions *ipf, Imagefloat *rgb, int whits, int blacks, const Glib::ustring &workingProfile, double scale, bool multithread);
void tone_eqcam(ImProcFunctions *ipf, Imagefloat *rgb, int midtone, const Glib::ustring &workingProfile, double scale, bool multithread);
void tonemapFreeman(float target_slope, float target_sloper, float target_slopeg , float target_slopeb, float white_point, float black_point, float mid_gray_scene, float mid_gray_view, bool rolloff, float smooththreshold, bool limslope, LUTf& lut, LUTf& lutr, LUTf& lutg, LUTf& lutb, int mode, bool scale, bool takeyb);
void tonemapFreemanQ(float Q, float &Qout, float target_slope, float white_point, float black_point, float mid_gray_scene, float mid_gray_view, bool rolloff, bool takeyb);
float get_freeman_parameters(float x, bool rolloff_, float mid_gray_scene, float gamma, float slopelim, float dr, float b, float c, float kmid);
float rolloff_freeman_function(float x, float dr, float b, float c, float kmid);
float scene_referred_contrast(float x, float mid_gray_scene, float gamma);
void sigmoid_main(float r, float g, float b, float &rout, float &gout, float &bout, float middle_grey_contrast, float contrast_skewness, /* float white_point,*/ float middle_grey, float black_point, float white_point_disp);
void sigmoid_QJ(float Q, float &Qout, float middle_grey_contrast, float contrast_skewness, float middle_grey, float black_point, float white_point_disp);
void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk);
void BlurNoise_Localold(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy);
@ -417,7 +425,7 @@ enum class BlurType {
const LocwavCurve & loccomprewavCurve, bool loccomprewavutili,
float radlevblur, int process, float chromablu, float thres, float sigmadc, float deltad);
void wavlc(wavelet_decomposition& wdspot, int level_bl, int level_hl, int maxlvl, int level_hr, int level_br, float ahigh, float bhigh, float alow, float blow, float sigmalc, float strength, const LocwavCurve & locwavCurve, int numThreads);
void wavlc(wavelet_decomposition& wdspot, int level_bl, int level_hl, int maxlvl, int level_hr, int level_br, float ahigh, float bhigh, float alow, float blow, float sigmalc, float offslc, float strength, const LocwavCurve & locwavCurve, int numThreads);
void wavcbd(wavelet_decomposition &wdspot, int level_bl, int maxlvl,
const LocwavCurve& locconwavCurve, bool locconwavutili, float sigm, float offs, float chromalev, int sk);
@ -463,6 +471,7 @@ enum class BlurType {
int W_ab, int H_ab, const bool useChannelA, float *meanab, float *sigmaab);
void Evaluate2(const wavelet_decomposition &WaveletCoeffs_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN, int numThreads);
void Eval2(const float* const* WavCoeffs_L, int level, int W_L, int H_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN, int numThreads);
void complete_local_contrast (LabImage * lab, LabImage * dst, const procparams::WaveletParams & waparams, const procparams::ColorManagementParams & cmparams, const WavOpacityCurveWL & cmOpacityCurveWL, int skip, int &level_hr, int &maxlevpo, bool &wavcurvecont);
void calceffect(int level, float *mean, float *sigma, float *mea, float effect, float offs);
std::unique_ptr<LUTf> buildMeaLut(const float inVals[11], const float mea[10], float& lutFactor);

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// * 2014 - 2019 2020 - Jacques Desmis <jdesmis@gmail.com>
// * 2014 - 2019 2020 2024 - Jacques Desmis <jdesmis@gmail.com>
// * 2014 Ingo Weyrich <heckflosse@i-weyrich.de>
//
@ -396,7 +396,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
constexpr float atten123 = 0.90f;
//int DaubLen = settings->daubech ? 8 : 6;
int DaubLen;
int DaubLen = 6;
if (params->wavelet.daubcoeffmethod == "2_") {
DaubLen = 4;
@ -406,8 +406,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
DaubLen = 8;
} else if (params->wavelet.daubcoeffmethod == "10_") {
DaubLen = 12;
} else { /* if (params->wavelet.daubcoeffmethod == "14_") */
} else if (params->wavelet.daubcoeffmethod == "14_") {
DaubLen = 16;
} else if (params->wavelet.daubcoeffmethod == "20_"){
DaubLen = 22;
}
cp.CHSLmet = 1;
@ -2951,6 +2953,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
calceffect(lvl, mean, sigma, mea, effect, offs);
float lutFactor;
const float inVals[] = {0.05f, 0.2f, 0.7f, 1.f, 1.f, 0.8f, 0.6f, 0.4f, 0.2f, 0.1f, 0.01f};
const auto meaLut = buildMeaLut(inVals, mea, lutFactor);
if (!aft.get()) {
aft.reset(new float[Wlvl_L * Hlvl_L]);
@ -3400,6 +3403,343 @@ void ImProcFunctions::calckoe (const float* WavCoeffs, float gradw, float tloww,
}
}
// Copyright 6-2024 - Jacques Desmis <jdesmis@gmail.com>
void ImProcFunctions::complete_local_contrast (LabImage * lab, LabImage * dst, const procparams::WaveletParams & waparams, const procparams::ColorManagementParams & cmparams, const WavOpacityCurveWL & cmOpacityCurveWL, int skip, int &level_hr, int &maxlevpo, bool &wavcurvecont)
{
wavcurvecont = false;
if (cmOpacityCurveWL) {//activate only if one value not equal to 0.5
for (int i = 0; i < 500; i++) {
if (cmOpacityCurveWL[i] != 0.5f) {
wavcurvecont = true;
break;
}
}
}
if(wavcurvecont && cmparams.wavExp) {//enable curve and expander
#ifdef _OPENMP
const int numThreads = omp_get_max_threads();
#else
const int numThreads = 1;
#endif
int width = lab->W;
int height = lab->H;
int wavelet_lev = 7;//default
int DaubLen = 4;//type of wave
if (waparams.daubcoeffmethod == "2_") {
DaubLen = 4;
} else if (waparams.daubcoeffmethod == "4_") {
DaubLen = 6;//default
} else if (waparams.daubcoeffmethod == "6_") {
DaubLen = 8;
} else if (waparams.daubcoeffmethod == "10_") {
DaubLen = 12;
} else if (params->wavelet.daubcoeffmethod == "14_") {
DaubLen = 16;
} else if (params->wavelet.daubcoeffmethod == "20_") {
DaubLen = 22;
}
float sigmafin = cmparams.sigmatrc;//attenuation response signal
int pyrwav = cmparams.pyrwavtrc;//levels contrast profiles
float offset = cmparams.offstrc;//offset signal
int level_bl = 0;//adapted to each levels profile
int level_hl = 1;//adapted to each levels profile
int level_br = wavelet_lev;
level_hr = wavelet_lev;//to adapt if necessary
//6 contrast profiles to change range levels and rolloff for high contrast positive and negative - of course we can add anothers
//I change only values for LUT for high contrast values and not for low levels, but we can...
float inva5 = 0.8f;
float inva6 = 0.7f;
float inva7 = 0.5f;
float inva8 = 0.4f;
float inva9 = 0.3f;
float inva10 = 0.1f;
if(pyrwav == 1) {//low contrast
level_bl = 0;//0
level_hl = 1;//1
level_br = wavelet_lev - 3;//-3
level_hr = wavelet_lev - 2;//-2
} else if(pyrwav == 2) {
level_bl = 0;//0
level_hl = 0;//1
level_br = wavelet_lev - 3;//-2
level_hr = wavelet_lev - 1;//-1
if(!cmparams.wsmoothcie) {
inva5 = 1.f;
inva6 = 0.8f;
inva7 = 0.65f;
inva8 = 0.5f;
inva9 = 0.3f;
inva10 = 0.2f;
}
} else if( pyrwav == 3) {//default
level_bl = 0;
level_hl = 0;
level_br = wavelet_lev - 2;//-1
level_hr = wavelet_lev;//0
if(!cmparams.wsmoothcie) {
inva5 = 1.f; //1
inva6 = 0.9f;//0.9
inva7 = 0.7f;//0.7
inva8 = 0.6f;//0.6
inva9 = 0.4f;//0.4
inva10 = 0.2f;//0.2
}
} else if( pyrwav == 4) {
level_bl = 0;
level_hl = 0;
level_br = wavelet_lev -1;//0
level_hr = wavelet_lev +1;//0
if(!cmparams.wsmoothcie) {
inva5 = 0.9f;
inva6 = 0.8f;
inva7 = 0.6f;
inva8 = 0.5f;
inva9 = 0.3f;
inva10 = 0.1f;
}
} else if( pyrwav == 5) {
level_bl = 0;
level_hl = 0;
level_br = wavelet_lev - 1;//-1
level_hr = wavelet_lev + 2;//+1 //be careful the preview must be big enough to see the changes
if(!cmparams.wsmoothcie) {
inva5 = 0.8f;//0.85
inva6 = 0.6f;//0.75
inva7 = 0.5f;//0.55
inva8 = 0.3f;//0.45
inva9 = 0.2f;//0.3
inva10 = 0.05f;//0.1
}//last choice not used for various reasons
} else if( pyrwav == 6) {//agresive - maximum - in this case LUT are minimal to avoid artifacts -be careful the preview must be big enough to see the changes
level_bl = 0;
level_hl = 0;
level_br = wavelet_lev ;//-1
level_hr = wavelet_lev + 2;//here maximum
}
//find possible max levels in function of windows preview size.
int minwin = rtengine::min(width, height);
int maxlevelspot = 9;//maximum possible
// adapt maximum level wavelet to size of crop
while ((1 << maxlevelspot) >= minwin && maxlevelspot > 1) {
--maxlevelspot ;
}
int wavelet_level = rtengine::min(level_hr, maxlevelspot);
int maxlvl = wavelet_level;
maxlevpo = maxlvl;
//decomposition wavelet , we can change Daublen (moment wavelet) in Tab - Wavelet Levels with subsampling = 1
std::unique_ptr<wavelet_decomposition> wdspot = std::unique_ptr<wavelet_decomposition>(new wavelet_decomposition(lab->L[0], width, height, maxlvl, 1, skip, numThreads, DaubLen));
if (wdspot->memory_allocation_failed()) {//probably if not enough memory.
return;
}
//residual contrast
const float contresid = cmparams.residtrc;
if (contresid != 0) {
int W_L = wdspot->level_W(0);
int H_L = wdspot->level_H(0);
float *wav_L0 = wdspot->get_coeff0();//residual image
float maxh = 1.25f; //amplification contrast above mean, we can change 1.25f
float maxl = 1.25f; //reduction contrast under mean
float multL = contresid * (maxl - 1.f) / 100.f + 1.f;
float multH = contresid * (maxh - 1.f) / 100.f + 1.f;
double avedbl = 0.0; // use double precision for large summations
float max0 = 0.f;
float min0 = FLT_MAX;
#ifdef _OPENMP
# pragma omp parallel for reduction(+:avedbl) if (multiThread)
#endif
for (int i = 0; i < W_L * H_L; i++) {
avedbl += wav_L0[i];
}
#ifdef _OPENMP
# pragma omp parallel if (multiThread)
#endif
{
float lminL = FLT_MAX;
float lmaxL = 0.f;
#ifdef _OPENMP
# pragma omp for
#endif
for (int i = 0; i < W_L * H_L; i++) {
lminL = min(lminL, wav_L0[i]);
lmaxL = max(lmaxL, wav_L0[i]);
}
#ifdef _OPENMP
# pragma omp critical
#endif
{
min0 = min(min0, lminL);
max0 = max(max0, lmaxL);
}
}
max0 /= 327.68f;
min0 /= 327.68f;
float ave = avedbl / double(W_L * H_L);
//transitions
float av = ave / 327.68f;
float ah = (multH - 1.f) / (av - max0);
float bh = 1.f - max0 * ah;
float al = (multL - 1.f) / (av - min0);
float bl = 1.f - min0 * al;
if (max0 > 0.0) {
#ifdef _OPENMP
# pragma omp parallel for if (multiThread)
#endif
for (int i = 0; i < W_L * H_L; i++) {
if (wav_L0[i] < 32768.f) {
float prov;
if (wav_L0[i] > ave) {
float kh = ah * (wav_L0[i] / 327.68f) + bh;
prov = wav_L0[i];
wav_L0[i] = ave + kh * (wav_L0[i] - ave);
} else {
float kl = al * (wav_L0[i] / 327.68f) + bl;
prov = wav_L0[i];
wav_L0[i] = ave - kl * (ave - wav_L0[i]);
}
float diflc = wav_L0[i] - prov;
wav_L0[i] = prov + diflc;
}
}
}
}
//end residual contrast
//begin variable contrast
// declaration with 10 levels to calculate mean , mean negative, sigma, sigma negative, Max et Max negative for each level
float mean[10];
float meanN[10];
float sigma[10];
float sigmaN[10];
float MaxP[10];
float MaxN[10];
Evaluate2(*wdspot, mean, meanN, sigma, sigmaN, MaxP, MaxN, numThreads);//calculate mean sigma Max for each levels
float alow = 1.f;
float blow = 0.f;
if (level_hl != level_bl) {//transitions low levels
alow = 1.f / (level_hl - level_bl);
blow = -alow * level_bl;
}
float ahigh = 1.f;
float bhigh = 0.f;
if (level_hr != level_br) {//transitions high levels
ahigh = 1.f / (level_hr - level_br);
bhigh = -ahigh * level_br;
}
for (int dir = 1; dir < 4; dir++) {//for each direction
for (int level = level_bl; level < maxlvl; ++level) {//for each levels
int W_L = wdspot->level_W(level);
int H_L = wdspot->level_H(level);
float* const* wav_L = wdspot->level_coeffs(level);
//sigmafin = attenuation response to change signal shape
// I use only positives values to simplify calculations... possible improvment.
if (MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) {
float insigma = 0.666f; //SD standard deviation (modelisation)
float logmax = log(MaxP[level]); //log Max
float rapX = (offset * mean[level] + sigmafin * sigma[level]) / MaxP[level]; //rapport between SD / max
//offset move mean location in signal
float inx = log(insigma);
float iny = log(rapX);
float rap = inx / iny; //koef
//transitions
float asig = 0.166f / (sigma[level] * sigmafin);
float bsig = 0.5f - asig * (mean[level] * offset);
float amean = 0.5f / (mean[level] * offset);
const float effect = sigmafin;
float mea[10];//simulation using mean and sigma, to evaluate signal
calceffect(level, mean, sigma, mea, effect, offset);
float klev = 1.f;
if (level >= level_hl && level <= level_hr) {
klev = 1.f;
}
//change klev with real change in levels - see contrast profiles
//transition in beginning low levels
if (level_hl != level_bl) {
if (level >= level_bl && level < level_hl) {
klev = alow * level + blow;
}
}
//transition in max levels
if (level_hr != level_br) {
if (level > level_hr && level <= level_br) {
klev = ahigh * level + bhigh;
}
}
const float threshold = offset * mean[level] + sigmafin * sigma[level];//base signal calculation.
float lutFactor;//inva5, inva6, inva7, inva8, inva9, inva10 are define in Contrast profiles.
float inVals[] = {0.05f, 0.2f, 0.7f, 1.f, 1.f, inva5, inva6, inva7, inva8, inva9, inva10};//values to give for calculate LUT along signal : minimal near 0 or MaxP
const auto meaLut = buildMeaLut(inVals, mea, lutFactor);//build LUT
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
#endif
for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) {//for each pixel
if(cmOpacityCurveWL) {//if curve enable
float absciss;//position in curve and signal
float &val = wav_L[dir][y * W_L + x];
const float WavCL = std::fabs(wav_L[dir][y * W_L + x]);
if (WavCL >= threshold) { //for max take into account attenuation response and offset
float valcour = xlogf(fabsf(val));
float valc = valcour - logmax;
float vald = valc * rap;
absciss = xexpf(vald);
} else if (WavCL >= offset * mean[level]) {//offset only
absciss = asig * WavCL + bsig;
} else {
absciss = amean * WavCL;
}
/*
*/
float kc = klev * (cmOpacityCurveWL[absciss * 500.f] - 0.5f);
float amplieffect = kc <= 0.f ? 1.f : 1.7f;//we can change 1.5 - to 1.7 or more or less
float kinterm = 1.f + amplieffect * kc;
kinterm = kinterm <= 0.f ? 0.01f : kinterm;
val *= (1.f + (kinterm - 1.f) * (*meaLut)[WavCL * lutFactor]);//change signal (contrast) for each level, direction, with LUT.
}
}
}
}
}
}
//reconstruct lab
wdspot->reconstruct(lab->L[0], 1.f);
}
}
void ImProcFunctions::finalContAllL(float* const* WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, const cont_params &cp,
int W_L, int H_L, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL)
{

View File

@ -1105,9 +1105,9 @@ enum ProcEventCode {
Evlocallabsensicie = 1075,
Evlocallabmodecie = 1076,
Evlocallabrstprotectcie = 1077,
Evlocallabsigmoidldacie = 1078,
Evlocallabsigmoidthcie = 1079,
Evlocallabsigmoidblcie = 1080,
Evlocallabsigmoidldacie12 = 1078,
Evlocallabsigmoidthcie12 = 1079,
Evlocallabsigmoidblcie12 = 1080,
Evlocallabcomprcieauto = 1081,
Evlocallabhuecie = 1082,
Evlocallabjabcie = 1083,
@ -1115,9 +1115,9 @@ enum ProcEventCode {
Evlocallabcontjzcie = 1085,
Evlocallabchromjzcie = 1086,
Evlocallabhuejzcie = 1087,
Evlocallabsigmoidldajzcie = 1088,
Evlocallabsigmoidthjzcie = 1089,
Evlocallabsigmoidbljzcie = 1090,
Evlocallabsigmoidldajzcie12 = 1088,
Evlocallabsigmoidthjzcie12 = 1089,
Evlocallabsigmoidbljzcie12 = 1090,
Evlocallabadapjzcie = 1091,
Evlocallabmodecam = 1092,
Evlocallabhljzcie = 1093,
@ -1138,7 +1138,7 @@ enum ProcEventCode {
Evlocallabshapejz = 1108,
Evlocallabshapecz = 1109,
Evlocallabshapeczjz = 1110,
Evlocallabforcejz = 1111,
//Evlocallabforcejz = 1111,
Evlocallabpqremapcam16 = 1112,
EvLocallabEnacieMask = 1113,
EvlocallabCCmaskcieshape = 1114,
@ -1173,9 +1173,9 @@ enum ProcEventCode {
EvlocallabwhiteEvjz = 1143,
Evlocallablogjz = 1144,
Evlocallabtargetjz = 1145,
Evlocallabforcebw = 1146,
Evlocallabsigjz = 1147,
Evlocallabsigq = 1148,
Evlocallabsigybjz12 = 1146,
Evlocallabsigjz12 = 1147,
Evlocallabsigq12 = 1148,
Evlocallablogcie = 1149,
NUMOFEVENTS
};

View File

@ -2665,9 +2665,28 @@ ColorManagementParams::ColorManagementParams() :
will(Illuminant::DEFAULT),
wprim(Primaries::DEFAULT),
wcat(Cat::BRAD),
workingTRCGamma(2.4),//gamma sRGB
workingTRCSlope(12.92),
wGamma(2.4),//gamma sRGB
wSlope(12.92),
wmidtcie(0.),
sigmatrc(1.),
offstrc(1.),
residtrc(0.),
pyrwavtrc(2),
opacityCurveWLI{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
0.50,
0.35,
0.35,
0.50,
0.70,
0.35,
0.35,
1.00,
0.50,
0.35,
0.35
},
wsmoothcie(false),
redx(0.7347),
redy(0.2653),
@ -2681,6 +2700,7 @@ ColorManagementParams::ColorManagementParams() :
preser(0.),
fbw(false),
trcExp(false),
wavExp(false),
gamut(true),
labgridcieALow(0.51763),//Prophoto red = (0.7347+0.1) * 1.81818 - 1
labgridcieBLow(-0.33582),
@ -2713,9 +2733,14 @@ bool ColorManagementParams::operator ==(const ColorManagementParams& other) cons
&& will == other.will
&& wprim == other.wprim
&& wcat == other.wcat
&& workingTRCGamma == other.workingTRCGamma
&& workingTRCSlope == other.workingTRCSlope
&& wGamma == other.wGamma
&& wSlope == other.wSlope
&& wmidtcie == other.wmidtcie
&& sigmatrc == other.sigmatrc
&& offstrc == other.offstrc
&& pyrwavtrc == other.pyrwavtrc
&& residtrc == other.residtrc
&& opacityCurveWLI == other.opacityCurveWLI
&& wsmoothcie == other.wsmoothcie
&& redx == other.redx
&& redy == other.redy
@ -2739,6 +2764,7 @@ bool ColorManagementParams::operator ==(const ColorManagementParams& other) cons
&& preser == other.preser
&& fbw == other.fbw
&& trcExp == other.trcExp
&& wavExp == other.wavExp
&& gamut == other.gamut
&& aRendIntent == other.aRendIntent
&& outputProfile == other.outputProfile
@ -2746,6 +2772,13 @@ bool ColorManagementParams::operator ==(const ColorManagementParams& other) cons
&& outputBPC == other.outputBPC;
}
void ColorManagementParams::getCurves(
WavOpacityCurveWL& opacityCurveLUTWLI
) const
{
opacityCurveLUTWLI.Set(this->opacityCurveWLI);
}
bool ColorManagementParams::operator !=(const ColorManagementParams& other) const
{
return !(*this == other);
@ -4224,6 +4257,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
lcdarkness(1.0),
lclightness(1.0),
sigmalc(1.0),
offslc(1.0),
levelwav(4),
residcont(0.0),
residsha(0.0),
@ -4275,7 +4309,8 @@ LocallabParams::LocallabSpot::LocallabSpot() :
wavgradl(false),
wavcompre(false),
origlc(false),
localcontMethod("loc"),
processwav(false),
localcontMethod("wav"),
localedgMethod("thr"),
localneiMethod("low"),
locwavcurve{
@ -4289,7 +4324,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
0.35,
0.35
},
csthreshold(0, 0, 6, 6, false),
csthreshold(0, 0, 7, 5, false),
loclevwavcurve{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
@ -4709,11 +4744,11 @@ LocallabParams::LocallabSpot::LocallabSpot() :
reparcie(100.),
sensicie(60),
Autograycie(true),
forcejz(true),
forcebw(true),
sigybjz12(false),
qtoj(false),
jabcie(true),
comprcieauto(false),
normcie12(false),
normcie(true),
gamutcie(true),
bwcie(false),
@ -4722,10 +4757,17 @@ LocallabParams::LocallabSpot::LocallabSpot() :
satcie(true),
logcieq(false),
smoothcie(false),
smoothcietrc(true),
smoothcietrcrel(true),
smoothcieyb(false),
smoothcielum(false),
smoothciehigh(true),
smoothcielnk(true),
logjz(false),
sigjz12(false),
sigjz(false),
forcebw(false),
sigq12(false),
sigq(false),
chjzcie(true),
sourceGraycie(18.),
@ -4733,6 +4775,8 @@ LocallabParams::LocallabSpot::LocallabSpot() :
sursourcie("Average"),
modecie("com"),
modecam("cam16"),
modeQJ("512"),
bwevMethod12("slop"),
bwevMethod("sig"),
saturlcie(0.),
rstprotectcie(0.),
@ -4898,19 +4942,31 @@ LocallabParams::LocallabSpot::LocallabSpot() :
blackEvjz(-5.00),
whiteEvjz(10.00),
targetjz(18.0),
sigmoidldacie12(1.8),
sigmoidthcie12(0.0),
sigmoidblcie12(100.),
sigmoidldacie(0.5),
sigmoidthcie(1.2),
sigmoidsenscie(0.9),
sigmoidblcie(0.75),
comprcie(0.4),
strcielog(80.),
comprcieth(6.),
gamjcie(2.4),
smoothcieth(1.),
slopjcie(12.923),
contsig(1.15),
skewsig(0.),
whitsig(100.),
slopesmo(1.),
slopesmoq(1.),
slopesmor(1.),
slopesmog(1.),
slopesmob(1.),
kslopesmor(1.),
kslopesmog(1.),
kslopesmob(1.),
midtcie(0),
grexl(0.1596),
greyl(0.8404),
@ -4931,12 +4987,15 @@ LocallabParams::LocallabSpot::LocallabSpot() :
labgridcieWy(-0.16636),//
labgridcieMx(0.),
labgridcieMy(0.),//
whitescie(0),
whitescie(20),
blackscie(0),
illMethod("d50"),
smoothciemet("none"),
primMethod("pro"),
catMethod("brad"),
sigmoidldajzcie12(1.3),
sigmoidthjzcie12(0.),
sigmoidbljzcie12(100.),
sigmoidldajzcie(0.5),
sigmoidthjzcie(1.),
sigmoidbljzcie(1.),
@ -5555,6 +5614,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& lcdarkness == other.lcdarkness
&& lclightness == other.lclightness
&& sigmalc == other.sigmalc
&& offslc == other.offslc
&& levelwav == other.levelwav
&& residcont == other.residcont
&& residsha == other.residsha
@ -5606,6 +5666,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& wavgradl == other.wavgradl
&& wavcompre == other.wavcompre
&& origlc == other.origlc
&& processwav == other.processwav
&& localcontMethod == other.localcontMethod
&& localedgMethod == other.localedgMethod
&& localneiMethod == other.localneiMethod
@ -5751,11 +5812,11 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& reparcie == other.reparcie
&& sensicie == other.sensicie
&& Autograycie == other.Autograycie
&& forcejz == other.forcejz
&& forcebw == other.forcebw
&& sigybjz12 == other.sigybjz12
&& qtoj == other.qtoj
&& jabcie == other.jabcie
&& comprcieauto == other.comprcieauto
&& normcie12 == other.normcie12
&& normcie == other.normcie
&& gamutcie == other.gamutcie
&& bwcie == other.bwcie
@ -5764,10 +5825,17 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& satcie == other.satcie
&& logcieq == other.logcieq
&& smoothcie == other.smoothcie
&& smoothcietrc == other.smoothcietrc
&& smoothcietrcrel == other.smoothcietrcrel
&& smoothcieyb == other.smoothcieyb
&& smoothcielum == other.smoothcielum
&& smoothciehigh == other.smoothciehigh
&& smoothcielnk == other.smoothcielnk
&& logjz == other.logjz
&& sigjz12 == other.sigjz12
&& sigjz == other.sigjz
&& forcebw == other.forcebw
&& sigq12 == other.sigq12
&& sigq == other.sigq
&& chjzcie == other.chjzcie
&& sourceGraycie == other.sourceGraycie
@ -5775,6 +5843,8 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& sursourcie == other.sursourcie
&& modecie == other.modecie
&& modecam == other.modecam
&& modeQJ == other.modeQJ
&& bwevMethod12 == other.bwevMethod12
&& bwevMethod == other.bwevMethod
&& saturlcie == other.saturlcie
&& rstprotectcie == other.rstprotectcie
@ -5822,6 +5892,10 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& blackEvjz == other.blackEvjz
&& whiteEvjz == other.whiteEvjz
&& targetjz == other.targetjz
&& sigmoidldacie12 == other.sigmoidldacie12
&& sigmoidthcie12 == other.sigmoidthcie12
&& sigmoidblcie12 == other.sigmoidblcie12
&& sigmoidldacie == other.sigmoidldacie
&& sigmoidthcie == other.sigmoidthcie
&& sigmoidsenscie == other.sigmoidsenscie
@ -5830,11 +5904,19 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& strcielog == other.strcielog
&& comprcieth == other.comprcieth
&& gamjcie == other.gamjcie
&& smoothcieth == other.smoothcieth
&& slopjcie == other.slopjcie
&& contsig == other.contsig
&& skewsig == other.skewsig
&& whitsig == other.whitsig
&& slopesmo == other.slopesmo
&& slopesmoq == other.slopesmoq
&& slopesmor == other.slopesmor
&& slopesmog == other.slopesmog
&& slopesmob == other.slopesmob
&& kslopesmor == other.kslopesmor
&& kslopesmog == other.kslopesmog
&& kslopesmob == other.kslopesmob
&& midtcie == other.midtcie
&& redxl == other.redxl
&& redyl == other.redyl
@ -5861,6 +5943,9 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& smoothciemet == other.smoothciemet
&& primMethod == other.primMethod
&& catMethod == other.catMethod
&& sigmoidldajzcie12 == other.sigmoidldajzcie12
&& sigmoidthjzcie12 == other.sigmoidthjzcie12
&& sigmoidbljzcie12 == other.sigmoidbljzcie12
&& sigmoidldajzcie == other.sigmoidldajzcie
&& sigmoidthjzcie == other.sigmoidthjzcie
&& sigmoidbljzcie == other.sigmoidbljzcie
@ -7540,6 +7625,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->lcdarkness, "Locallab", "Lcdarkness_" + index_str, spot.lcdarkness, keyFile);
saveToKeyfile(!pedited || spot_edited->lclightness, "Locallab", "Lclightness_" + index_str, spot.lclightness, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmalc, "Locallab", "Sigmalc_" + index_str, spot.sigmalc, keyFile);
saveToKeyfile(!pedited || spot_edited->offslc, "Locallab", "Offslc_" + index_str, spot.offslc, keyFile);
saveToKeyfile(!pedited || spot_edited->levelwav, "Locallab", "Levelwav_" + index_str, spot.levelwav, keyFile);
saveToKeyfile(!pedited || spot_edited->residcont, "Locallab", "Residcont_" + index_str, spot.residcont, keyFile);
saveToKeyfile(!pedited || spot_edited->residsha, "Locallab", "Residsha_" + index_str, spot.residsha, keyFile);
@ -7591,6 +7677,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->wavgradl, "Locallab", "Wavgradl_" + index_str, spot.wavgradl, keyFile);
saveToKeyfile(!pedited || spot_edited->wavcompre, "Locallab", "Wavcompre_" + index_str, spot.wavcompre, keyFile);
saveToKeyfile(!pedited || spot_edited->origlc, "Locallab", "Origlc_" + index_str, spot.origlc, keyFile);
saveToKeyfile(!pedited || spot_edited->processwav, "Locallab", "processwav_" + index_str, spot.processwav, keyFile);
saveToKeyfile(!pedited || spot_edited->localcontMethod, "Locallab", "localcontMethod_" + index_str, spot.localcontMethod, keyFile);
saveToKeyfile(!pedited || spot_edited->localedgMethod, "Locallab", "localedgMethod_" + index_str, spot.localedgMethod, keyFile);
saveToKeyfile(!pedited || spot_edited->localneiMethod, "Locallab", "localneiMethod_" + index_str, spot.localneiMethod, keyFile);
@ -7736,11 +7823,11 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->reparcie, "Locallab", "Reparcie_" + index_str, spot.reparcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sensicie, "Locallab", "Sensicie_" + index_str, spot.sensicie, keyFile);
saveToKeyfile(!pedited || spot_edited->Autograycie, "Locallab", "AutoGraycie_" + index_str, spot.Autograycie, keyFile);
saveToKeyfile(!pedited || spot_edited->forcejz, "Locallab", "Forcejz_" + index_str, spot.forcejz, keyFile);
saveToKeyfile(!pedited || spot_edited->forcebw, "Locallab", "Forcebw_" + index_str, spot.forcebw, keyFile);
saveToKeyfile(!pedited || spot_edited->sigybjz12, "Locallab", "sigybjz12_" + index_str, spot.sigybjz12, keyFile);
saveToKeyfile(!pedited || spot_edited->qtoj, "Locallab", "Qtoj_" + index_str, spot.qtoj, keyFile);
saveToKeyfile(!pedited || spot_edited->jabcie, "Locallab", "jabcie_" + index_str, spot.jabcie, keyFile);
saveToKeyfile(!pedited || spot_edited->comprcieauto, "Locallab", "comprcieauto_" + index_str, spot.comprcieauto, keyFile);
saveToKeyfile(!pedited || spot_edited->normcie12, "Locallab", "normcie12_" + index_str, spot.normcie12, keyFile);
saveToKeyfile(!pedited || spot_edited->normcie, "Locallab", "normcie_" + index_str, spot.normcie, keyFile);
saveToKeyfile(!pedited || spot_edited->gamutcie, "Locallab", "gamutcie_" + index_str, spot.gamutcie, keyFile);
saveToKeyfile(!pedited || spot_edited->bwcie, "Locallab", "bwcie_" + index_str, spot.bwcie, keyFile);
@ -7749,10 +7836,17 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->satcie, "Locallab", "satcie_" + index_str, spot.satcie, keyFile);
saveToKeyfile(!pedited || spot_edited->logcieq, "Locallab", "logcieq_" + index_str, spot.logcieq, keyFile);
saveToKeyfile(!pedited || spot_edited->smoothcie, "Locallab", "smoothcie_" + index_str, spot.smoothcie, keyFile);
saveToKeyfile(!pedited || spot_edited->smoothcietrc, "Locallab", "smoothcietrc_" + index_str, spot.smoothcietrc, keyFile);
saveToKeyfile(!pedited || spot_edited->smoothcietrcrel, "Locallab", "smoothcietrcrel_" + index_str, spot.smoothcietrcrel, keyFile);
saveToKeyfile(!pedited || spot_edited->smoothcieyb, "Locallab", "smoothcieyb_" + index_str, spot.smoothcieyb, keyFile);
saveToKeyfile(!pedited || spot_edited->smoothcielum, "Locallab", "smoothcielum_" + index_str, spot.smoothcielum, keyFile);
saveToKeyfile(!pedited || spot_edited->smoothciehigh, "Locallab", "smoothciehigh_" + index_str, spot.smoothciehigh, keyFile);
saveToKeyfile(!pedited || spot_edited->smoothcielnk, "Locallab", "smoothcielnk_" + index_str, spot.smoothcielnk, keyFile);
saveToKeyfile(!pedited || spot_edited->logjz, "Locallab", "Logjz_" + index_str, spot.logjz, keyFile);
saveToKeyfile(!pedited || spot_edited->sigjz12, "Locallab", "Sigjz12_" + index_str, spot.sigjz12, keyFile);
saveToKeyfile(!pedited || spot_edited->sigjz, "Locallab", "Sigjz_" + index_str, spot.sigjz, keyFile);
saveToKeyfile(!pedited || spot_edited->forcebw, "Locallab", "Forcebw_" + index_str, spot.forcebw, keyFile);
saveToKeyfile(!pedited || spot_edited->sigq12, "Locallab", "Sigq12_" + index_str, spot.sigq12, keyFile);
saveToKeyfile(!pedited || spot_edited->sigq, "Locallab", "Sigq_" + index_str, spot.sigq, keyFile);
saveToKeyfile(!pedited || spot_edited->chjzcie, "Locallab", "chjzcie_" + index_str, spot.chjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sourceGraycie, "Locallab", "SourceGraycie_" + index_str, spot.sourceGraycie, keyFile);
@ -7760,6 +7854,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->sursourcie, "Locallab", "Sursourcie_" + index_str, spot.sursourcie, keyFile);
saveToKeyfile(!pedited || spot_edited->modecie, "Locallab", "Modecie_" + index_str, spot.modecie, keyFile);
saveToKeyfile(!pedited || spot_edited->modecam, "Locallab", "Modecam_" + index_str, spot.modecam, keyFile);
saveToKeyfile(!pedited || spot_edited->modeQJ, "Locallab", "ModeQJ_" + index_str, spot.modeQJ, keyFile);
saveToKeyfile(!pedited || spot_edited->bwevMethod12, "Locallab", "bwevMethod12_" + index_str, spot.bwevMethod12, keyFile);
saveToKeyfile(!pedited || spot_edited->bwevMethod, "Locallab", "bwevMethod_" + index_str, spot.bwevMethod, keyFile);
saveToKeyfile(!pedited || spot_edited->saturlcie, "Locallab", "Saturlcie_" + index_str, spot.saturlcie, keyFile);
saveToKeyfile(!pedited || spot_edited->rstprotectcie, "Locallab", "Rstprotectcie_" + index_str, spot.rstprotectcie, keyFile);
@ -7807,19 +7903,33 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->blackEvjz, "Locallab", "BlackEvjz_" + index_str, spot.blackEvjz, keyFile);
saveToKeyfile(!pedited || spot_edited->whiteEvjz, "Locallab", "WhiteEvjz_" + index_str, spot.whiteEvjz, keyFile);
saveToKeyfile(!pedited || spot_edited->targetjz, "Locallab", "Targetjz_" + index_str, spot.targetjz, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidldacie12, "Locallab", "Sigmoidldacie12_" + index_str, spot.sigmoidldacie12, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidthcie12, "Locallab", "Sigmoidthcie12_" + index_str, spot.sigmoidthcie12, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidblcie12, "Locallab", "Sigmoidblcie12_" + index_str, spot.sigmoidblcie12, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidldacie, "Locallab", "Sigmoidldacie_" + index_str, spot.sigmoidldacie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidthcie, "Locallab", "Sigmoidthcie_" + index_str, spot.sigmoidthcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidsenscie, "Locallab", "Sigmoidsenscie_" + index_str, spot.sigmoidsenscie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidblcie, "Locallab", "Sigmoidblcie_" + index_str, spot.sigmoidblcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidsenscie, "Locallab", "Sigmoidsenscie_" + index_str, spot.sigmoidsenscie, keyFile);
saveToKeyfile(!pedited || spot_edited->comprcie, "Locallab", "comprcie_" + index_str, spot.comprcie, keyFile);
saveToKeyfile(!pedited || spot_edited->strcielog, "Locallab", "strcielog_" + index_str, spot.strcielog, keyFile);
saveToKeyfile(!pedited || spot_edited->comprcieth, "Locallab", "comprcieth_" + index_str, spot.comprcieth, keyFile);
saveToKeyfile(!pedited || spot_edited->gamjcie, "Locallab", "gamjcie_" + index_str, spot.gamjcie, keyFile);
saveToKeyfile(!pedited || spot_edited->smoothcieth, "Locallab", "smoothcieth_" + index_str, spot.smoothcieth, keyFile);
saveToKeyfile(!pedited || spot_edited->slopjcie, "Locallab", "slopjcie_" + index_str, spot.slopjcie, keyFile);
saveToKeyfile(!pedited || spot_edited->slopesmo, "Locallab", "slopesmo_" + index_str, spot.slopesmo, keyFile);
saveToKeyfile(!pedited || spot_edited->slopesmoq, "Locallab", "slopesmoq_" + index_str, spot.slopesmoq, keyFile);
saveToKeyfile(!pedited || spot_edited->slopesmor, "Locallab", "slopesmor_" + index_str, spot.slopesmor, keyFile);
saveToKeyfile(!pedited || spot_edited->slopesmog, "Locallab", "slopesmog_" + index_str, spot.slopesmog, keyFile);
saveToKeyfile(!pedited || spot_edited->slopesmob, "Locallab", "slopesmob_" + index_str, spot.slopesmob, keyFile);
saveToKeyfile(!pedited || spot_edited->contsig, "Locallab", "contsig_" + index_str, spot.contsig, keyFile);
saveToKeyfile(!pedited || spot_edited->skewsig, "Locallab", "skewsig_" + index_str, spot.skewsig, keyFile);
saveToKeyfile(!pedited || spot_edited->whitsig, "Locallab", "whitsig_" + index_str, spot.whitsig, keyFile);
saveToKeyfile(!pedited || spot_edited->kslopesmor, "Locallab", "kslopesmor_" + index_str, spot.kslopesmor, keyFile);
saveToKeyfile(!pedited || spot_edited->kslopesmog, "Locallab", "kslopesmog_" + index_str, spot.kslopesmog, keyFile);
saveToKeyfile(!pedited || spot_edited->kslopesmob, "Locallab", "kslopesmob_" + index_str, spot.kslopesmob, keyFile);
saveToKeyfile(!pedited || spot_edited->midtcie, "Locallab", "midtcie_" + index_str, spot.midtcie, keyFile);
saveToKeyfile(!pedited || spot_edited->redxl, "Locallab", "redxl_" + index_str, spot.redxl, keyFile);
saveToKeyfile(!pedited || spot_edited->redyl, "Locallab", "redyl_" + index_str, spot.redyl, keyFile);
@ -7848,9 +7958,13 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->smoothciemet, "Locallab", "smoothciemet_" + index_str, spot.smoothciemet, keyFile);
saveToKeyfile(!pedited || spot_edited->primMethod, "Locallab", "primMethod_" + index_str, spot.primMethod, keyFile);
saveToKeyfile(!pedited || spot_edited->catMethod, "Locallab", "catMethod_" + index_str, spot.catMethod, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidldajzcie12, "Locallab", "Sigmoidldajzcie12_" + index_str, spot.sigmoidldajzcie12, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidthjzcie12, "Locallab", "Sigmoidthjzcie12_" + index_str, spot.sigmoidthjzcie12, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidbljzcie12, "Locallab", "Sigmoidbljzcie12_" + index_str, spot.sigmoidbljzcie12, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidldajzcie, "Locallab", "Sigmoidldajzcie_" + index_str, spot.sigmoidldajzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidthjzcie, "Locallab", "Sigmoidthjzcie_" + index_str, spot.sigmoidthjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidbljzcie, "Locallab", "Sigmoidbljzcie_" + index_str, spot.sigmoidbljzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->contqcie, "Locallab", "Contqcie_" + index_str, spot.contqcie, keyFile);
saveToKeyfile(!pedited || spot_edited->contsigqcie, "Locallab", "Contsigqcie_" + index_str, spot.contsigqcie, keyFile);
saveToKeyfile(!pedited || spot_edited->colorflcie, "Locallab", "Colorflcie_" + index_str, spot.colorflcie, keyFile);
@ -8037,9 +8151,15 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
keyFile
);
saveToKeyfile(!pedited || pedited->icm.workingTRCGamma, "Color Management", "WorkingTRCGamma", icm.workingTRCGamma, keyFile);
saveToKeyfile(!pedited || pedited->icm.workingTRCSlope, "Color Management", "WorkingTRCSlope", icm.workingTRCSlope, keyFile);
saveToKeyfile(!pedited || pedited->icm.opacityCurveWLI, "Color Management", "OpacityCurveWLI", icm.opacityCurveWLI, keyFile);
saveToKeyfile(!pedited || pedited->icm.wGamma, "Color Management", "WorkingTRCGamma", icm.wGamma, keyFile);
saveToKeyfile(!pedited || pedited->icm.wSlope, "Color Management", "WorkingTRCSlope", icm.wSlope, keyFile);
saveToKeyfile(!pedited || pedited->icm.wmidtcie, "Color Management", "Wmidtcie", icm.wmidtcie, keyFile);
saveToKeyfile(!pedited || pedited->icm.sigmatrc, "Color Management", "Sigmatrc", icm.sigmatrc, keyFile);
saveToKeyfile(!pedited || pedited->icm.offstrc, "Color Management", "Offstrc", icm.offstrc, keyFile);
saveToKeyfile(!pedited || pedited->icm.residtrc, "Color Management", "Residtrc", icm.residtrc, keyFile);
saveToKeyfile(!pedited || pedited->icm.pyrwavtrc, "Color Management", "Pyrwavtrc", icm.pyrwavtrc, keyFile);
saveToKeyfile(!pedited || pedited->icm.wsmoothcie, "Color Management", "Wsmoothcie", icm.wsmoothcie, keyFile);
saveToKeyfile(!pedited || pedited->icm.redx, "Color Management", "Redx", icm.redx, keyFile);
saveToKeyfile(!pedited || pedited->icm.redy, "Color Management", "Redy", icm.redy, keyFile);
@ -8063,6 +8183,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->icm.preser, "Color Management", "Preser", icm.preser, keyFile);
saveToKeyfile(!pedited || pedited->icm.fbw, "Color Management", "Fbw", icm.fbw, keyFile);
saveToKeyfile(!pedited || pedited->icm.trcExp, "Color Management", "TrcExp", icm.trcExp, keyFile);
saveToKeyfile(!pedited || pedited->icm.wavExp, "Color Management", "WavExp", icm.wavExp, keyFile);
saveToKeyfile(!pedited || pedited->icm.gamut, "Color Management", "Gamut", icm.gamut, keyFile);
saveToKeyfile(!pedited || pedited->icm.outputProfile, "Color Management", "OutputProfile", icm.outputProfile, keyFile);
saveToKeyfile(
@ -9959,6 +10080,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Lcdarkness_" + index_str, spot.lcdarkness, spotEdited.lcdarkness);
assignFromKeyfile(keyFile, "Locallab", "Lclightness_" + index_str, spot.lclightness, spotEdited.lclightness);
assignFromKeyfile(keyFile, "Locallab", "Sigmalc_" + index_str, spot.sigmalc, spotEdited.sigmalc);
assignFromKeyfile(keyFile, "Locallab", "Offslc_" + index_str, spot.offslc, spotEdited.offslc);
assignFromKeyfile(keyFile, "Locallab", "Levelwav_" + index_str, spot.levelwav, spotEdited.levelwav);
assignFromKeyfile(keyFile, "Locallab", "Residcont_" + index_str, spot.residcont, spotEdited.residcont);
assignFromKeyfile(keyFile, "Locallab", "Residsha_" + index_str, spot.residsha, spotEdited.residsha);
@ -10018,6 +10140,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Wavgradl_" + index_str, spot.wavgradl, spotEdited.wavgradl);
assignFromKeyfile(keyFile, "Locallab", "Wavcompre_" + index_str, spot.wavcompre, spotEdited.wavcompre);
assignFromKeyfile(keyFile, "Locallab", "Origlc_" + index_str, spot.origlc, spotEdited.origlc);
assignFromKeyfile(keyFile, "Locallab", "processwav_" + index_str, spot.processwav, spotEdited.processwav);
assignFromKeyfile(keyFile, "Locallab", "localcontMethod_" + index_str, spot.localcontMethod, spotEdited.localcontMethod);
assignFromKeyfile(keyFile, "Locallab", "localedgMethod_" + index_str, spot.localedgMethod, spotEdited.localedgMethod);
assignFromKeyfile(keyFile, "Locallab", "localneiMethod_" + index_str, spot.localneiMethod, spotEdited.localneiMethod);
@ -10217,11 +10340,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Reparcie_" + index_str, spot.reparcie, spotEdited.reparcie);
assignFromKeyfile(keyFile, "Locallab", "Sensicie_" + index_str, spot.sensicie, spotEdited.sensicie);
assignFromKeyfile(keyFile, "Locallab", "AutoGraycie_" + index_str, spot.Autograycie, spotEdited.Autograycie);
assignFromKeyfile(keyFile, "Locallab", "Forcejz_" + index_str, spot.forcejz, spotEdited.forcejz);
assignFromKeyfile(keyFile, "Locallab", "Forcebw_" + index_str, spot.forcebw, spotEdited.forcebw);
assignFromKeyfile(keyFile, "Locallab", "sigybjz12_" + index_str, spot.sigybjz12, spotEdited.sigybjz12);
assignFromKeyfile(keyFile, "Locallab", "Qtoj_" + index_str, spot.qtoj, spotEdited.qtoj);
assignFromKeyfile(keyFile, "Locallab", "jabcie_" + index_str, spot.jabcie, spotEdited.jabcie);
assignFromKeyfile(keyFile, "Locallab", "comprcieauto_" + index_str, spot.comprcieauto, spotEdited.comprcieauto);
assignFromKeyfile(keyFile, "Locallab", "normcie12_" + index_str, spot.normcie12, spotEdited.normcie12);
assignFromKeyfile(keyFile, "Locallab", "normcie_" + index_str, spot.normcie, spotEdited.normcie);
assignFromKeyfile(keyFile, "Locallab", "gamutcie_" + index_str, spot.gamutcie, spotEdited.gamutcie);
assignFromKeyfile(keyFile, "Locallab", "bwcie_" + index_str, spot.bwcie, spotEdited.bwcie);
@ -10230,17 +10353,56 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "satcie_" + index_str, spot.satcie, spotEdited.satcie);
assignFromKeyfile(keyFile, "Locallab", "logcieq_" + index_str, spot.logcieq, spotEdited.logcieq);
assignFromKeyfile(keyFile, "Locallab", "smoothcie_" + index_str, spot.smoothcie, spotEdited.smoothcie);
assignFromKeyfile(keyFile, "Locallab", "smoothcietrc_" + index_str, spot.smoothcietrc, spotEdited.smoothcietrc);
assignFromKeyfile(keyFile, "Locallab", "smoothcietrcrel_" + index_str, spot.smoothcietrcrel, spotEdited.smoothcietrcrel);
assignFromKeyfile(keyFile, "Locallab", "smoothcieyb_" + index_str, spot.smoothcieyb, spotEdited.smoothcieyb);
assignFromKeyfile(keyFile, "Locallab", "smoothcielum_" + index_str, spot.smoothcielum, spotEdited.smoothcielum);
assignFromKeyfile(keyFile, "Locallab", "smoothciehigh_" + index_str, spot.smoothciehigh, spotEdited.smoothciehigh);
assignFromKeyfile(keyFile, "Locallab", "smoothcielnk_" + index_str, spot.smoothcielnk, spotEdited.smoothcielnk);
assignFromKeyfile(keyFile, "Locallab", "Logjz_" + index_str, spot.logjz, spotEdited.logjz);
assignFromKeyfile(keyFile, "Locallab", "Sigjz12_" + index_str, spot.sigjz12, spotEdited.sigjz12);
assignFromKeyfile(keyFile, "Locallab", "Sigjz_" + index_str, spot.sigjz, spotEdited.sigjz);
assignFromKeyfile(keyFile, "Locallab", "Forcebw_" + index_str, spot.forcebw, spotEdited.forcebw);
assignFromKeyfile(keyFile, "Locallab", "ModeQJ_" + index_str, spot.modeQJ, spotEdited.modeQJ);
assignFromKeyfile(keyFile, "Locallab", "Modecie_" + index_str, spot.modecie, spotEdited.modecie);
assignFromKeyfile(keyFile, "Locallab", "Modecam_" + index_str, spot.modecam, spotEdited.modecam);
assignFromKeyfile(keyFile, "Locallab", "Sigq12_" + index_str, spot.sigq12, spotEdited.sigq12);
assignFromKeyfile(keyFile, "Locallab", "Sigq_" + index_str, spot.sigq, spotEdited.sigq);
if (ppVersion < 352) {//change behavior Log encoding Q and Sigmoid Q and SigmoidJz when 'in the loop' Cam16
if (keyFile.has_key("Locallab", "Sigq_" + index_str)) {
if (spot.sigq == true) {
spot.modeQJ = "511";
spot.sigq12 = false;
spotEdited.modeQJ = true;
spotEdited.sigq12 = true;
}
}
if (keyFile.has_key("Locallab", "logcieq_" + index_str)) {
if (spot.logcieq == true) {
spot.modeQJ = "511";
spotEdited.modeQJ = true;
spotEdited.logcieq = true;
}
}
if (keyFile.has_key("Locallab", "Sigjz_" + index_str)) {
if (spot.sigjz == true) {
spot.modeQJ = "511";
spot.sigjz12 = false;
spotEdited.modeQJ = true;
spotEdited.sigjz12 = true;
}
}
}
assignFromKeyfile(keyFile, "Locallab", "chjzcie_" + index_str, spot.chjzcie, spotEdited.chjzcie);
assignFromKeyfile(keyFile, "Locallab", "SourceGraycie_" + index_str, spot.sourceGraycie, spotEdited.sourceGraycie);
assignFromKeyfile(keyFile, "Locallab", "Sourceabscie_" + index_str, spot.sourceabscie, spotEdited.sourceabscie);
assignFromKeyfile(keyFile, "Locallab", "Sursourcie_" + index_str, spot.sursourcie, spotEdited.sursourcie);
assignFromKeyfile(keyFile, "Locallab", "Modecie_" + index_str, spot.modecie, spotEdited.modecie);
assignFromKeyfile(keyFile, "Locallab", "Modecam_" + index_str, spot.modecam, spotEdited.modecam);
assignFromKeyfile(keyFile, "Locallab", "bwevMethod12_" + index_str, spot.bwevMethod12, spotEdited.bwevMethod12);
assignFromKeyfile(keyFile, "Locallab", "bwevMethod_" + index_str, spot.bwevMethod, spotEdited.bwevMethod);
assignFromKeyfile(keyFile, "Locallab", "Saturlcie_" + index_str, spot.saturlcie, spotEdited.saturlcie);
assignFromKeyfile(keyFile, "Locallab", "Rstprotectcie_" + index_str, spot.rstprotectcie, spotEdited.rstprotectcie);
@ -10298,19 +10460,34 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "BlackEvjz_" + index_str, spot.blackEvjz, spotEdited.blackEvjz);
assignFromKeyfile(keyFile, "Locallab", "WhiteEvjz_" + index_str, spot.whiteEvjz, spotEdited.whiteEvjz);
assignFromKeyfile(keyFile, "Locallab", "Targetjz_" + index_str, spot.targetjz, spotEdited.targetjz);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidldacie12_" + index_str, spot.sigmoidldacie12, spotEdited.sigmoidldacie12);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidthcie12_" + index_str, spot.sigmoidthcie12, spotEdited.sigmoidthcie12);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidblcie12_" + index_str, spot.sigmoidblcie12, spotEdited.sigmoidblcie12);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidldacie_" + index_str, spot.sigmoidldacie, spotEdited.sigmoidldacie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidthcie_" + index_str, spot.sigmoidthcie, spotEdited.sigmoidthcie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidsenscie_" + index_str, spot.sigmoidsenscie, spotEdited.sigmoidsenscie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidblcie_" + index_str, spot.sigmoidblcie, spotEdited.sigmoidblcie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidsenscie_" + index_str, spot.sigmoidsenscie, spotEdited.sigmoidsenscie);
assignFromKeyfile(keyFile, "Locallab", "comprcie_" + index_str, spot.comprcie, spotEdited.comprcie);
assignFromKeyfile(keyFile, "Locallab", "strcielog_" + index_str, spot.strcielog, spotEdited.strcielog);
assignFromKeyfile(keyFile, "Locallab", "comprcieth_" + index_str, spot.comprcieth, spotEdited.comprcieth);
assignFromKeyfile(keyFile, "Locallab", "gamjcie_" + index_str, spot.gamjcie, spotEdited.gamjcie);
assignFromKeyfile(keyFile, "Locallab", "smoothcieth_" + index_str, spot.smoothcieth, spotEdited.smoothcieth);
assignFromKeyfile(keyFile, "Locallab", "slopjcie_" + index_str, spot.slopjcie, spotEdited.slopjcie);
assignFromKeyfile(keyFile, "Locallab", "contsig_" + index_str, spot.contsig, spotEdited.contsig);
assignFromKeyfile(keyFile, "Locallab", "skewsig_" + index_str, spot.skewsig, spotEdited.skewsig);
assignFromKeyfile(keyFile, "Locallab", "whitsig_" + index_str, spot.whitsig, spotEdited.whitsig);
assignFromKeyfile(keyFile, "Locallab", "slopesmo_" + index_str, spot.slopesmo, spotEdited.slopesmo);
assignFromKeyfile(keyFile, "Locallab", "slopesmoq_" + index_str, spot.slopesmoq, spotEdited.slopesmoq);
assignFromKeyfile(keyFile, "Locallab", "slopesmor_" + index_str, spot.slopesmor, spotEdited.slopesmor);
assignFromKeyfile(keyFile, "Locallab", "slopesmog_" + index_str, spot.slopesmog, spotEdited.slopesmog);
assignFromKeyfile(keyFile, "Locallab", "midtcie_" + index_str, spot.midtcie, spotEdited.midtcie);
assignFromKeyfile(keyFile, "Locallab", "slopesmob_" + index_str, spot.slopesmob, spotEdited.slopesmob);
assignFromKeyfile(keyFile, "Locallab", "kslopesmor_" + index_str, spot.kslopesmor, spotEdited.kslopesmor);
assignFromKeyfile(keyFile, "Locallab", "kslopesmog_" + index_str, spot.kslopesmog, spotEdited.kslopesmog);
assignFromKeyfile(keyFile, "Locallab", "kslopesmob_" + index_str, spot.kslopesmob, spotEdited.kslopesmob);
assignFromKeyfile(keyFile, "Locallab", "grexl_" + index_str, spot.grexl, spotEdited.grexl);
assignFromKeyfile(keyFile, "Locallab", "greyl_" + index_str, spot.greyl, spotEdited.greyl);
assignFromKeyfile(keyFile, "Locallab", "bluxl_" + index_str, spot.bluxl, spotEdited.bluxl);
@ -10337,9 +10514,13 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "smoothciemet_" + index_str, spot.smoothciemet, spotEdited.smoothciemet);
assignFromKeyfile(keyFile, "Locallab", "primMethod_" + index_str, spot.primMethod, spotEdited.primMethod);
assignFromKeyfile(keyFile, "Locallab", "catMethod_" + index_str, spot.catMethod, spotEdited.catMethod);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidldajzcie12_" + index_str, spot.sigmoidldajzcie12, spotEdited.sigmoidldajzcie12);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidthjzcie12_" + index_str, spot.sigmoidthjzcie12, spotEdited.sigmoidthjzcie12);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidbljzcie12_" + index_str, spot.sigmoidbljzcie12, spotEdited.sigmoidbljzcie12);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidldajzcie_" + index_str, spot.sigmoidldajzcie, spotEdited.sigmoidldajzcie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidthjzcie_" + index_str, spot.sigmoidthjzcie, spotEdited.sigmoidthjzcie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidbljzcie_" + index_str, spot.sigmoidbljzcie, spotEdited.sigmoidbljzcie);
assignFromKeyfile(keyFile, "Locallab", "Contqcie_" + index_str, spot.contqcie, spotEdited.contqcie);
assignFromKeyfile(keyFile, "Locallab", "Contsigqcie_" + index_str, spot.contsigqcie, spotEdited.contsigqcie);
assignFromKeyfile(keyFile, "Locallab", "Colorflcie_" + index_str, spot.colorflcie, spotEdited.colorflcie);
@ -10571,6 +10752,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Color Management", "ApplyHueSatMap", icm.applyHueSatMap, pedited->icm.applyHueSatMap);
assignFromKeyfile(keyFile, "Color Management", "DCPIlluminant", icm.dcpIlluminant, pedited->icm.dcpIlluminant);
assignFromKeyfile(keyFile, "Color Management", "WorkingProfile", icm.workingProfile, pedited->icm.workingProfile);
assignFromKeyfile(keyFile, "Color Management", "OpacityCurveWLI", icm.opacityCurveWLI, pedited->icm.opacityCurveWLI);
if (
!assignFromKeyfile(
keyFile,
@ -10676,10 +10859,14 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
}
assignFromKeyfile(keyFile, "Color Management", "Gamut", icm.gamut, pedited->icm.gamut);
assignFromKeyfile(keyFile, "Color Management", "WorkingTRCSlope", icm.workingTRCSlope, pedited->icm.workingTRCSlope);
assignFromKeyfile(keyFile, "Color Management", "WorkingTRCGamma", icm.workingTRCGamma, pedited->icm.workingTRCGamma);
assignFromKeyfile(keyFile, "Color Management", "WorkingTRCSlope", icm.wSlope, pedited->icm.wSlope);
assignFromKeyfile(keyFile, "Color Management", "WorkingTRCGamma", icm.wGamma, pedited->icm.wGamma);
assignFromKeyfile(keyFile, "Color Management", "Wmidtcie", icm.wmidtcie, pedited->icm.wmidtcie);
assignFromKeyfile(keyFile, "Color Management", "Wsmoothcie", icm.wsmoothcie, pedited->icm.wsmoothcie);
assignFromKeyfile(keyFile, "Color Management", "Sigmatrc", icm.sigmatrc, pedited->icm.sigmatrc);
assignFromKeyfile(keyFile, "Color Management", "Offstrc", icm.offstrc, pedited->icm.offstrc);
assignFromKeyfile(keyFile, "Color Management", "Pyrwavtrc", icm.pyrwavtrc, pedited->icm.pyrwavtrc);
assignFromKeyfile(keyFile, "Color Management", "Residtrc", icm.residtrc, pedited->icm.residtrc);
assignFromKeyfile(keyFile, "Color Management", "Redx", icm.redx, pedited->icm.redx);
assignFromKeyfile(keyFile, "Color Management", "Redy", icm.redy, pedited->icm.redy);
@ -10693,6 +10880,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Color Management", "Preser", icm.preser, pedited->icm.preser);
assignFromKeyfile(keyFile, "Color Management", "Fbw", icm.fbw, pedited->icm.fbw);
assignFromKeyfile(keyFile, "Color Management", "TrcExp", icm.trcExp, pedited->icm.trcExp);
assignFromKeyfile(keyFile, "Color Management", "WavExp", icm.wavExp, pedited->icm.wavExp);
assignFromKeyfile(keyFile, "Color Management", "LabGridcieALow", icm.labgridcieALow, pedited->icm.labgridcieALow);
assignFromKeyfile(keyFile, "Color Management", "LabGridcieBLow", icm.labgridcieBLow, pedited->icm.labgridcieBLow);
assignFromKeyfile(keyFile, "Color Management", "LabGridcieAHigh", icm.labgridcieAHigh, pedited->icm.labgridcieAHigh);

View File

@ -1505,6 +1505,7 @@ struct LocallabParams {
double lcdarkness;
double lclightness;
double sigmalc;
double offslc;
int levelwav;
double residcont;
double residsha;
@ -1556,6 +1557,7 @@ struct LocallabParams {
bool wavgradl;
bool wavcompre;
bool origlc;
bool processwav;
Glib::ustring localcontMethod; // loc, wav
Glib::ustring localedgMethod; // fir, sec, thr
Glib::ustring localneiMethod; // none, low, high
@ -1693,11 +1695,11 @@ struct LocallabParams {
double reparcie;
int sensicie;
bool Autograycie;
bool forcejz;
bool forcebw;
bool sigybjz12;
bool qtoj;
bool jabcie;
bool comprcieauto;
bool normcie12;
bool normcie;
bool gamutcie;
bool bwcie;
@ -1706,10 +1708,17 @@ struct LocallabParams {
bool satcie;
bool logcieq;
bool smoothcie;
bool smoothcietrc;
bool smoothcietrcrel;
bool smoothcieyb;
bool smoothcielum;
bool smoothciehigh;
bool smoothcielnk;
bool logjz;
bool sigjz12;
bool sigjz;
bool forcebw;
bool sigq12;
bool sigq;
bool chjzcie;
double sourceGraycie;
@ -1717,6 +1726,8 @@ struct LocallabParams {
Glib::ustring sursourcie;
Glib::ustring modecie;
Glib::ustring modecam;
Glib::ustring modeQJ;
Glib::ustring bwevMethod12;
Glib::ustring bwevMethod;
double saturlcie;
double rstprotectcie;
@ -1764,6 +1775,9 @@ struct LocallabParams {
double blackEvjz;
double whiteEvjz;
double targetjz;
double sigmoidldacie12;
double sigmoidthcie12;
double sigmoidblcie12;
double sigmoidldacie;
double sigmoidthcie;
double sigmoidsenscie;
@ -1772,11 +1786,19 @@ struct LocallabParams {
double strcielog;
double comprcieth;
double gamjcie;
double smoothcieth;
double slopjcie;
double contsig;
double skewsig;
double whitsig;
double slopesmo;
double slopesmoq;
double slopesmor;
double slopesmog;
double slopesmob;
double kslopesmor;
double kslopesmog;
double kslopesmob;
int midtcie;
double grexl;
double greyl;
@ -1804,6 +1826,9 @@ struct LocallabParams {
Glib::ustring smoothciemet;
Glib::ustring primMethod;
Glib::ustring catMethod;
double sigmoidldajzcie12;
double sigmoidthjzcie12;
double sigmoidbljzcie12;
double sigmoidldajzcie;
double sigmoidthjzcie;
double sigmoidbljzcie;
@ -2148,9 +2173,15 @@ struct ColorManagementParams {
Illuminant will;
Primaries wprim;
Cat wcat;
double workingTRCGamma;
double workingTRCSlope;
double wGamma;
double wSlope;
double wmidtcie;
double sigmatrc;
double offstrc;
double residtrc;
int pyrwavtrc;
std::vector<double> opacityCurveWLI;
bool wsmoothcie;
double redx;
double redy;
@ -2164,6 +2195,7 @@ struct ColorManagementParams {
double preser;
bool fbw;
bool trcExp;
bool wavExp;
bool gamut;
double labgridcieALow;
double labgridcieBLow;
@ -2188,6 +2220,11 @@ struct ColorManagementParams {
bool operator ==(const ColorManagementParams& other) const;
bool operator !=(const ColorManagementParams& other) const;
void getCurves(
WavOpacityCurveWL& opacityCurveLUTWLI
) const;
};
/**

View File

@ -74,7 +74,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
0, // EvLDNEdgeTolerance: obsolete,
0, // EvCDNEnabled:obsolete,
0, // free entry
RGBCURVE | M_AUTOEXP, // EvDCPToneCurve,
ALLNORAW, //RGBCURVE | M_AUTOEXP, // EvDCPToneCurve, 21 july 2024
ALLNORAW, // EvDCPIlluminant,
LUMINANCECURVE, // EvSHEnabled,
LUMINANCECURVE, // EvSHHighlights,
@ -419,8 +419,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
DIRPYREQUALIZER, // EvWavgreenlow
DIRPYREQUALIZER, // EvWavbluelow
DIRPYREQUALIZER, // EvWavNeutral
RGBCURVE | M_AUTOEXP, // EvDCPApplyLookTable,
RGBCURVE | M_AUTOEXP, // EvDCPApplyBaselineExposureOffset,
ALLNORAW, //RGBCURVE | M_AUTOEXP, // EvDCPApplyLookTable, 21 july 2024
ALLNORAW, //RGBCURVE | M_AUTOEXP, // EvDCPApplyBaselineExposureOffset, 21 july 2024
ALLNORAW, // EvDCPApplyHueSatMap
DIRPYREQUALIZER, // EvWavenacont
DIRPYREQUALIZER, // EvWavenachrom
@ -1105,9 +1105,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, //Evlocallabsensicie
AUTOEXP, //Evlocallabmodecie
AUTOEXP, //Evlocallabrstprotectcie
AUTOEXP, //Evlocallabsigmoidldacie
AUTOEXP, //Evlocallabsigmoidthcie
AUTOEXP, //Evlocallabsigmoidblcie
AUTOEXP, //Evlocallabsigmoidldacie12
AUTOEXP, //Evlocallabsigmoidthcie12
AUTOEXP, //Evlocallabsigmoidblcie12
HDR, //Evlocallabcomprcieauto
AUTOEXP, //Evlocallabhuecie
AUTOEXP, //Evlocallabjabcie
@ -1115,9 +1115,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, //Evlocallabcontjzcie
AUTOEXP, //Evlocallabchromjzcie
AUTOEXP, //Evlocallabhuejzcie
AUTOEXP, //Evlocallabsigmoidldajzcie
AUTOEXP, //Evlocallabsigmoidthjzcie
AUTOEXP, //Evlocallabsigmoidbljzcie
AUTOEXP, //Evlocallabsigmoidldajzcie12
AUTOEXP, //Evlocallabsigmoidthjzcie12
AUTOEXP, //Evlocallabsigmoidbljzcie12
AUTOEXP, //Evlocallabadapjzcie
AUTOEXP, //Evlocallabmodecam
AUTOEXP, //Evlocallabhljzcie
@ -1139,7 +1139,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, //Evlocallabshapejz
AUTOEXP, //Evlocallabshapecz
AUTOEXP, //Evlocallabshapeczjz
AUTOEXP, //Evlocallabforcejz
// AUTOEXP, //Evlocallabforcejz
// AUTOEXP, //Evlocallablightlzcam
// AUTOEXP, //Evlocallablightqzcam
// AUTOEXP, //Evlocallabcontlzcam
@ -1182,9 +1182,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, //EvlocallabwhiteEvjz
AUTOEXP, //Evlocallablogjz
AUTOEXP, //Evlocallabtargetjz
AUTOEXP, //Evlocallabforcebw
AUTOEXP, //Evlocallabsigjz
AUTOEXP, //Evlocallabsigq
AUTOEXP, //Evlocallabsigybjz12
AUTOEXP, //Evlocallabsigjz12
AUTOEXP, //Evlocallabsigq12
AUTOEXP //Evlocallablogcie
};

View File

@ -473,6 +473,8 @@ public:
double meanxelc;
double meanyelc;
int primlc;
double slopeglc;
bool linkrgblc;
};
//select spot settings
@ -529,6 +531,7 @@ public:
virtual ~AutoprimListener() = default;
virtual void primChanged(float rx, float ry, float bx, float by, float gx, float gy) = 0;
virtual void iprimChanged(float r_x, float r_y, float b_x, float b_y, float g_x, float g_y, float w_x, float w_y, float m_x, float m_y) = 0;
virtual void wavlocChanged(double nlevel, double nmax, bool curveloc) = 0;
};

View File

@ -1518,6 +1518,17 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
const int GW = labView->W;
const int GH = labView->H;
std::unique_ptr<LabImage> provis;
if(params.icm.trcExp) {//local contrast
int level_hr = 7;
int maxlevpo = 9;
bool wavcurvecont = false;
WaveletParams WaveParams = params.wavelet;
ColorManagementParams Colparams = params.icm;
WavOpacityCurveWL icmOpacityCurveWL;
Colparams.getCurves(icmOpacityCurveWL);
ipf.complete_local_contrast(labView, labView, WaveParams, Colparams, icmOpacityCurveWL, 1, level_hr, maxlevpo, wavcurvecont);
}
const float pres = 0.01f * params.icm.preser;
if (pres > 0.f && params.icm.wprim != ColorManagementParams::Primaries::DEFAULT) {
provis.reset(new LabImage(GW, GH));
@ -1528,8 +1539,8 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
ipf.lab2rgb(*labView, *tmpImage1, params.icm.workingProfile);
const float gamtone = params.icm.workingTRCGamma;
const float slotone = params.icm.workingTRCSlope;
const float gamtone = params.icm.wGamma;
const float slotone = params.icm.wSlope;
int illum = toUnderlying(params.icm.will);
const int prim = toUnderlying(params.icm.wprim);
@ -1597,7 +1608,6 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
labView->b[x][y] = 0.f;
}
}
}
if (params.colorappearance.enabled) {

View File

@ -1294,7 +1294,8 @@ private:
float Lnresi = 0.f;
float Lhighresi46 = 0.f;
float Lnresi46 = 0.f;
float slopeg = 1.f;
bool linkrgb = true;
// No Locallab mask is shown in exported picture
ipf.Lab_Local(2, sp, shbuffer, labView, labView, reservView.get(), savenormtmView.get(), savenormretiView.get(), lastorigView.get(), fw, fh, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve,
lllocalcurve, locallutili,
@ -1350,7 +1351,7 @@ private:
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
meantme, stdtme, meanretie, stdretie, fab, maxicam, rdx, rdy, grx, gry, blx, bly, meanx, meany, meanxe, meanye, prim, ill, contsig, lightsig,
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46, slopeg, linkrgb
);
if (sp + 1u < params.locallab.spots.size()) {
@ -1743,6 +1744,17 @@ private:
const int GH = labView->H;
std::unique_ptr<LabImage> provis;
const float pres = 0.01f * params.icm.preser;
if(params.icm.trcExp) {//local contrast
int level_hr = 7;
int maxlevpo = 9;
bool wavcurvecont = false;
WaveletParams WaveParams = params.wavelet;
ColorManagementParams Colparams = params.icm;
WavOpacityCurveWL icmOpacityCurveWL;
Colparams.getCurves(icmOpacityCurveWL);
ipf.complete_local_contrast(labView, labView, WaveParams, Colparams, icmOpacityCurveWL, 1, level_hr, maxlevpo, wavcurvecont);
}
if (pres > 0.f && params.icm.wprim != ColorManagementParams::Primaries::DEFAULT) {
provis.reset(new LabImage(GW, GH));
@ -1753,8 +1765,8 @@ private:
ipf.lab2rgb(*labView, *tmpImage1, params.icm.workingProfile);
const float gamtone = params.icm.workingTRCGamma;
const float slotone = params.icm.workingTRCSlope;
const float gamtone = params.icm.wGamma;
const float slotone = params.icm.wSlope;
int illum = toUnderlying(params.icm.will);
const int prim = toUnderlying(params.icm.wprim);
@ -1827,7 +1839,6 @@ private:
labView->b[x][y] = 0.f;
}
}
}
//Colorappearance and tone-mapping associated

View File

@ -1364,7 +1364,8 @@ void ColorAppearance::updateGUIToMode(int mode)
if(mode ==0) {
alHBox->hide();
wbmHBox->hide();
curveEditorG->hide();
//curveEditorG->hide();
curveEditorG->show();
curveEditorG2->hide();
curveEditorG3->hide();
//greenout->hide();
@ -1391,10 +1392,10 @@ void ColorAppearance::convertParamToNormal()
const ColorAppearanceParams def_params;
disableListener();
algo->set_active (0);
shape->setCurve(def_params.curve);
//shape->setCurve(def_params.curve);
shape2->setCurve(def_params.curve2);
shape3->setCurve(def_params.curve3);
shape->reset();
//shape->reset();
shape2->reset();
shape3->reset();
wbmodel->set_active (0);

View File

@ -463,6 +463,7 @@ ControlSpotPanel::ControlSpotPanel():
wavMethod_->append(M("TP_WAVELET_DAUB6"));
wavMethod_->append(M("TP_WAVELET_DAUB10"));
wavMethod_->append(M("TP_WAVELET_DAUB14"));
wavMethod_->append(M("TP_WAVELET_DAUB20"));
wavMethod_->set_active(1);
wavMethodconn_ = wavMethod_->signal_changed().connect(
sigc::mem_fun(

View File

@ -26,6 +26,10 @@
#include "options.h"
#include "pathutils.h"
#include "rtimage.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "editcallbacks.h"
#include <unistd.h>
#include "rtengine/dcp.h"
#include "rtengine/iccstore.h"
@ -39,6 +43,7 @@ const Glib::ustring ICMPanel::TOOL_NAME = "icm";
ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iunchanged(nullptr), icmplistener(nullptr)
{
CurveListener::setMulti(true);
auto m = ProcEventMapper::getInstance();
EvICMprimariMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_PRIMARIES");
EvICMprofileMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_TYPE");
@ -72,6 +77,12 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
EvICMshifty = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_SHIFTY");
EvICMwmidtcie = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_MIDTCIE");
EvICMwsmoothcie = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_SMOOTHCIE");
EvICMsigmatrc = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_SIGMATRC");
EvICMoffstrc = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_OFFSTRC");
EvICMopacityWLI = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_OPACITYW");
EvICMpyrwavtrc = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_PYRWAVTRC");
EvICMresidtrc = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_RESIDTRC");
EvICMwavExp = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WAVEXP");
isBatchMode = lastToneCurve = lastApplyLookTable = lastApplyBaselineExposureOffset = lastApplyHueSatMap = false;
@ -187,7 +198,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
iVBox->pack_start(*saveRef, Gtk::PACK_SHRINK);
iFrame->add(*iVBox);
pack_start(*iFrame, Gtk::PACK_EXPAND_WIDGET);
// pack_start(*iFrame, Gtk::PACK_EXPAND_WIDGET);
// ---------------------------- Working profile
@ -211,18 +222,27 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
wFrame->add(*wProfVBox);
//-----------------gamma TRC working
// Gtk::Frame *trcFrame = Gtk::manage(new Gtk::Frame(M("TP_ICM_TRCFRAME")));
trcExp = Gtk::manage(new MyExpander(true, M("TP_ICM_TRCFRAME")));
//-----------------gamma TRC working - Abstract Profile
Gtk::Label *trcLabel = Gtk::manage(new Gtk::Label());
setExpandAlignProperties(trcLabel, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
trcLabel->set_markup(escapeHtmlChars(M("TP_ICM_TRCFRAME")));
trcLabel->set_tooltip_text(M("TP_ICM_TRCFRAME_TOOLTIP"));
Gtk::Box *trcLabelBox = Gtk::manage(new Gtk::Box());
trcLabelBox->add(*trcLabel);
trcExp = Gtk::manage(new MyExpander(true, trcLabelBox));//expander Abstract Profile
setExpandAlignProperties(trcExp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
// trcFrame->set_label_align(0.025, 0.5);
Gtk::Box *trcProfVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
trcExp->set_tooltip_text(M("TP_ICM_TRCFRAME_TOOLTIP"));
trcExp->signal_button_release_event().connect_notify ( sigc::bind ( sigc::mem_fun (this, &ICMPanel::foldAllButMe), trcExp) );
trcExp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &ICMPanel::foldAllButMe), trcExp, getExpander()));
trcExpconn = trcExp->signal_enabled_toggled().connect(sigc::mem_fun(*this, &ICMPanel::trcExpChanged));
Gtk::Box *trcPrimVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
// Gtk::Box *trcWavVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
ToolParamBlock* const trcWavFBox = Gtk::manage(new ToolParamBlock());
Gtk::Box *trcWav2VBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
wavlocLabels = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER));
wTRCBox = Gtk::manage(new Gtk::Box());
//TRC gamma and slope
wTRC = Gtk::manage(new MyComboBoxText());
wTRCBox->pack_start(*wTRC, Gtk::PACK_EXPAND_WIDGET);
trcProfVBox->pack_start(*wTRCBox, Gtk::PACK_EXPAND_WIDGET);
@ -240,13 +260,32 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
wFrame->set_tooltip_text(M("TP_ICM_WORKING_TRC_TOOLTIP"));
wGamma = Gtk::manage(new Adjuster(M("TP_ICM_WORKING_TRC_GAMMA"), 0.40, 15.0, 0.001, 2.222));
wSlope = Gtk::manage(new Adjuster(M("TP_ICM_WORKING_TRC_SLOPE"), 0., 300., 0.01, 4.5));
wGamma = Gtk::manage(new Adjuster(M("TP_ICM_WORKING_TRC_GAMMA"), 0.40, 20.0, 0.001, 2.4));//default sRGB
wSlope = Gtk::manage(new Adjuster(M("TP_ICM_WORKING_TRC_SLOPE"), 0., 300., 0.01, 12.92));//defautl sRGB
wmidtcie = Gtk::manage(new Adjuster(M("TP_LOCALLAB_MIDTCIE"), -100., 100., 1., 0.));
wsmoothcie = Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE")));
wsmoothcie = Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE")));//highlights
trcProfVBox->pack_start(*wGamma, Gtk::PACK_SHRINK);
wGamma->show();
//wavelets variables
sigmatrc = Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMAFIN"), 0.025, 2.5, 0.01, 1.));
offstrc = Gtk::manage(new Adjuster(M("TP_WAVELET_OFFSFIN"), 0.33, 1.66, 0.01, 1.));
pyrwavtrc = Gtk::manage(new Adjuster(M("TP_WAVELET_PYRWAVTRC"), 1, 5, 1, 2));
residtrc = Gtk::manage(new Adjuster(M("TP_WAVELET_RESIDTRC"), -100., 100., 1., 0.));
opacityCurveEditorWLI = std::unique_ptr<CurveEditorGroup>(new CurveEditorGroup(options.lastIcmCurvesDir, M("TP_ICM_OPACITYWLI")));
opacityCurveEditorWLI->setCurveListener(this);
const ColorManagementParams default_params;
opacityShapeWLI = static_cast<FlatCurveEditor*>(opacityCurveEditorWLI->addCurve(CT_Flat, "", nullptr, false, false));
opacityShapeWLI->setIdentityValue(0.);
opacityShapeWLI->setResetCurve(FlatCurveType(default_params.opacityCurveWLI.at(0)), default_params.opacityCurveWLI);
opacityShapeWLI->setTooltip(M("TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP"));
opacityCurveEditorWLI->setTooltip(M("TP_WAVELET_PYRWAVTRC_CURVE_TOOLTIP"));
// This will add the reset button at the end of the curveType buttons
opacityCurveEditorWLI->curveListComplete();
opacityCurveEditorWLI->show();
trcProfVBox->pack_start(*wSlope, Gtk::PACK_SHRINK);
wSlope->show();
trcProfVBox->pack_start(*wmidtcie, Gtk::PACK_SHRINK);
@ -256,13 +295,40 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
wsmoothcieconn = wsmoothcie->signal_toggled().connect(sigc::mem_fun(*this, &ICMPanel::wsmoothcieChanged));
wsmoothcie->set_active(false);
fbw = Gtk::manage(new Gtk::CheckButton((M("TP_ICM_FBW"))));
fbw->set_active(true);
trcProfVBox->pack_start(*fbw, Gtk::PACK_SHRINK);
wavExp = Gtk::manage(new MyExpander(true, M("TP_ICM_WAVFRAME")));//expander Contrast Enhancement
setExpandAlignProperties(wavExp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
wavExp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &ICMPanel::foldAllButMe), wavExp, trcExp));
wavExpconn = wavExp->signal_enabled_toggled().connect(sigc::mem_fun(*this, &ICMPanel::wavExpChanged));
wav2Exp = Gtk::manage(new MyExpander(false, M("TP_ICM_WAVREFI")));//expander Refinement wavelet
setExpandAlignProperties(wav2Exp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
wav2Exp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &ICMPanel::foldAllButMe), wav2Exp, wavExp));
trcWavFBox->pack_start(*pyrwavtrc, Gtk::PACK_SHRINK);
trcWavFBox->pack_start(*wavlocLabels, Gtk::PACK_SHRINK);
pyrwavtrc->set_tooltip_text(M("TP_WAVELET_PYRWAVTRC_TOOLTIP"));
trcWavFBox->pack_start(*opacityCurveEditorWLI, Gtk::PACK_SHRINK, 2);
trcWav2VBox->pack_start(*sigmatrc, Gtk::PACK_SHRINK);
trcWav2VBox->pack_start(*offstrc, Gtk::PACK_SHRINK);
trcWav2VBox->pack_start(*residtrc, Gtk::PACK_SHRINK);
sigmatrc->set_tooltip_text(M("TP_WAVELET_PYRWAVTRC_SIGMA_TOOLTIP"));
residtrc->set_tooltip_text(M("TP_WAVELET_PYRWAVTRC_RESID_TOOLTIP"));
offstrc->set_tooltip_text(M("TP_WAVELET_OFFSET_TOOLTIP"));
primExp = Gtk::manage(new MyExpander(false, M("TP_ICM_PRIMFRAME")));
setExpandAlignProperties(primExp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
primExp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &ICMPanel::foldAllButMe), primExp, trcExp));
//Illuminants and Primaries
willuBox = Gtk::manage(new Gtk::Box());
willulab = Gtk::manage(new Gtk::Label(M("TP_ICM_WORKING_ILLU") + ":"));
willuBox->pack_start(*willulab, Gtk::PACK_SHRINK);
will = Gtk::manage(new MyComboBoxText());
willuBox->pack_start(*will, Gtk::PACK_EXPAND_WIDGET);
trcProfVBox->pack_start(*willuBox, Gtk::PACK_EXPAND_WIDGET);
trcPrimVBox->pack_start(*willuBox, Gtk::PACK_EXPAND_WIDGET);
will->append(M("TP_ICM_WORKING_ILLU_NONE"));
will->append(M("TP_ICM_WORKING_ILLU_D41"));
will->append(M("TP_ICM_WORKING_ILLU_D50"));
@ -285,13 +351,13 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
wprimBox->pack_start(*wprimlab, Gtk::PACK_SHRINK);
wprim = Gtk::manage(new MyComboBoxText());
wprimBox->pack_start(*wprim, Gtk::PACK_EXPAND_WIDGET);
fbw = Gtk::manage(new Gtk::CheckButton((M("TP_ICM_FBW"))));
fbw->set_active(true);
// fbw = Gtk::manage(new Gtk::CheckButton((M("TP_ICM_FBW"))));
// fbw->set_active(true);
gamut = Gtk::manage(new Gtk::CheckButton((M("TP_ICM_GAMUT"))));
gamut->set_active(true);
trcProfVBox->pack_start(*wprimBox, Gtk::PACK_EXPAND_WIDGET);
trcProfVBox->pack_start(*fbw, Gtk::PACK_EXPAND_WIDGET);
trcPrimVBox->pack_start(*wprimBox, Gtk::PACK_EXPAND_WIDGET);
// trcPrimVBox->pack_start(*fbw, Gtk::PACK_EXPAND_WIDGET);
// trcProfVBox->pack_start(*gamut, Gtk::PACK_EXPAND_WIDGET);
neutral = Gtk::manage (new Gtk::Button (M ("TP_ICM_NEUTRAL")));
@ -302,7 +368,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
neutralconn = neutral->signal_pressed().connect ( sigc::mem_fun (*this, &ICMPanel::neutral_pressed) );
neutral->show();
trcProfVBox->pack_start (*neutral);
trcPrimVBox->pack_start (*neutral);
wprim->append(M("TP_ICM_WORKING_PRIM_NONE"));
@ -324,7 +390,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
wprim->set_tooltip_text(M("TP_ICM_PRIMILLUM_TOOLTIP"));
//Primaries as sliders
redx = Gtk::manage(new Adjuster(M("TC_PRIM_REDX"), 0.41, 1.0, 0.0001, 0.7347));
setExpandAlignProperties(redx, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
redy = Gtk::manage(new Adjuster(M("TC_PRIM_REDY"), 0.0, 0.70, 0.0001, 0.2653));
@ -380,10 +446,12 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
redVBox->pack_start(*labgridcie, Gtk::PACK_EXPAND_WIDGET, 4);
redVBox->pack_start(*gamut, Gtk::PACK_EXPAND_WIDGET);
//Shift and refine color in CIE xy
refi = Gtk::manage(new Adjuster(M("TC_PRIM_REFI"), -0.5, 1., 0.0001, 0.));
shiftx = Gtk::manage(new Adjuster(M("TC_LOCALLAB_PRIM_SHIFTX"), -0.2, 0.2, 0.0001, 0.));
shifty = Gtk::manage(new Adjuster(M("TC_LOCALLAB_PRIM_SHIFTY"), -0.2, 0.2, 0.0001, 0.));
//Chromatic adaptation
wcatBox = Gtk::manage(new Gtk::Box());
wcatlab = Gtk::manage(new Gtk::Label(M("TP_ICM_WORKING_CAT") + ":"));
wcatBox->pack_start(*wcatlab, Gtk::PACK_SHRINK);
@ -420,11 +488,24 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
refi->setAdjusterListener(this);
shiftx->setAdjusterListener(this);
shifty->setAdjusterListener(this);
sigmatrc->setAdjusterListener(this);
offstrc->setAdjusterListener(this);
pyrwavtrc->setAdjusterListener(this);
residtrc->setAdjusterListener(this);
wGamma->setDelay(std::max(options.adjusterMinDelay, options.adjusterMaxDelay));
//wGamma->setDelay(std::max(options.adjusterMinDelay, options.adjusterMaxDelay));
wSlope->setDelay(std::max(options.adjusterMinDelay, options.adjusterMaxDelay));
// wSlope->setDelay(std::max(options.adjusterMinDelay, options.adjusterMaxDelay));
wmidtcie->setDelay(std::max(options.adjusterMinDelay, options.adjusterMaxDelay));
wav2Exp->add(*trcWav2VBox, false);
wav2Exp->setLevel (2);
trcWavFBox->pack_start(*wav2Exp, false, false);
wavExp->add(*trcWavFBox, false);
wavExp->setLevel (2);
trcProfVBox->pack_start(*wavExp, false, false);
trcProfVBox->pack_start(*primExp, false, false);
// Rendering intent
riaHBox = Gtk::manage(new Gtk::Box());
@ -438,15 +519,20 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
aRendIntent->setSelected(1);
aRendIntent->show();
riaHBox->pack_start(*aRendIntent->buttonGroup, Gtk::PACK_EXPAND_PADDING);
trcPrimVBox->pack_start(*redFrame, Gtk::PACK_EXPAND_WIDGET);
primExp->add(*trcPrimVBox, false);
primExp->setLevel (2);
pack_start(*wFrame, Gtk::PACK_EXPAND_WIDGET);
trcProfVBox->pack_start(*redFrame, Gtk::PACK_EXPAND_WIDGET);
trcExp->add(*trcProfVBox, false);
trcExp->show_all();
trcExp->set_expanded(false);
trcExp->set_no_show_all();
trcExp->setLevel (2);
pack_start(*trcExp, Gtk::PACK_EXPAND_WIDGET);
trcExp->set_expanded(false);
pack_start(*wFrame, Gtk::PACK_EXPAND_WIDGET);
pack_start(*iFrame, Gtk::PACK_EXPAND_WIDGET);
// ---------------------------- Output profile
@ -554,13 +640,47 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu
show_all();
}
void ICMPanel::foldAllButMe (GdkEventButton* event, MyExpander *expander)
void ICMPanel::foldAllButMe(GdkEventButton *event, MyExpander *expander, const MyExpander *parent)
{
if (event->button == 3) {
trcExp->set_expanded (trcExp == expander);
const auto set_expanded = [expander](MyExpander *expander_to_modify) {
expander_to_modify->set_expanded(expander_to_modify == expander);
};
if (parent == getExpander()) {
set_expanded(trcExp);
} else if (parent == trcExp) {
// Abstract Profile sub-expanders.
set_expanded(wavExp);
set_expanded(primExp);
} else if (parent == wavExp) {
// Contrast Enhancement sub-expanders.
set_expanded(wav2Exp);
}
}
}
void ICMPanel::wavlocChanged(double nlevel, double nmax, bool curveloc)
{
if (!batchMode) {
idle_register.add(
[this, nlevel, nmax, curveloc]() -> bool {
if(nlevel != nmax && curveloc) {
wavlocLabels->show();
wavlocLabels->set_text(
Glib::ustring::compose(
M("TP_WAVELET_LEVLOCLABEL"),
Glib::ustring::format(std::fixed, std::setprecision(0), nlevel)//not use but keep in case of
)
);
} else {
wavlocLabels->hide();
}
return false;
}
);
}
}
void ICMPanel::neutral_pressed ()
{ //find working profile and set the same destination proile
@ -590,9 +710,15 @@ void ICMPanel::neutral_pressed ()
wprim->set_active(toUnderlying(ColorManagementParams::Primaries::BEST_RGB));
}
const ColorManagementParams defPar;
wGamma->setValue(defPar.workingTRCGamma);//2.4
wSlope->setValue(defPar.workingTRCSlope);//12.92
// wGamma->setValue(defPar.workingTRCGamma);//2.4
// wSlope->setValue(defPar.workingTRCSlope);//12.92
wGamma->setValue(defPar.wGamma);//2.4
wSlope->setValue(defPar.wSlope);//12.92
wmidtcie->setValue(defPar.wmidtcie);
sigmatrc->setValue(defPar.sigmatrc);
offstrc->setValue(defPar.offstrc);
residtrc->setValue(defPar.residtrc);
pyrwavtrc->setValue(defPar.pyrwavtrc);
preser->setValue(defPar.preser);
fbw->set_active(defPar.fbw);
gamut->set_active(defPar.gamut);
@ -645,6 +771,7 @@ void ICMPanel::updateRenderingIntent(const Glib::ustring &profile)
ICMPanel::~ICMPanel()
{
idle_register.destroy();
}
void ICMPanel::primChanged (float rx, float ry, float bx, float by, float gx, float gy)
@ -711,7 +838,8 @@ void ICMPanel::iprimChanged (float r_x, float r_y, float b_x, float b_y, float g
void ICMPanel::setEditProvider(EditDataProvider *provider)
{
//in case of
opacityShapeWLI->setEditProvider(provider);
}
void ICMPanel::setListener(ToolPanelListener *tpl)
@ -872,8 +1000,7 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
ConnectionBlocker wprimconn_(wprimconn);
ConnectionBlocker wcatconn_(wcatconn);
ConnectionBlocker trcExpconn_(trcExpconn);
trcExp->set_expanded(false);
ConnectionBlocker wavExpconn_(wavExpconn);
if (pp->icm.inputProfile.substr(0, 5) != "file:" && !ipDialog->get_filename().empty()) {
ipDialog->set_filename(pp->icm.inputProfile);
@ -935,10 +1062,12 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
oRendIntent->setSelected(pp->icm.outputIntent);
aRendIntent->setSelected(pp->icm.aRendIntent);
opacityShapeWLI->setCurve(pp->icm.opacityCurveWLI);
obpc->set_active(pp->icm.outputBPC);
fbw->set_active(pp->icm.fbw);
trcExp->setEnabled(pp->icm.trcExp);
wavExp->setEnabled(pp->icm.wavExp);
gamut->set_active(pp->icm.gamut);
wsmoothcie->set_active(pp->icm.wsmoothcie);
ckbToneCurve->set_active(pp->icm.toneCurve);
@ -950,9 +1079,15 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
ckbApplyHueSatMap->set_active(pp->icm.applyHueSatMap);
lastApplyHueSatMap = pp->icm.applyHueSatMap;
wGamma->setValue(pp->icm.workingTRCGamma);
wSlope->setValue(pp->icm.workingTRCSlope);
// wGamma->setValue(pp->icm.workingTRCGamma);
// wSlope->setValue(pp->icm.workingTRCSlope);
wGamma->setValue(pp->icm.wGamma);
wSlope->setValue(pp->icm.wSlope);
wmidtcie->setValue(pp->icm.wmidtcie);
sigmatrc->setValue(pp->icm.sigmatrc);
offstrc->setValue(pp->icm.offstrc);
residtrc->setValue(pp->icm.residtrc);
pyrwavtrc->setValue(pp->icm.pyrwavtrc);
redx->setValue(pp->icm.redx);
redy->setValue(pp->icm.redy);
grex->setValue(pp->icm.grex);
@ -970,12 +1105,14 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
obpc->set_inconsistent(!pedited->icm.outputBPC);
fbw->set_inconsistent(!pedited->icm.fbw);
trcExp->set_inconsistent(!pedited->icm.trcExp);
wavExp->set_inconsistent(!pedited->icm.wavExp);
gamut->set_inconsistent(!pedited->icm.gamut);
wsmoothcie->set_inconsistent(!pedited->icm.wsmoothcie);
ckbToneCurve->set_inconsistent(!pedited->icm.toneCurve);
ckbApplyLookTable->set_inconsistent(!pedited->icm.applyLookTable);
ckbApplyBaselineExposureOffset->set_inconsistent(!pedited->icm.applyBaselineExposureOffset);
ckbApplyHueSatMap->set_inconsistent(!pedited->icm.applyHueSatMap);
opacityShapeWLI->setUnChanged(!pedited->icm.opacityCurveWLI);
if (!pedited->icm.workingProfile) {
wProfNames->set_active_text(M("GENERAL_UNCHANGED"));
@ -1014,10 +1151,17 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
}
labgridcie->setEdited(pedited->icm.labgridcieALow || pedited->icm.labgridcieBLow || pedited->icm.labgridcieAHigh || pedited->icm.labgridcieBHigh || pedited->icm.labgridcieGx || pedited->icm.labgridcieGy || pedited->icm.labgridcieWx || pedited->icm.labgridcieWy || pedited->icm.labgridcieMx || pedited->icm.labgridcieMy);
opacityShapeWLI->setCurve(pp->icm.opacityCurveWLI);
wGamma->setEditedState(pedited->icm.workingTRCGamma ? Edited : UnEdited);
wSlope->setEditedState(pedited->icm.workingTRCSlope ? Edited : UnEdited);
// wGamma->setEditedState(pedited->icm.workingTRCGamma ? Edited : UnEdited);
// wSlope->setEditedState(pedited->icm.workingTRCSlope ? Edited : UnEdited);
wGamma->setEditedState(pedited->icm.wGamma ? Edited : UnEdited);
wSlope->setEditedState(pedited->icm.wSlope ? Edited : UnEdited);
wmidtcie->setEditedState(pedited->icm.wmidtcie ? Edited : UnEdited);
sigmatrc->setEditedState(pedited->icm.sigmatrc ? Edited : UnEdited);
offstrc->setEditedState(pedited->icm.offstrc ? Edited : UnEdited);
residtrc->setEditedState(pedited->icm.residtrc ? Edited : UnEdited);
pyrwavtrc->setEditedState(pedited->icm.pyrwavtrc ? Edited : UnEdited);
redx->setEditedState(pedited->icm.redx ? Edited : UnEdited);
redy->setEditedState(pedited->icm.redy ? Edited : UnEdited);
grex->setEditedState(pedited->icm.grex ? Edited : UnEdited);
@ -1036,6 +1180,10 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
wSlope->set_sensitive(false);
wGamma->set_sensitive(false);
wmidtcie->set_sensitive(false);
sigmatrc->set_sensitive(false);
offstrc->set_sensitive(false);
residtrc->set_sensitive(false);
pyrwavtrc->set_sensitive(false);
will->set_sensitive(false);
willulab->set_sensitive(false);
wprim->set_sensitive(false);
@ -1090,7 +1238,8 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
}
riaHBox->set_sensitive(true);
if (pp->icm.workingTRCGamma <= 1.) {
// if (pp->icm.workingTRCGamma <= 1.) {
if (pp->icm.wGamma <= 1.) {
wGamma->set_sensitive(true);
wSlope->set_sensitive(false);
wmidtcie->set_sensitive(true);
@ -1123,6 +1272,10 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
wGamma->set_sensitive(false);
wSlope->set_sensitive(false);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::DEFAULT) {
redFrame->hide();
} else {
@ -1150,6 +1303,10 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
wGamma->set_sensitive(false);
wSlope->set_sensitive(false);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
riaHBox->set_sensitive(true);
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::DEFAULT) {
redFrame->hide();
@ -1178,6 +1335,10 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
wGamma->set_sensitive(false);
wSlope->set_sensitive(false);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
riaHBox->set_sensitive(true);
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::DEFAULT) {
redFrame->hide();
@ -1211,6 +1372,10 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
wGamma->set_sensitive(false);
wSlope->set_sensitive(false);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
break;
case ColorManagementParams::WorkingTrc::LINEAR:
wGamma->setValue(1.);
@ -1232,6 +1397,10 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
wGamma->set_sensitive(false);
wSlope->set_sensitive(false);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
riaHBox->set_sensitive(true);
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::DEFAULT) {
redFrame->hide();
@ -1334,11 +1503,18 @@ void ICMPanel::write(ProcParams* pp, ParamsEdited* pedited)
pp->icm.outputBPC = obpc->get_active();
pp->icm.fbw = fbw->get_active();
pp->icm.trcExp = trcExp->getEnabled();
pp->icm.wavExp = wavExp->getEnabled();
pp->icm.gamut = gamut->get_active();
pp->icm.wsmoothcie = wsmoothcie->get_active();
pp->icm.workingTRCGamma = wGamma->getValue();
pp->icm.workingTRCSlope = wSlope->getValue();
// pp->icm.workingTRCGamma = wGamma->getValue();
// pp->icm.workingTRCSlope = wSlope->getValue();
pp->icm.wGamma = wGamma->getValue();
pp->icm.wSlope = wSlope->getValue();
pp->icm.wmidtcie = wmidtcie->getValue();
pp->icm.sigmatrc = sigmatrc->getValue();
pp->icm.offstrc = offstrc->getValue();
pp->icm.residtrc = residtrc->getValue();
pp->icm.pyrwavtrc = pyrwavtrc->getIntValue();
pp->icm.redx = redx->getValue();
pp->icm.redy = redy->getValue();
pp->icm.grex = grex->getValue();
@ -1350,6 +1526,7 @@ void ICMPanel::write(ProcParams* pp, ParamsEdited* pedited)
pp->icm.shifty = shifty->getValue();
pp->toneCurve.fromHistMatching = false;
pp->icm.preser = preser->getValue();
pp->icm.opacityCurveWLI = opacityShapeWLI->getCurve();
if (pedited) {
pedited->icm.inputProfile = !iunchanged->get_active();
@ -1360,6 +1537,7 @@ void ICMPanel::write(ProcParams* pp, ParamsEdited* pedited)
pedited->icm.outputBPC = !obpc->get_inconsistent();
pedited->icm.fbw = !fbw->get_inconsistent();
pedited->icm.trcExp = !trcExp->get_inconsistent();
pedited->icm.wavExp = !wavExp->get_inconsistent();
pedited->icm.gamut = !gamut->get_inconsistent();
pedited->icm.wsmoothcie = !wsmoothcie->get_inconsistent();
pedited->icm.dcpIlluminant = dcpIll->get_active_text() != M("GENERAL_UNCHANGED");
@ -1367,9 +1545,15 @@ void ICMPanel::write(ProcParams* pp, ParamsEdited* pedited)
pedited->icm.applyLookTable = !ckbApplyLookTable->get_inconsistent();
pedited->icm.applyBaselineExposureOffset = !ckbApplyBaselineExposureOffset->get_inconsistent();
pedited->icm.applyHueSatMap = !ckbApplyHueSatMap->get_inconsistent();
pedited->icm.workingTRCGamma = wGamma->getEditedState();
pedited->icm.workingTRCSlope = wSlope->getEditedState();
// pedited->icm.workingTRCGamma = wGamma->getEditedState();
// pedited->icm.workingTRCSlope = wSlope->getEditedState();
pedited->icm.wGamma = wGamma->getEditedState();
pedited->icm.wSlope = wSlope->getEditedState();
pedited->icm.wmidtcie = wmidtcie->getEditedState();
pedited->icm.sigmatrc = sigmatrc->getEditedState();
pedited->icm.offstrc = offstrc->getEditedState();
pedited->icm.residtrc = residtrc->getEditedState();
pedited->icm.pyrwavtrc = pyrwavtrc->getEditedState();
pedited->icm.workingTRC = wTRC->get_active_text() != M("GENERAL_UNCHANGED");
pedited->icm.will = will->get_active_text() != M("GENERAL_UNCHANGED");
pedited->icm.wprim = wprim->get_active_text() != M("GENERAL_UNCHANGED");
@ -1377,14 +1561,31 @@ void ICMPanel::write(ProcParams* pp, ParamsEdited* pedited)
pedited->icm.redx = redx->getEditedState();
pedited->icm.redy = redy->getEditedState();
pedited->icm.labgridcieALow = pedited->icm.labgridcieBLow = pedited->icm.labgridcieAHigh = pedited->icm.labgridcieBHigh = pedited->icm.labgridcieGx = pedited->icm.labgridcieGy = pedited->icm.labgridcieWx = pedited->icm.labgridcieWy = pedited->icm.labgridcieMx = pedited->icm.labgridcieMy = labgridcie->getEdited();
pedited->icm.opacityCurveWLI = !opacityShapeWLI->isUnChanged();
}
}
void ICMPanel::curveChanged(CurveEditor* ce)
{
if (listener) {
if (ce == opacityShapeWLI) {
listener->panelChanged(EvICMopacityWLI, M("HISTORY_CUSTOMCURVE"));
}
}
}
void ICMPanel::setDefaults(const ProcParams* defParams, const ParamsEdited* pedited)
{
wGamma->setDefault(defParams->icm.workingTRCGamma);
wSlope->setDefault(defParams->icm.workingTRCSlope);
// wGamma->setDefault(defParams->icm.workingTRCGamma);
// wSlope->setDefault(defParams->icm.workingTRCSlope);
wGamma->setDefault(defParams->icm.wGamma);
wSlope->setDefault(defParams->icm.wSlope);
wmidtcie->setDefault(defParams->icm.wmidtcie);
sigmatrc->setDefault(defParams->icm.sigmatrc);
offstrc->setDefault(defParams->icm.offstrc);
residtrc->setDefault(defParams->icm.residtrc);
pyrwavtrc->setDefault(defParams->icm.pyrwavtrc);
redx->setDefault(defParams->icm.redx);
redy->setDefault(defParams->icm.redy);
grex->setDefault(defParams->icm.grex);
@ -1398,9 +1599,15 @@ void ICMPanel::setDefaults(const ProcParams* defParams, const ParamsEdited* pedi
labgridcie->setDefault(defParams->icm.labgridcieALow, defParams->icm.labgridcieBLow , defParams->icm.labgridcieAHigh, defParams->icm.labgridcieBHigh, defParams->icm.labgridcieGx, defParams->icm.labgridcieGy, defParams->icm.labgridcieWx, defParams->icm.labgridcieWy, defParams->icm.labgridcieMx, defParams->icm.labgridcieMy);
if (pedited) {
wGamma->setDefaultEditedState(pedited->icm.workingTRCGamma ? Edited : UnEdited);
wSlope->setDefaultEditedState(pedited->icm.workingTRCSlope ? Edited : UnEdited);
// wGamma->setDefaultEditedState(pedited->icm.workingTRCGamma ? Edited : UnEdited);
// wSlope->setDefaultEditedState(pedited->icm.workingTRCSlope ? Edited : UnEdited);
wGamma->setDefaultEditedState(pedited->icm.wGamma ? Edited : UnEdited);
wSlope->setDefaultEditedState(pedited->icm.wSlope ? Edited : UnEdited);
wmidtcie->setDefaultEditedState(pedited->icm.wmidtcie ? Edited : UnEdited);
sigmatrc->setDefaultEditedState(pedited->icm.sigmatrc ? Edited : UnEdited);
offstrc->setDefaultEditedState(pedited->icm.offstrc ? Edited : UnEdited);
residtrc->setDefaultEditedState(pedited->icm.residtrc ? Edited : UnEdited);
pyrwavtrc->setDefaultEditedState(pedited->icm.pyrwavtrc ? Edited : UnEdited);
redx->setDefaultEditedState(pedited->icm.redx ? Edited : UnEdited);
redy->setDefaultEditedState(pedited->icm.redy ? Edited : UnEdited);
grex->setDefaultEditedState(pedited->icm.grex ? Edited : UnEdited);
@ -1417,6 +1624,10 @@ void ICMPanel::setDefaults(const ProcParams* defParams, const ParamsEdited* pedi
wGamma->setDefaultEditedState(Irrelevant);
wSlope->setDefaultEditedState(Irrelevant);
wmidtcie->setDefaultEditedState(Irrelevant);
sigmatrc->setDefaultEditedState(Irrelevant);
offstrc->setDefaultEditedState(Irrelevant);
residtrc->setDefaultEditedState(Irrelevant);
pyrwavtrc->setDefaultEditedState(Irrelevant);
redx->setDefaultEditedState(Irrelevant);
redy->setDefaultEditedState(Irrelevant);
grex->setDefaultEditedState(Irrelevant);
@ -1448,6 +1659,14 @@ void ICMPanel::adjusterChanged(Adjuster* a, double newval)
listener->panelChanged(EvICMslop, costr2);
} else if (a == wmidtcie) {
listener->panelChanged(EvICMwmidtcie, costr2);
} else if (a == sigmatrc) {
listener->panelChanged(EvICMsigmatrc, costr2);
} else if (a == offstrc) {
listener->panelChanged(EvICMoffstrc, costr2);
} else if (a == residtrc) {
listener->panelChanged(EvICMresidtrc, costr2);
} else if (a == pyrwavtrc) {
listener->panelChanged(EvICMpyrwavtrc, costr2);
} else if (a == redx) {
listener->panelChanged(EvICMredx, costr2);
} else if (a == redy) {
@ -1487,6 +1706,10 @@ void ICMPanel::wtrcinChanged()
wGamma->set_sensitive(false);
wSlope->set_sensitive(false);
wmidtcie->set_sensitive(false);
sigmatrc->set_sensitive(false);
offstrc->set_sensitive(false);
residtrc->set_sensitive(false);
pyrwavtrc->set_sensitive(false);
will->set_sensitive(false);
willulab->set_sensitive(false);
wprim->set_sensitive(false);
@ -1503,6 +1726,10 @@ void ICMPanel::wtrcinChanged()
will->set_sensitive(false);
wprim->set_sensitive(true);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
wcat->set_sensitive(true);
wcatlab->set_sensitive(true);
fbw->set_sensitive(true);
@ -1538,6 +1765,10 @@ void ICMPanel::wtrcinChanged()
wGamma->setValue(2.222);
wSlope->setValue(4.5);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
will->set_sensitive(false);
willulab->set_sensitive(true);
wprim->set_sensitive(true);
@ -1568,6 +1799,10 @@ void ICMPanel::wtrcinChanged()
wGamma->setValue(2.4);
wSlope->setValue(12.92);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
will->set_sensitive(false);
willulab->set_sensitive(true);
wprim->set_sensitive(true);
@ -1599,6 +1834,10 @@ void ICMPanel::wtrcinChanged()
wGamma->setValue(2.2);
wSlope->setValue(0.);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
will->set_sensitive(false);
willulab->set_sensitive(true);
wprim->set_sensitive(true);
@ -1631,6 +1870,10 @@ void ICMPanel::wtrcinChanged()
wGamma->setValue(1.8);
wSlope->setValue(0.);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
will->set_sensitive(false);
willulab->set_sensitive(true);
wprim->set_sensitive(true);
@ -1663,6 +1906,10 @@ void ICMPanel::wtrcinChanged()
wGamma->setValue(1.0);
wSlope->setValue(1.);
wmidtcie->set_sensitive(true);
sigmatrc->set_sensitive(true);
offstrc->set_sensitive(true);
residtrc->set_sensitive(true);
pyrwavtrc->set_sensitive(true);
will->set_sensitive(false);
willulab->set_sensitive(true);
wprim->set_sensitive(true);
@ -2317,6 +2564,17 @@ void ICMPanel::trcExpChanged()
}
}
void ICMPanel::wavExpChanged()
{
if (listener) {
if (wavExp->getEnabled()) {
listener->panelChanged(EvICMwavExp, M("GENERAL_ENABLED"));
} else {
listener->panelChanged(EvICMwavExp, M("GENERAL_DISABLED"));
}
}
}
void ICMPanel::fbwChanged()
@ -2503,6 +2761,8 @@ void ICMPanel::setBatchMode(bool batchMode)
iunchanged->set_group(opts);
iVBox->pack_start(*iunchanged, Gtk::PACK_SHRINK, 4);
iVBox->reorder_child(*iunchanged, 5);
opacityCurveEditorWLI->setBatchMode(batchMode);
removeIfThere(this, saveRef);
oProfNames->append(M("GENERAL_UNCHANGED"));
oRendIntent->addEntry("template-24", M("GENERAL_UNCHANGED"));
@ -2517,6 +2777,10 @@ void ICMPanel::setBatchMode(bool batchMode)
wGamma->showEditedCB();
wSlope->showEditedCB();
wmidtcie->showEditedCB();
sigmatrc->showEditedCB();
offstrc->showEditedCB();
residtrc->showEditedCB();
pyrwavtrc->showEditedCB();
redx->showEditedCB();
redy->showEditedCB();
grex->showEditedCB();

View File

@ -26,6 +26,8 @@
#include "guiutils.h"
#include "popupbutton.h"
#include "toolpanel.h"
#include "curvelistener.h"
#include "thresholdadjuster.h"
#include "rtengine/imagedata.h"
@ -38,8 +40,15 @@ public:
class LabGrid;
class CurveEditor;
class CurveEditorGroup;
class DiagonalCurveEditor;
class EditDataProvider;
class FlatCurveEditor;
class ICMPanel final :
public ToolParamBlock,
public CurveListener,
public FoldableToolPanel,
public rtengine::AutoprimListener,
public AdjusterListener
@ -51,11 +60,22 @@ protected:
Gtk::Frame* redFrame;
Gtk::Frame* colorFramecie;
MyExpander* trcExp;
MyExpander* wavExp;
MyExpander* wav2Exp;
MyExpander* primExp;
Adjuster* wGamma;
Adjuster* wSlope;
Adjuster* wmidtcie;
Gtk::CheckButton* wsmoothcie;
Adjuster* sigmatrc;
Adjuster* offstrc;
Adjuster* pyrwavtrc;
Adjuster* residtrc;
std::unique_ptr<CurveEditorGroup> opacityCurveEditorWLI;
FlatCurveEditor* opacityShapeWLI;
Adjuster* redx;
Adjuster* redy;
Adjuster* grex;
@ -75,7 +95,7 @@ protected:
//Gtk::Label* blb;
Gtk::Button* neutral;
sigc::connection trcExpconn;
bool lasttrcExp;
sigc::connection wavExpconn;
sigc::connection neutralconn;
bool lastToneCurve;
@ -127,6 +147,13 @@ private:
rtengine::ProcEvent EvICMshifty;
rtengine::ProcEvent EvICMwmidtcie;
rtengine::ProcEvent EvICMwsmoothcie;
rtengine::ProcEvent EvICMsigmatrc;
rtengine::ProcEvent EvICMoffstrc;
rtengine::ProcEvent EvICMopacityWLI;
rtengine::ProcEvent EvICMpyrwavtrc;
rtengine::ProcEvent EvICMresidtrc;
rtengine::ProcEvent EvICMwavExp;
LabGrid *labgridcie;
IdleRegister idle_register;
@ -193,7 +220,7 @@ private:
Glib::ustring filename;
void updateDCP(int dcpIlluminant, Glib::ustring dcp_name);
void updateRenderingIntent(const Glib::ustring &profile);
void foldAllButMe (GdkEventButton* event, MyExpander *expander);
void foldAllButMe(GdkEventButton *event, MyExpander *expander, const MyExpander *parent);
float nextrx;
float nextry;
@ -205,6 +232,7 @@ private:
float nextwy;
float nextmx;
float nextmy;
Gtk::Label* wavlocLabels;
public:
static const Glib::ustring TOOL_NAME;
@ -220,6 +248,8 @@ public:
void primChanged (float rx, float ry, float bx, float by, float gx, float gy) override;
void iprimChanged (float r_x, float r_y, float b_x, float b_y, float g_x, float g_y, float w_x, float w_y, float m_x, float m_y) override;
void neutral_pressed();
void curveChanged(CurveEditor* ce) override;
void wavlocChanged(double nlevel, double nmax, bool curveloc) override;
void wpChanged();
void wtrcinChanged();
@ -227,6 +257,7 @@ public:
void wprimChanged();
void wcatChanged();
void trcExpChanged();
void wavExpChanged();
void opChanged();
void oiChanged(int n);
void aiChanged(int n);

View File

@ -372,6 +372,8 @@ void Locallab::read(const rtengine::procparams::ProcParams* pp, const ParamsEdit
r.wavMethod = 3;
} else if (pp->locallab.spots.at(i).wavMethod == "D14") {
r.wavMethod = 4;
} else if (pp->locallab.spots.at(i).wavMethod == "D20") {
r.wavMethod = 5;
}
expsettings->addControlSpot(r);
@ -565,6 +567,8 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r.wavMethod = 3;
} else if (newSpot->wavMethod == "D14") {
r.wavMethod = 4;
} else if (newSpot->wavMethod == "D20") {
r.wavMethod = 5;
}
expsettings->addControlSpot(r);
@ -903,6 +907,8 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r.wavMethod = 3;
} else if (newSpot->wavMethod == "D14") {
r.wavMethod = 4;
} else if (newSpot->wavMethod == "D20") {
r.wavMethod = 5;
}
expsettings->addControlSpot(r);
@ -1073,6 +1079,8 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pp->locallab.spots.at(pp->locallab.selspot).wavMethod = "D10";
} else if (r->wavMethod == 4) {
pp->locallab.spots.at(pp->locallab.selspot).wavMethod = "D14";
} else if (r->wavMethod == 5) {
pp->locallab.spots.at(pp->locallab.selspot).wavMethod = "D20";
}
}
@ -1399,8 +1407,10 @@ void Locallab::cieChanged(const std::vector<locallabcieLC> &cielc, int selspot)
const double me1 = cie_lc.at(selspot).meanxelc;
const double me2 = cie_lc.at(selspot).meanyelc;
const int pri = cie_lc.at(selspot).primlc;
const double slg = cie_lc.at(selspot).slopeglc;
const bool lkg = cie_lc.at(selspot).linkrgblc;
expcie.updateiPrimloc(r1, r2, g1, g2, b1, b2, w1, w2, m1, m2, me1, me2, pri);
expcie.updateiPrimloc(r1, r2, g1, g2, b1, b2, w1, w2, m1, m2, me1, me2, pri, slg, lkg);
}
}

View File

@ -1016,18 +1016,14 @@ void LocallabColor::updateguicolor(int spottype)
if(spottype == 3) {
invers->hide();
sensi->hide();
showmaskcolMethod->set_active(0);
expmaskcol1->hide();
expmaskcol->hide();
exprecov->hide();
enaColorMask->set_active(false);
previewcol->hide();
previewcol->set_active(false);
resetMaskView();
} else {
invers->show();
sensi->show();
expmaskcol1->show();
expmaskcol->show();
exprecov->show();
if(!invers->get_active()) {
@ -1039,7 +1035,6 @@ void LocallabColor::updateguicolor(int spottype)
}
enableListener();
return false;
}
);
@ -2070,18 +2065,6 @@ void LocallabColor::convertParamToNormal()
rgbshape->setCurve(defSpot.rgbcurve);
special->set_active(defSpot.special);
if (defSpot.merMethod == "mone") {
merMethod->set_active(0);
// } else if (defSpot.merMethod == "mtwo") {
// merMethod->set_active(1);
} else if (defSpot.merMethod == "mthr") {
merMethod->set_active(1);
} else if (defSpot.merMethod == "mfou") {
merMethod->set_active(2);
} else if (defSpot.merMethod == "mfiv") {
merMethod->set_active(3);
}
if (defSpot.mergecolMethod == "one") {
mergecolMethod->set_active(0);
} else if (defSpot.mergecolMethod == "two") {
@ -2177,6 +2160,17 @@ void LocallabColor::convertParamToSimple()
} else if (defSpot.qualitycurveMethod == "std") {
qualitycurveMethod->set_active(1);
}
if (defSpot.merMethod == "mone") {
merMethod->set_active(0);
// } else if (defSpot.merMethod == "mtwo") {
// merMethod->set_active(1);
} else if (defSpot.merMethod == "mthr") {
merMethod->set_active(1);
} else if (defSpot.merMethod == "mfou") {
merMethod->set_active(2);
} else if (defSpot.merMethod == "mfiv") {
merMethod->set_active(3);
}
llshape->setCurve(defSpot.llcurve);
ccshape->setCurve(defSpot.cccurve);
@ -2232,7 +2226,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type)
rgbCurveEditorG->hide();
special->hide();
exprecov->show();
expmaskcol1->hide();
// expmaskcol1->hide();
struFrame->hide();
blurFrame->hide();
lapmaskcol->hide();
@ -2256,6 +2250,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type)
if (!invers->get_active()) { // Keep widget hidden when invers is toggled
expgradcol->show();
expmaskcol1->show();
exprecov->show();
gamc->hide();
}
@ -2586,6 +2581,7 @@ void LocallabColor::updateColorGUI1()
softradiuscol->show();
expgradcol->show();
exprecov->show();
expmaskcol1->show();
}
labqualcurv->show();
@ -3034,13 +3030,11 @@ void LocallabExposure::updateguiexpos(int spottype)
inversex->hide();
sensiex->hide();
previewexe->hide();
showmaskexpMethod->set_active(0);
enaExpMask->set_active(false);
enaExpMaskaft->set_active(false);
previewexe->set_active(false);
expmaskexp->hide();
exprecove->hide();
resetMaskView();
} else {
inversex->show();
sensiex->show();
@ -4570,13 +4564,11 @@ void LocallabShadow::updateguishad(int spottype)
if(spottype == 3) {
inverssh->hide();
sensihs->hide();
showmaskSHMethod->set_active(0);
previewsh->hide();
exprecovs->hide();
expmasksh->hide();
enaSHMask->set_active(false);
previewsh->set_active(false);
resetMaskView();
} else {
sensihs->show();
inverssh->show();
@ -5754,13 +5746,11 @@ void LocallabVibrance::updateguivib(int spottype)
if(spottype == 3) {
sensiv->hide();
showmaskvibMethod->set_active(0);
previewvib->hide();
enavibMask->set_active(false);
previewvib->set_active(false);
exprecovv->hide();
expmaskvib->hide();
resetMaskView();
} else {
sensiv->show();
previewvib->show();
@ -5771,6 +5761,8 @@ void LocallabVibrance::updateguivib(int spottype)
}
enableListener();
return false;
}
);

View File

@ -64,6 +64,7 @@ protected:
rtengine::ProcEvent Evlocallabpreviewlog;
rtengine::ProcEvent Evlocallabpreviewcie;
rtengine::ProcEvent Evlocallabpreviewmas;
rtengine::ProcEvent Evlocallabnormcie12;
rtengine::ProcEvent Evlocallabnormcie;
rtengine::ProcEvent Evlocallabstrumaskcie;
rtengine::ProcEvent EvLocallabtoolcie;
@ -72,7 +73,6 @@ protected:
rtengine::ProcEvent Evlocallabblurcie;
rtengine::ProcEvent Evlocallabhighmaskcie;
rtengine::ProcEvent Evlocallabshadmaskcie;
rtengine::ProcEvent Evlocallabsigmoidsenscie;
rtengine::ProcEvent EvlocallabLLmaskcieshapewav;
rtengine::ProcEvent EvlocallabcsThresholdcie;
rtengine::ProcEvent Evlocallabcomprcie;
@ -81,17 +81,29 @@ protected:
rtengine::ProcEvent Evlocallablogcieq;
rtengine::ProcEvent Evlocallabcomprcieth;
rtengine::ProcEvent EvlocallabHHhmaskcieshape;
rtengine::ProcEvent EvlocallabbwevMethod;
rtengine::ProcEvent EvlocallabbwevMethod12;
rtengine::ProcEvent Evlocallabgamjcie;
rtengine::ProcEvent Evlocallabslopjcie;
rtengine::ProcEvent Evlocallabmidtcie;
rtengine::ProcEvent Evlocallabcontsig;
rtengine::ProcEvent Evlocallabskewsig;
rtengine::ProcEvent Evlocallabwhitsig;
rtengine::ProcEvent Evlocallabslopesmo;
rtengine::ProcEvent Evlocallabslopesmoq;
rtengine::ProcEvent Evlocallabslopesmor;
rtengine::ProcEvent Evlocallabslopesmog;
rtengine::ProcEvent Evlocallabslopesmob;
rtengine::ProcEvent Evlocallabkslopesmor;
rtengine::ProcEvent Evlocallabkslopesmog;
rtengine::ProcEvent Evlocallabkslopesmob;
rtengine::ProcEvent Evlocallabsmoothcie;
rtengine::ProcEvent Evlocallabsmoothcielnk;
rtengine::ProcEvent Evlocallabsmoothcieth;
rtengine::ProcEvent Evlocallabsmoothcietrc;
rtengine::ProcEvent Evlocallabsmoothcietrcrel;
rtengine::ProcEvent Evlocallabsmoothcieyb;
rtengine::ProcEvent Evlocallabsmoothcielum;
rtengine::ProcEvent Evlocallabsmoothciehigh;
rtengine::ProcEvent Evlocallabsmoothciemet;
rtengine::ProcEvent Evlocallabsigcie;
rtengine::ProcEvent Evlocallabillcie;
@ -114,7 +126,7 @@ protected:
rtengine::ProcEvent Evlocallabgamutcie;
rtengine::ProcEvent Evlocallabbwcie;
rtengine::ProcEvent Evlocallabexpprecam;
rtengine::ProcEvent Evlocallablightsigqcie;
rtengine::ProcEvent Evlocallablightsigqcie12;
rtengine::ProcEvent Evlocallabcontsigqcie;
rtengine::ProcEvent Evlocallabrefi;
rtengine::ProcEvent Evlocallabshiftxl;
@ -131,6 +143,22 @@ protected:
rtengine::ProcEvent Evlocallabfeathercie;
rtengine::ProcEvent EvlocallabfeatherSH;
rtengine::ProcEvent Evlocallabfeather_mask;
rtengine::ProcEvent Evlocallaboffslc;
rtengine::ProcEvent EvlocallabmodeQJ;
rtengine::ProcEvent EvlocallabbwevMethod;
rtengine::ProcEvent Evlocallabsigmoidldacie;
rtengine::ProcEvent Evlocallabsigmoidthcie;
rtengine::ProcEvent Evlocallabsigmoidblcie;
rtengine::ProcEvent Evlocallabsigmoidsenscie;
rtengine::ProcEvent Evlocallabsigq;
rtengine::ProcEvent Evlocallabsigq_12;
rtengine::ProcEvent Evlocallabsigjz;
rtengine::ProcEvent Evlocallabforcebw;
rtengine::ProcEvent Evlocallabsigmoidldajzcie;
rtengine::ProcEvent Evlocallabsigmoidthjzcie;
rtengine::ProcEvent Evlocallabsigmoidbljzcie;
rtengine::ProcEvent Evlocallablogcie_12;
// LocallabTool parameters
bool needMode;
bool isLocActivated;
@ -1224,9 +1252,12 @@ private:
Adjuster* const lclightness;
Gtk::Frame* const contFrame;
Adjuster* const sigmalc;
Adjuster* const offslc;
CurveEditorGroup* const LocalcurveEditorwav;
FlatCurveEditor* const wavshape;
ThresholdAdjuster* const csThreshold;
Gtk::CheckButton* const processwav;
Adjuster* const levelwav;
MyExpander* const expresidpyr;
Adjuster* const residcont;
@ -1317,7 +1348,8 @@ private:
CurveEditorGroup* const mask2lcCurveEditorG;
DiagonalCurveEditor* const Lmasklcshape;
sigc::connection localcontMethodConn, previewlcConn, origlcConn, wavgradlConn, wavedgConn, localedgMethodConn, waveshowConn, localneiMethodConn, wavblurConn, blurlcConn, wavcontConn, wavcompreConn, wavcompConn, fftwlcConn, showmasklcMethodConn, enalcMaskConn;
sigc::connection localcontMethodConn, previewlcConn, origlcConn, processwavConn, wavgradlConn, wavedgConn, localedgMethodConn, waveshowConn, localneiMethodConn, wavblurConn, blurlcConn, wavcontConn, wavcompreConn, wavcompConn, fftwlcConn, showmasklcMethodConn, enalcMaskConn;
rtengine::ProcEvent Evlocallabprocesswav;
public:
LocallabContrast();
@ -1358,6 +1390,7 @@ private:
void localcontMethodChanged();
void origlcChanged();
void processwavChanged();
void wavgradlChanged();
void wavedgChanged();
void localedgMethodChanged();
@ -1693,9 +1726,11 @@ private:
Adjuster* const reparcie;
Gtk::CheckButton* const jabcie;
MyComboBoxText* const modecam;
MyComboBoxText* const modeQJ;
MyComboBoxText* const modecie;
Gtk::Frame* const jzFrame;
Gtk::Box* const modeHBoxcam;
Gtk::Box* const modeHBoxQJ;
Gtk::Box* const modeHBoxcie;
Gtk::Frame* const cieFrame;
MyExpander* const expcamscene;
@ -1721,7 +1756,6 @@ private:
Adjuster* const jz100;
Adjuster* const pqremap;
Adjuster* const pqremapcam16;
Gtk::CheckButton* const forcejz;
MyExpander* const expjz;
Gtk::Frame* const jzshFrame;
Adjuster* const hljzcie;
@ -1757,20 +1791,32 @@ private:
Adjuster* const whiteEvjz;
Adjuster* const targetjz;
Gtk::Frame* const bevwevFrame;
Gtk::CheckButton* const forcebw;
Gtk::CheckButton* const sigybjz12;
ToolParamBlock* const sigBox12;
Gtk::Frame* const sigmoidFrame12;
Gtk::CheckButton* const sigq12;
Adjuster* const slopesmoq;
Adjuster* const sigmoidldacie12;
Adjuster* const sigmoidthcie12;
Adjuster* const sigmoidblcie12;
Gtk::Box* autocomprHBox;
Gtk::ToggleButton* const comprcieauto;
Gtk::CheckButton* const normcie12;
Gtk::CheckButton* const normcie;
Gtk::Box* const modeHBoxbwev12;
MyComboBoxText* const bwevMethod12;
Gtk::Box* const modeHBoxbwev;
MyComboBoxText* const bwevMethod;
ToolParamBlock* const sigBox;
Gtk::Frame* const sigmoidFrame;
Gtk::Frame* const sigmoidnormFrame;
Gtk::CheckButton* const sigq;
Gtk::Frame* const sigmoidnormFrame;
Adjuster* const sigmoidldacie;
Adjuster* const sigmoidthcie;
Adjuster* const sigmoidsenscie;
Adjuster* const sigmoidblcie;
Gtk::Box* autocomprHBox;
Gtk::ToggleButton* const comprcieauto;
Gtk::CheckButton* const normcie;
Gtk::Box* const modeHBoxbwev;
MyComboBoxText* const bwevMethod;
Gtk::Frame* const logcieFrame;
Gtk::CheckButton* const logcie;
ToolParamBlock* const comprBox;
@ -1785,8 +1831,13 @@ private:
Adjuster* const slopjcie;
Adjuster* const midtcie;
Gtk::CheckButton* const smoothcie;
Gtk::CheckButton* const smoothcielnk;
Gtk::CheckButton* const smoothcietrc;
Gtk::CheckButton* const smoothcietrcrel;
Gtk::CheckButton* const smoothcieyb;
Gtk::CheckButton* const smoothcielum;
Gtk::CheckButton* const smoothciehigh;
Adjuster* const smoothcieth;
ToolParamBlock* const ciesmoothBox;
Gtk::Box* smoothBox;
MyComboBoxText* const smoothciemet;
@ -1794,6 +1845,12 @@ private:
Adjuster* const slopesmor;
Adjuster* const slopesmog;
Adjuster* const slopesmob;
Adjuster* const kslopesmor;
Adjuster* const kslopesmog;
Adjuster* const kslopesmob;
Adjuster* const contsig;
Adjuster* const skewsig;
Adjuster* const whitsig;
Adjuster* const whitescie;
Adjuster* const blackscie;
@ -1827,10 +1884,18 @@ private:
Gtk::Box* bwcieBox;
Gtk::CheckButton* const bwcie;
Gtk::Frame* const sigmoidjzFrame12;
Gtk::Frame* const sigmoidjzFrame;
Gtk::Frame* const sigmoid2Frame12;
Gtk::Frame* const sigmoid2Frame;
Gtk::CheckButton* const sigcie;
Gtk::CheckButton* const sigjz12;
Adjuster* const sigmoidldajzcie12;
Adjuster* const sigmoidthjzcie12;
Adjuster* const sigmoidbljzcie12;
Gtk::CheckButton* const sigjz;
Gtk::CheckButton* const forcebw;
Adjuster* const sigmoidldajzcie;
Adjuster* const sigmoidthjzcie;
Adjuster* const sigmoidbljzcie;
@ -1927,7 +1992,7 @@ private:
ThresholdAdjuster* const csThresholdcie;
int nextcomprciecount = 0;
sigc::connection AutograycieConn, primMethodconn, illMethodconn, smoothciemetconn, catMethodconn, forcejzConn, forcebwConn, qtojConn, showmaskcieMethodConn, enacieMaskConn, enacieMaskallConn, jabcieConn, sursourcieconn, surroundcieconn, modecieconn, modecamconn, comprcieautoconn, normcieconn, logcieconn, satcieconn, logcieqconn,smoothcieconn, smoothcieybconn,smoothcielumconn, logjzconn, sigjzconn, sigqconn, chjzcieconn, toneMethodcieConn, toneMethodcieConn2, toolcieConn, bwevMethodConn, fftcieMaskConn, gamutcieconn, bwcieconn, expprecamconn, sigcieconn;
sigc::connection AutograycieConn, primMethodconn, illMethodconn, smoothciemetconn, catMethodconn, sigybjz12Conn, qtojConn, showmaskcieMethodConn, enacieMaskConn, enacieMaskallConn, jabcieConn, sursourcieconn, surroundcieconn, modecieconn, modecamconn, modeQJconn, comprcieautoconn, normcie12conn, normcieconn, logcieconn, satcieconn, logcieqconn, smoothcieconn, smoothcielnkconn, smoothciehighconn, smoothcietrcconn, smoothcietrcrelconn, smoothcieybconn,smoothcielumconn, logjzconn, sigjz12conn, forcebwconn, sigjzconn, sigq12conn, sigqconn, chjzcieconn, toneMethodcieConn, toneMethodcieConn2, toolcieConn, bwevMethod12Conn, bwevMethodConn,fftcieMaskConn, gamutcieconn, bwcieconn, expprecamconn, sigcieconn;
sigc::connection previewcieConn, sigmoidqjcieconn;
public:
Locallabcie();
@ -1962,13 +2027,18 @@ public:
void surroundcieChanged();
void modecieChanged();
void modecamChanged();
void modeQJChanged();
void qjmodall();
void qjmodjz();
void qjmodcam();
void curveChanged(CurveEditor* ce) override;
void toneMethodcieChanged();
void toneMethodcie2Changed();
void bwevMethod12Changed();
void bwevMethodChanged();
void updateAutocompute(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const float jz1);
void updatePrimloc(const float redx, const float redy, const float grex, const float grey, const float blux, const float bluy);
void updateiPrimloc(const float r_x, const float r_y, const float g_x, const float g_y, const float b_x, const float b_y, const float w_x, const float w_y, const float m_x, const float m_y, const float me_x, const float me_y, const int pri_);
void updateiPrimloc(const float r_x, const float r_y, const float g_x, const float g_y, const float b_x, const float b_y, const float w_x, const float w_y, const float m_x, const float m_y, const float me_x, const float me_y, const int pri_, const float slg, const bool lkg);
void updatesigloc(const float cont_sig, const float light_sig);
private:
@ -1978,11 +2048,11 @@ private:
void updateGUIToMode(const modeType new_type) override;
void complexityModeChanged();
void AutograycieChanged();
void forcejzChanged();
void forcebwChanged();
void sigybjz12Changed();
void qtojChanged();
void jabcieChanged();
void comprcieautoChanged();
void normcie12Changed();
void normcieChanged();
void gamutcieChanged();
void bwcieChanged();
@ -1994,14 +2064,22 @@ private:
void satcieChanged();
void logcieqChanged();
void smoothcieChanged();
void smoothcielnkChanged();
void smoothciehighChanged();
void smoothcietrcChanged();
void smoothcietrcrelChanged();
void smoothcieybChanged();
void smoothcielumChanged();
void sigcieChanged();
void logjzChanged();
void sigjz12Changed();
void sigjzChanged();
void forcebwChanged();
void sigq12Changed();
void sigqChanged();
void chjzcieChanged();
void updatecieGUI();
void updatecielnkGUI();
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void showmaskcieMethodChanged();
void enacieMaskChanged();

File diff suppressed because it is too large Load Diff

View File

@ -197,6 +197,10 @@ void Options::updatePaths()
lastToneCurvesDir = preferredPath;
}
if (lastIcmCurvesDir.empty() || !Glib::file_test(lastIcmCurvesDir, Glib::FILE_TEST_EXISTS) || !Glib::file_test(lastIcmCurvesDir, Glib::FILE_TEST_IS_DIR)) {
lastIcmCurvesDir = preferredPath;
}
if (lastProfilingReferenceDir.empty() || !Glib::file_test(lastProfilingReferenceDir, Glib::FILE_TEST_EXISTS) || !Glib::file_test(lastProfilingReferenceDir, Glib::FILE_TEST_IS_DIR)) {
lastProfilingReferenceDir = preferredPath;
}
@ -691,6 +695,7 @@ void Options::setDefaults()
lastPFCurvesDir = "";
lastHsvCurvesDir = "";
lastToneCurvesDir = "";
lastIcmCurvesDir = "";
lastVibranceCurvesDir = "";
lastProfilingReferenceDir = "";
lastBWCurvesDir = "";
@ -2315,6 +2320,7 @@ void Options::readFromFile(Glib::ustring fname)
safeDirGet(keyFile, "Dialogs", "LastBWCurvesDir", lastBWCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastToneCurvesDir", lastToneCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastIcmCurvesDir", lastIcmCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastVibranceCurvesDir", lastVibranceCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastProfilingReferenceDir", lastProfilingReferenceDir);
safeDirGet(keyFile, "Dialogs", "LastLensProfileDir", lastLensProfileDir);
@ -2811,6 +2817,7 @@ void Options::saveToFile(Glib::ustring fname)
keyFile.set_string("Dialogs", "LastHsvCurvesDir", lastHsvCurvesDir);
keyFile.set_string("Dialogs", "LastBWCurvesDir", lastBWCurvesDir);
keyFile.set_string("Dialogs", "LastToneCurvesDir", lastToneCurvesDir);
keyFile.set_string("Dialogs", "LastIcmCurvesDir", lastIcmCurvesDir);
keyFile.set_string("Dialogs", "LastVibranceCurvesDir", lastVibranceCurvesDir);
keyFile.set_string("Dialogs", "LastProfilingReferenceDir", lastProfilingReferenceDir);
keyFile.set_string("Dialogs", "LastLensProfileDir", lastLensProfileDir);

View File

@ -486,6 +486,7 @@ public:
Glib::ustring lastRetinexDir;
Glib::ustring lastDenoiseCurvesDir;
Glib::ustring lastWaveletCurvesDir;
Glib::ustring lastIcmCurvesDir;
Glib::ustring lastlocalCurvesDir;
Glib::ustring lastPFCurvesDir;
Glib::ustring lastHsvCurvesDir;

View File

@ -600,9 +600,14 @@ void ParamsEdited::set(bool v)
icm.outputProfile = v;
icm.outputIntent = v;
icm.outputBPC = v;
icm.workingTRCGamma = v;
icm.workingTRCSlope = v;
icm.wGamma = v;
icm.wSlope = v;
icm.wmidtcie = v;
icm.sigmatrc = v;
icm.offstrc = v;
icm.residtrc = v;
icm.pyrwavtrc = v;
icm.opacityCurveWLI = v;
icm.wsmoothcie = v;
icm.redx = v;
icm.redy = v;
@ -616,6 +621,7 @@ void ParamsEdited::set(bool v)
icm.preser = v;
icm.fbw = v;
icm.trcExp = v;
icm.wavExp = v;
icm.gamut = v;
icm.labgridcieALow = v;
icm.labgridcieBLow = v;
@ -1365,7 +1371,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).llcurve = locallab.spots.at(j).llcurve && pSpot.llcurve == otherSpot.llcurve;
locallab.spots.at(j).lccurve = locallab.spots.at(j).lccurve && pSpot.lccurve == otherSpot.lccurve;
locallab.spots.at(j).cccurve = locallab.spots.at(j).cccurve && pSpot.cccurve == otherSpot.cccurve;
locallab.spots.at(j).clcurve = locallab.spots.at(j).clcurve && pSpot.cccurve == otherSpot.clcurve;
locallab.spots.at(j).clcurve = locallab.spots.at(j).clcurve && pSpot.clcurve == otherSpot.clcurve;
locallab.spots.at(j).rgbcurve = locallab.spots.at(j).rgbcurve && pSpot.rgbcurve == otherSpot.rgbcurve;
locallab.spots.at(j).LHcurve = locallab.spots.at(j).LHcurve && pSpot.LHcurve == otherSpot.LHcurve;
locallab.spots.at(j).HHcurve = locallab.spots.at(j).HHcurve && pSpot.HHcurve == otherSpot.HHcurve;
@ -1702,6 +1708,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).lcdarkness = locallab.spots.at(j).lcdarkness && pSpot.lcdarkness == otherSpot.lcdarkness;
locallab.spots.at(j).lclightness = locallab.spots.at(j).lclightness && pSpot.lclightness == otherSpot.lclightness;
locallab.spots.at(j).sigmalc = locallab.spots.at(j).sigmalc && pSpot.sigmalc == otherSpot.sigmalc;
locallab.spots.at(j).offslc = locallab.spots.at(j).offslc && pSpot.offslc == otherSpot.offslc;
locallab.spots.at(j).levelwav = locallab.spots.at(j).levelwav && pSpot.levelwav == otherSpot.levelwav;
locallab.spots.at(j).residcont = locallab.spots.at(j).residcont && pSpot.residcont == otherSpot.residcont;
locallab.spots.at(j).residsha = locallab.spots.at(j).residsha && pSpot.residsha == otherSpot.residsha;
@ -1753,6 +1760,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).wavgradl = locallab.spots.at(j).wavgradl && pSpot.wavgradl == otherSpot.wavgradl;
locallab.spots.at(j).wavcompre = locallab.spots.at(j).wavcompre && pSpot.wavcompre == otherSpot.wavcompre;
locallab.spots.at(j).origlc = locallab.spots.at(j).origlc && pSpot.origlc == otherSpot.origlc;
locallab.spots.at(j).processwav = locallab.spots.at(j).processwav && pSpot.processwav == otherSpot.processwav;
locallab.spots.at(j).localcontMethod = locallab.spots.at(j).localcontMethod && pSpot.localcontMethod == otherSpot.localcontMethod;
locallab.spots.at(j).localedgMethod = locallab.spots.at(j).localedgMethod && pSpot.localedgMethod == otherSpot.localedgMethod;
locallab.spots.at(j).localneiMethod = locallab.spots.at(j).localneiMethod && pSpot.localneiMethod == otherSpot.localneiMethod;
@ -1896,11 +1904,11 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).reparcie = locallab.spots.at(j).reparcie && pSpot.reparcie == otherSpot.reparcie;
locallab.spots.at(j).sensicie = locallab.spots.at(j).sensicie && pSpot.sensicie == otherSpot.sensicie;
locallab.spots.at(j).Autograycie = locallab.spots.at(j).Autograycie && pSpot.Autograycie == otherSpot.Autograycie;
locallab.spots.at(j).forcejz = locallab.spots.at(j).forcejz && pSpot.forcejz == otherSpot.forcejz;
locallab.spots.at(j).forcebw = locallab.spots.at(j).forcebw && pSpot.forcebw == otherSpot.forcebw;
locallab.spots.at(j).sigybjz12 = locallab.spots.at(j).sigybjz12 && pSpot.sigybjz12 == otherSpot.sigybjz12;
locallab.spots.at(j).qtoj = locallab.spots.at(j).qtoj && pSpot.qtoj == otherSpot.qtoj;
locallab.spots.at(j).jabcie = locallab.spots.at(j).jabcie && pSpot.jabcie == otherSpot.jabcie;
locallab.spots.at(j).comprcieauto = locallab.spots.at(j).comprcieauto && pSpot.comprcieauto == otherSpot.comprcieauto;
locallab.spots.at(j).normcie12 = locallab.spots.at(j).normcie12 && pSpot.normcie12 == otherSpot.normcie12;
locallab.spots.at(j).normcie = locallab.spots.at(j).normcie && pSpot.normcie == otherSpot.normcie;
locallab.spots.at(j).gamutcie = locallab.spots.at(j).gamutcie && pSpot.gamutcie == otherSpot.gamutcie;
locallab.spots.at(j).bwcie = locallab.spots.at(j).bwcie && pSpot.bwcie == otherSpot.bwcie;
@ -1909,16 +1917,25 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).satcie = locallab.spots.at(j).satcie && pSpot.satcie == otherSpot.satcie;
locallab.spots.at(j).logcieq = locallab.spots.at(j).logcieq && pSpot.logcieq == otherSpot.logcieq;
locallab.spots.at(j).smoothcie = locallab.spots.at(j).smoothcie && pSpot.smoothcie == otherSpot.smoothcie;
locallab.spots.at(j).smoothcietrc = locallab.spots.at(j).smoothcietrc && pSpot.smoothcietrc == otherSpot.smoothcietrc;
locallab.spots.at(j).smoothcietrcrel = locallab.spots.at(j).smoothcietrcrel && pSpot.smoothcietrcrel == otherSpot.smoothcietrcrel;
locallab.spots.at(j).smoothcieyb = locallab.spots.at(j).smoothcieyb && pSpot.smoothcieyb == otherSpot.smoothcieyb;
locallab.spots.at(j).smoothcielum = locallab.spots.at(j).smoothcielum && pSpot.smoothcielum == otherSpot.smoothcielum;
locallab.spots.at(j).smoothciehigh = locallab.spots.at(j).smoothciehigh && pSpot.smoothciehigh == otherSpot.smoothciehigh;
locallab.spots.at(j).smoothcielnk = locallab.spots.at(j).smoothcielnk && pSpot.smoothcielnk == otherSpot.smoothcielnk;
locallab.spots.at(j).logjz = locallab.spots.at(j).logjz && pSpot.logjz == otherSpot.logjz;
locallab.spots.at(j).sigjz12 = locallab.spots.at(j).sigjz12 && pSpot.sigjz12 == otherSpot.sigjz12;
locallab.spots.at(j).sigjz = locallab.spots.at(j).sigjz && pSpot.sigjz == otherSpot.sigjz;
locallab.spots.at(j).forcebw = locallab.spots.at(j).forcebw && pSpot.forcebw == otherSpot.forcebw;
locallab.spots.at(j).sigq12 = locallab.spots.at(j).sigq12 && pSpot.sigq12 == otherSpot.sigq12;
locallab.spots.at(j).sigq = locallab.spots.at(j).sigq && pSpot.sigq == otherSpot.sigq;
locallab.spots.at(j).chjzcie = locallab.spots.at(j).chjzcie && pSpot.chjzcie == otherSpot.chjzcie;
locallab.spots.at(j).sourceGraycie = locallab.spots.at(j).sourceGraycie && pSpot.sourceGraycie == otherSpot.sourceGraycie;
locallab.spots.at(j).sourceabscie = locallab.spots.at(j).sourceabscie && pSpot.sourceabscie == otherSpot.sourceabscie;
locallab.spots.at(j).sursourcie = locallab.spots.at(j).sursourcie && pSpot.sursourcie == otherSpot.sursourcie;
locallab.spots.at(j).modecam = locallab.spots.at(j).modecam && pSpot.modecam == otherSpot.modecam;
locallab.spots.at(j).modeQJ = locallab.spots.at(j).modeQJ && pSpot.modeQJ == otherSpot.modeQJ;
locallab.spots.at(j).bwevMethod12 = locallab.spots.at(j).bwevMethod12 && pSpot.bwevMethod12 == otherSpot.bwevMethod12;
locallab.spots.at(j).bwevMethod = locallab.spots.at(j).bwevMethod && pSpot.bwevMethod == otherSpot.bwevMethod;
locallab.spots.at(j).modecie = locallab.spots.at(j).modecie && pSpot.modecie == otherSpot.modecie;
locallab.spots.at(j).saturlcie = locallab.spots.at(j).saturlcie && pSpot.saturlcie == otherSpot.saturlcie;
@ -1961,19 +1978,33 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).blackEvjz = locallab.spots.at(j).blackEvjz && pSpot.blackEvjz == otherSpot.blackEvjz;
locallab.spots.at(j).whiteEvjz = locallab.spots.at(j).whiteEvjz && pSpot.whiteEvjz == otherSpot.whiteEvjz;
locallab.spots.at(j).targetjz = locallab.spots.at(j).targetjz && pSpot.targetjz == otherSpot.targetjz;
locallab.spots.at(j).sigmoidldacie12 = locallab.spots.at(j).sigmoidldacie12 && pSpot.sigmoidldacie12 == otherSpot.sigmoidldacie12;
locallab.spots.at(j).sigmoidthcie12 = locallab.spots.at(j).sigmoidthcie12 && pSpot.sigmoidthcie12 == otherSpot.sigmoidthcie12;
locallab.spots.at(j).sigmoidblcie12 = locallab.spots.at(j).sigmoidblcie12 && pSpot.sigmoidblcie12 == otherSpot.sigmoidblcie12;
locallab.spots.at(j).sigmoidldacie = locallab.spots.at(j).sigmoidldacie && pSpot.sigmoidldacie == otherSpot.sigmoidldacie;
locallab.spots.at(j).sigmoidthcie = locallab.spots.at(j).sigmoidthcie && pSpot.sigmoidthcie == otherSpot.sigmoidthcie;
locallab.spots.at(j).sigmoidsenscie = locallab.spots.at(j).sigmoidsenscie && pSpot.sigmoidsenscie == otherSpot.sigmoidsenscie;
locallab.spots.at(j).sigmoidblcie = locallab.spots.at(j).sigmoidblcie && pSpot.sigmoidblcie == otherSpot.sigmoidblcie;
locallab.spots.at(j).comprcie = locallab.spots.at(j).comprcie && pSpot.comprcie == otherSpot.comprcie;
locallab.spots.at(j).strcielog = locallab.spots.at(j).strcielog && pSpot.strcielog == otherSpot.strcielog;
locallab.spots.at(j).comprcieth = locallab.spots.at(j).comprcieth && pSpot.comprcieth == otherSpot.comprcieth;
locallab.spots.at(j).gamjcie = locallab.spots.at(j).gamjcie && pSpot.gamjcie == otherSpot.gamjcie;
locallab.spots.at(j).smoothcieth = locallab.spots.at(j).smoothcieth && pSpot.smoothcieth == otherSpot.smoothcieth;
locallab.spots.at(j).slopjcie = locallab.spots.at(j).slopjcie && pSpot.slopjcie == otherSpot.slopjcie;
locallab.spots.at(j).slopesmo = locallab.spots.at(j).slopesmo && pSpot.slopesmo == otherSpot.slopesmo;
locallab.spots.at(j).slopesmoq = locallab.spots.at(j).slopesmoq && pSpot.slopesmoq == otherSpot.slopesmoq;
locallab.spots.at(j).slopesmor = locallab.spots.at(j).slopesmor && pSpot.slopesmor == otherSpot.slopesmor;
locallab.spots.at(j).slopesmog = locallab.spots.at(j).slopesmog && pSpot.slopesmog == otherSpot.slopesmog;
locallab.spots.at(j).slopesmob = locallab.spots.at(j).slopesmob && pSpot.slopesmob == otherSpot.slopesmob;
locallab.spots.at(j).contsig = locallab.spots.at(j).contsig && pSpot.contsig == otherSpot.contsig;
locallab.spots.at(j).skewsig = locallab.spots.at(j).skewsig && pSpot.skewsig == otherSpot.skewsig;
locallab.spots.at(j).whitsig = locallab.spots.at(j).whitsig && pSpot.whitsig == otherSpot.whitsig;
locallab.spots.at(j).kslopesmor = locallab.spots.at(j).kslopesmor && pSpot.kslopesmor == otherSpot.kslopesmor;
locallab.spots.at(j).kslopesmog = locallab.spots.at(j).kslopesmog && pSpot.kslopesmog == otherSpot.kslopesmog;
locallab.spots.at(j).kslopesmob = locallab.spots.at(j).kslopesmob && pSpot.kslopesmob == otherSpot.kslopesmob;
locallab.spots.at(j).midtcie = locallab.spots.at(j).midtcie && pSpot.midtcie == otherSpot.midtcie;
locallab.spots.at(j).grexl = locallab.spots.at(j).grexl && pSpot.grexl == otherSpot.grexl;
locallab.spots.at(j).greyl = locallab.spots.at(j).greyl && pSpot.greyl == otherSpot.greyl;
@ -2001,9 +2032,14 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).smoothciemet = locallab.spots.at(j).smoothciemet && pSpot.smoothciemet == otherSpot.smoothciemet;
locallab.spots.at(j).primMethod = locallab.spots.at(j).primMethod && pSpot.primMethod == otherSpot.primMethod;
locallab.spots.at(j).catMethod = locallab.spots.at(j).catMethod && pSpot.catMethod == otherSpot.catMethod;
locallab.spots.at(j).sigmoidldajzcie12 = locallab.spots.at(j).sigmoidldajzcie12 && pSpot.sigmoidldajzcie12 == otherSpot.sigmoidldajzcie12;
locallab.spots.at(j).sigmoidthjzcie12 = locallab.spots.at(j).sigmoidthjzcie12 && pSpot.sigmoidthjzcie12 == otherSpot.sigmoidthjzcie12;
locallab.spots.at(j).sigmoidbljzcie12 = locallab.spots.at(j).sigmoidbljzcie12 && pSpot.sigmoidbljzcie12 == otherSpot.sigmoidbljzcie12;
locallab.spots.at(j).sigmoidldajzcie = locallab.spots.at(j).sigmoidldajzcie && pSpot.sigmoidldajzcie == otherSpot.sigmoidldajzcie;
locallab.spots.at(j).sigmoidthjzcie = locallab.spots.at(j).sigmoidthjzcie && pSpot.sigmoidthjzcie == otherSpot.sigmoidthjzcie;
locallab.spots.at(j).sigmoidbljzcie = locallab.spots.at(j).sigmoidbljzcie && pSpot.sigmoidbljzcie == otherSpot.sigmoidbljzcie;
locallab.spots.at(j).contqcie = locallab.spots.at(j).contqcie && pSpot.contqcie == otherSpot.contqcie;
locallab.spots.at(j).contsigqcie = locallab.spots.at(j).contsigqcie && pSpot.contsigqcie == otherSpot.contsigqcie;
locallab.spots.at(j).colorflcie = locallab.spots.at(j).colorflcie && pSpot.colorflcie == otherSpot.colorflcie;
@ -2129,9 +2165,14 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
icm.outputProfile = icm.outputProfile && p.icm.outputProfile == other.icm.outputProfile;
icm.outputIntent = icm.outputIntent && p.icm.outputIntent == other.icm.outputIntent;
icm.outputBPC = icm.outputBPC && p.icm.outputBPC == other.icm.outputBPC ;
icm.workingTRCGamma = icm.workingTRCGamma && p.icm.workingTRCGamma == other.icm.workingTRCGamma;
icm.workingTRCSlope = icm.workingTRCSlope && p.icm.workingTRCSlope == other.icm.workingTRCSlope;
icm.wGamma = icm.wGamma && p.icm.wGamma == other.icm.wGamma;
icm.wSlope = icm.wSlope && p.icm.wSlope == other.icm.wSlope;
icm.wmidtcie = icm.wmidtcie && p.icm.wmidtcie == other.icm.wmidtcie;
icm.sigmatrc = icm.sigmatrc && p.icm.sigmatrc == other.icm.sigmatrc;
icm.offstrc = icm.offstrc && p.icm.offstrc == other.icm.offstrc;
icm.residtrc = icm.residtrc && p.icm.residtrc == other.icm.residtrc;
icm.pyrwavtrc = icm.pyrwavtrc && p.icm.pyrwavtrc == other.icm.pyrwavtrc;
icm.opacityCurveWLI = icm.opacityCurveWLI && p.icm.opacityCurveWLI == other.icm.opacityCurveWLI;
icm.wsmoothcie = icm.wsmoothcie && p.icm.wsmoothcie == other.icm.wsmoothcie;
icm.redx = icm.redx && p.icm.redx == other.icm.redx;
icm.redy = icm.redy && p.icm.redy == other.icm.redy;
@ -2155,6 +2196,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
icm.preser = icm.preser && p.icm.preser == other.icm.preser;
icm.fbw = icm.fbw && p.icm.fbw == other.icm.fbw;
icm.trcExp = icm.trcExp && p.icm.trcExp == other.icm.trcExp;
icm.wavExp = icm.wavExp && p.icm.wavExp == other.icm.wavExp;
icm.gamut = icm.gamut && p.icm.gamut == other.icm.gamut;
icm.aRendIntent = icm.aRendIntent && p.icm.aRendIntent == other.icm.aRendIntent;
icm.workingTRC = icm.workingTRC && p.icm.workingTRC == other.icm.workingTRC;
@ -5449,6 +5491,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).sigmalc = mods.locallab.spots.at(i).sigmalc;
}
if (locallab.spots.at(i).offslc) {
toEdit.locallab.spots.at(i).offslc = mods.locallab.spots.at(i).offslc;
}
if (locallab.spots.at(i).levelwav) {
toEdit.locallab.spots.at(i).levelwav = mods.locallab.spots.at(i).levelwav;
}
@ -5654,6 +5700,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).origlc = mods.locallab.spots.at(i).origlc;
}
if (locallab.spots.at(i).processwav) {
toEdit.locallab.spots.at(i).processwav = mods.locallab.spots.at(i).processwav;
}
if (locallab.spots.at(i).localcontMethod) {
toEdit.locallab.spots.at(i).localcontMethod = mods.locallab.spots.at(i).localcontMethod;
}
@ -6188,12 +6238,8 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).Autograycie = mods.locallab.spots.at(i).Autograycie;
}
if (locallab.spots.at(i).forcejz) {
toEdit.locallab.spots.at(i).forcejz = mods.locallab.spots.at(i).forcejz;
}
if (locallab.spots.at(i).forcebw) {
toEdit.locallab.spots.at(i).forcebw = mods.locallab.spots.at(i).forcebw;
if (locallab.spots.at(i).sigybjz12) {
toEdit.locallab.spots.at(i).sigybjz12 = mods.locallab.spots.at(i).sigybjz12;
}
if (locallab.spots.at(i).qtoj) {
@ -6208,6 +6254,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).comprcieauto = mods.locallab.spots.at(i).comprcieauto;
}
if (locallab.spots.at(i).normcie12) {
toEdit.locallab.spots.at(i).normcie12 = mods.locallab.spots.at(i).normcie12;
}
if (locallab.spots.at(i).normcie) {
toEdit.locallab.spots.at(i).normcie = mods.locallab.spots.at(i).normcie;
}
@ -6240,6 +6290,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).smoothcie = mods.locallab.spots.at(i).smoothcie;
}
if (locallab.spots.at(i).smoothcietrc) {
toEdit.locallab.spots.at(i).smoothcietrc = mods.locallab.spots.at(i).smoothcietrc;
}
if (locallab.spots.at(i).smoothcietrcrel) {
toEdit.locallab.spots.at(i).smoothcietrcrel = mods.locallab.spots.at(i).smoothcietrcrel;
}
if (locallab.spots.at(i).smoothcieyb) {
toEdit.locallab.spots.at(i).smoothcieyb = mods.locallab.spots.at(i).smoothcieyb;
}
@ -6248,14 +6306,34 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).smoothcielum = mods.locallab.spots.at(i).smoothcielum;
}
if (locallab.spots.at(i).smoothciehigh) {
toEdit.locallab.spots.at(i).smoothciehigh = mods.locallab.spots.at(i).smoothciehigh;
}
if (locallab.spots.at(i).smoothcielnk) {
toEdit.locallab.spots.at(i).smoothcielnk = mods.locallab.spots.at(i).smoothcielnk;
}
if (locallab.spots.at(i).logjz) {
toEdit.locallab.spots.at(i).logjz = mods.locallab.spots.at(i).logjz;
}
if (locallab.spots.at(i).sigjz12) {
toEdit.locallab.spots.at(i).sigjz12 = mods.locallab.spots.at(i).sigjz12;
}
if (locallab.spots.at(i).sigjz) {
toEdit.locallab.spots.at(i).sigjz = mods.locallab.spots.at(i).sigjz;
}
if (locallab.spots.at(i).forcebw) {
toEdit.locallab.spots.at(i).forcebw = mods.locallab.spots.at(i).forcebw;
}
if (locallab.spots.at(i).sigq12) {
toEdit.locallab.spots.at(i).sigq12 = mods.locallab.spots.at(i).sigq12;
}
if (locallab.spots.at(i).sigq) {
toEdit.locallab.spots.at(i).sigq = mods.locallab.spots.at(i).sigq;
}
@ -6280,6 +6358,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).modecam = mods.locallab.spots.at(i).modecam;
}
if (locallab.spots.at(i).modeQJ) {
toEdit.locallab.spots.at(i).modeQJ = mods.locallab.spots.at(i).modeQJ;
}
if (locallab.spots.at(i).bwevMethod12) {
toEdit.locallab.spots.at(i).bwevMethod12 = mods.locallab.spots.at(i).bwevMethod12;
}
if (locallab.spots.at(i).bwevMethod) {
toEdit.locallab.spots.at(i).bwevMethod = mods.locallab.spots.at(i).bwevMethod;
}
@ -6444,6 +6530,19 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).targetjz = mods.locallab.spots.at(i).targetjz;
}
if (locallab.spots.at(i).sigmoidldacie12) {
toEdit.locallab.spots.at(i).sigmoidldacie12 = mods.locallab.spots.at(i).sigmoidldacie12;
}
if (locallab.spots.at(i).sigmoidthcie12) {
toEdit.locallab.spots.at(i).sigmoidthcie12 = mods.locallab.spots.at(i).sigmoidthcie12;
}
if (locallab.spots.at(i).sigmoidblcie12) {
toEdit.locallab.spots.at(i).sigmoidblcie12 = mods.locallab.spots.at(i).sigmoidblcie12;
}
if (locallab.spots.at(i).sigmoidldacie) {
toEdit.locallab.spots.at(i).sigmoidldacie = mods.locallab.spots.at(i).sigmoidldacie;
}
@ -6476,14 +6575,34 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).gamjcie = mods.locallab.spots.at(i).gamjcie;
}
if (locallab.spots.at(i).smoothcieth) {
toEdit.locallab.spots.at(i).smoothcieth = mods.locallab.spots.at(i).smoothcieth;
}
if (locallab.spots.at(i).slopjcie) {
toEdit.locallab.spots.at(i).slopjcie = mods.locallab.spots.at(i).slopjcie;
}
if (locallab.spots.at(i).contsig) {
toEdit.locallab.spots.at(i).contsig = mods.locallab.spots.at(i).contsig;
}
if (locallab.spots.at(i).skewsig) {
toEdit.locallab.spots.at(i).skewsig = mods.locallab.spots.at(i).skewsig;
}
if (locallab.spots.at(i).whitsig) {
toEdit.locallab.spots.at(i).whitsig = mods.locallab.spots.at(i).whitsig;
}
if (locallab.spots.at(i).slopesmo) {
toEdit.locallab.spots.at(i).slopesmo = mods.locallab.spots.at(i).slopesmo;
}
if (locallab.spots.at(i).slopesmoq) {
toEdit.locallab.spots.at(i).slopesmoq = mods.locallab.spots.at(i).slopesmoq;
}
if (locallab.spots.at(i).slopesmor) {
toEdit.locallab.spots.at(i).slopesmor = mods.locallab.spots.at(i).slopesmor;
}
@ -6496,6 +6615,18 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).slopesmob = mods.locallab.spots.at(i).slopesmob;
}
if (locallab.spots.at(i).kslopesmor) {
toEdit.locallab.spots.at(i).kslopesmor = mods.locallab.spots.at(i).kslopesmor;
}
if (locallab.spots.at(i).kslopesmog) {
toEdit.locallab.spots.at(i).kslopesmog = mods.locallab.spots.at(i).kslopesmog;
}
if (locallab.spots.at(i).kslopesmob) {
toEdit.locallab.spots.at(i).kslopesmob = mods.locallab.spots.at(i).kslopesmob;
}
if (locallab.spots.at(i).midtcie) {
toEdit.locallab.spots.at(i).midtcie = mods.locallab.spots.at(i).midtcie;
}
@ -6600,6 +6731,18 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).catMethod = mods.locallab.spots.at(i).catMethod;
}
if (locallab.spots.at(i).sigmoidldajzcie12) {
toEdit.locallab.spots.at(i).sigmoidldajzcie12 = mods.locallab.spots.at(i).sigmoidldajzcie12;
}
if (locallab.spots.at(i).sigmoidthjzcie12) {
toEdit.locallab.spots.at(i).sigmoidthjzcie12 = mods.locallab.spots.at(i).sigmoidthjzcie12;
}
if (locallab.spots.at(i).sigmoidbljzcie12) {
toEdit.locallab.spots.at(i).sigmoidbljzcie12 = mods.locallab.spots.at(i).sigmoidbljzcie12;
}
if (locallab.spots.at(i).sigmoidldajzcie) {
toEdit.locallab.spots.at(i).sigmoidldajzcie = mods.locallab.spots.at(i).sigmoidldajzcie;
}
@ -7030,18 +7173,38 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.icm.outputBPC = mods.icm.outputBPC;
}
if (icm.workingTRCGamma) {
toEdit.icm.workingTRCGamma = mods.icm.workingTRCGamma;
if (icm.wGamma) {
toEdit.icm.wGamma = mods.icm.wGamma;
}
if (icm.workingTRCSlope) {
toEdit.icm.workingTRCSlope = mods.icm.workingTRCSlope;
if (icm.wSlope) {
toEdit.icm.wSlope = mods.icm.wSlope;
}
if (icm.wmidtcie) {
toEdit.icm.wmidtcie = mods.icm.wmidtcie;
}
if (icm.sigmatrc) {
toEdit.icm.sigmatrc = mods.icm.sigmatrc;
}
if (icm.offstrc) {
toEdit.icm.offstrc = mods.icm.offstrc;
}
if (icm.residtrc) {
toEdit.icm.residtrc = mods.icm.residtrc;
}
if (icm.pyrwavtrc) {
toEdit.icm.pyrwavtrc = mods.icm.pyrwavtrc;
}
if (icm.opacityCurveWLI) {
toEdit.icm.opacityCurveWLI = mods.icm.opacityCurveWLI;
}
if (icm.wsmoothcie) {
toEdit.icm.wsmoothcie = mods.icm.wsmoothcie;
}
@ -7094,6 +7257,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.icm.trcExp = mods.icm.trcExp;
}
if (icm.wavExp) {
toEdit.icm.wavExp = mods.icm.wavExp;
}
if (icm.gamut) {
toEdit.icm.gamut = mods.icm.gamut;
}
@ -8558,6 +8725,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
lcdarkness(v),
lclightness(v),
sigmalc(v),
offslc(v),
levelwav(v),
residcont(v),
residsha(v),
@ -8609,6 +8777,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
wavgradl(v),
wavcompre(v),
origlc(v),
processwav(v),
localcontMethod(v),
localedgMethod(v),
localneiMethod(v),
@ -8745,11 +8914,11 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
reparcie(v),
sensicie(v),
Autograycie(v),
forcejz(v),
forcebw(v),
sigybjz12(v),
qtoj(v),
jabcie(v),
comprcieauto(v),
normcie12(v),
normcie(v),
gamutcie(v),
bwcie(v),
@ -8758,16 +8927,25 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
satcie(v),
logcieq(v),
smoothcie(v),
smoothcietrc(v),
smoothcietrcrel(v),
smoothcieyb(v),
smoothcielum(v),
smoothciehigh(v),
smoothcielnk(v),
logjz(v),
sigjz12(v),
sigjz(v),
forcebw(v),
sigq12(v),
sigq(v),
chjzcie(v),
sourceGraycie(v),
sourceabscie(v),
sursourcie(v),
modecam(v),
modeQJ(v),
bwevMethod12(v),
bwevMethod(v),
modecie(v),
saturlcie(v),
@ -8810,6 +8988,9 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
blackEvjz(v),
whiteEvjz(v),
targetjz(v),
sigmoidldacie12(v),
sigmoidthcie12(v),
sigmoidblcie12(v),
sigmoidldacie(v),
sigmoidthcie(v),
sigmoidsenscie(v),
@ -8818,11 +8999,19 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
strcielog(v),
comprcieth(v),
gamjcie(v),
smoothcieth(v),
slopjcie(v),
contsig(v),
skewsig(v),
whitsig(v),
slopesmo(v),
slopesmoq(v),
slopesmor(v),
slopesmog(v),
slopesmob(v),
kslopesmor(v),
kslopesmog(v),
kslopesmob(v),
midtcie(v),
redxl(v),
redyl(v),
@ -8849,6 +9038,9 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
smoothciemet(v),
primMethod(v),
catMethod(v),
sigmoidldajzcie12(v),
sigmoidthjzcie12(v),
sigmoidbljzcie12(v),
sigmoidldajzcie(v),
sigmoidthjzcie(v),
sigmoidbljzcie(v),
@ -9321,6 +9513,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
lcdarkness = v;
lclightness = v;
sigmalc = v;
offslc = v;
levelwav = v;
residcont = v;
residsha = v;
@ -9372,6 +9565,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
wavgradl = v;
wavcompre = v;
origlc = v;
processwav = v;
localcontMethod = v;
localedgMethod = v;
localneiMethod = v;
@ -9512,11 +9706,11 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
reparcie = v;
sensicie = v;
Autograycie = v;
forcejz = v;
forcebw = v;
sigybjz12 = v;
qtoj = v;
jabcie = v;
comprcieauto = v;
normcie12 = v;
normcie = v;
gamutcie = v;
bwcie = v;
@ -9525,16 +9719,25 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
satcie = v;
logcieq = v;
smoothcie = v;
smoothcietrc = v;
smoothcietrcrel = v;
smoothcieyb = v;
smoothcielum = v;
smoothciehigh = v;
smoothcielnk = v;
logjz = v;
sigjz12 = v;
sigjz = v;
forcebw = v;
sigq12 = v;
sigq = v;
chjzcie = v;
sourceGraycie = v;
sourceabscie = v;
sursourcie = v;
modecam = v;
modeQJ = v;
bwevMethod12 = v;
bwevMethod = v;
modecie = v;
saturlcie = v;
@ -9577,6 +9780,10 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
blackEvjz = v;
whiteEvjz = v;
targetjz = v;
sigmoidldacie12 = v;
sigmoidthcie12 = v;
sigmoidblcie12 = v;
sigmoidldacie = v;
sigmoidthcie = v;
sigmoidsenscie = v;
@ -9585,11 +9792,19 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
strcielog = v;
comprcieth = v;
gamjcie = v;
smoothcieth = v;
slopjcie = v;
contsig = v;
skewsig = v;
whitsig = v;
slopesmo = v;
slopesmoq = v;
slopesmor = v;
slopesmog = v;
slopesmob = v;
kslopesmor = v;
kslopesmog = v;
kslopesmob = v;
midtcie = v;
redxl = v;
redyl = v;
@ -9616,6 +9831,9 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
smoothciemet = v;
primMethod = v;
catMethod = v;
sigmoidldajzcie12 = v;
sigmoidthjzcie12 = v;
sigmoidbljzcie12 = v;
sigmoidldajzcie = v;
sigmoidthjzcie = v;
sigmoidbljzcie = v;

View File

@ -845,6 +845,7 @@ public:
bool lcdarkness;
bool lclightness;
bool sigmalc;
bool offslc;
bool levelwav;
bool residcont;
bool residsha;
@ -896,6 +897,7 @@ public:
bool wavgradl;
bool wavcompre;
bool origlc;
bool processwav;
bool localcontMethod;
bool localedgMethod;
bool localneiMethod;
@ -1032,11 +1034,11 @@ public:
bool reparcie;
bool sensicie;
bool Autograycie;
bool forcejz;
bool forcebw;
bool sigybjz12;
bool qtoj;
bool jabcie;
bool comprcieauto;
bool normcie12;
bool normcie;
bool gamutcie;
bool bwcie;
@ -1045,16 +1047,25 @@ public:
bool satcie;
bool logcieq;
bool smoothcie;
bool smoothcietrc;
bool smoothcietrcrel;
bool smoothcieyb;
bool smoothcielum;
bool smoothciehigh;
bool smoothcielnk;
bool logjz;
bool sigjz12;
bool sigjz;
bool forcebw;
bool sigq12;
bool sigq;
bool chjzcie;
bool sourceGraycie;
bool sourceabscie;
bool sursourcie;
bool modecam;
bool modeQJ;
bool bwevMethod12;
bool bwevMethod;
bool modecie;
bool saturlcie;
@ -1097,6 +1108,9 @@ public:
bool blackEvjz;
bool whiteEvjz;
bool targetjz;
bool sigmoidldacie12;
bool sigmoidthcie12;
bool sigmoidblcie12;
bool sigmoidldacie;
bool sigmoidthcie;
bool sigmoidsenscie;
@ -1105,11 +1119,19 @@ public:
bool strcielog;
bool comprcieth;
bool gamjcie;
bool smoothcieth;
bool slopjcie;
bool contsig;
bool skewsig;
bool whitsig;
bool slopesmo;
bool slopesmoq;
bool slopesmor;
bool slopesmog;
bool slopesmob;
bool kslopesmor;
bool kslopesmog;
bool kslopesmob;
bool midtcie;
bool redxl;
bool redyl;
@ -1136,9 +1158,14 @@ public:
bool smoothciemet;
bool primMethod;
bool catMethod;
bool sigmoidldajzcie12;
bool sigmoidthjzcie12;
bool sigmoidbljzcie12;
bool sigmoidldajzcie;
bool sigmoidthjzcie;
bool sigmoidbljzcie;
bool contqcie;
bool contsigqcie;
bool colorflcie;
@ -1347,9 +1374,15 @@ struct ColorManagementParamsEdited {
bool workingProfile;
bool workingTRC;
bool workingTRCGamma;
bool workingTRCSlope;
bool wGamma;
bool wSlope;
bool wmidtcie;
bool sigmatrc;
bool offstrc;
bool residtrc;
bool pyrwavtrc;
bool opacityCurveWLI;
bool wsmoothcie;
bool will;
bool wprim;
@ -1366,6 +1399,7 @@ struct ColorManagementParamsEdited {
bool preser;
bool fbw;
bool trcExp;
bool wavExp;
bool gamut;
bool labgridcieALow;
bool labgridcieBLow;

View File

@ -343,6 +343,7 @@ Wavelet::Wavelet() :
daubcoeffmethod->append(M("TP_WAVELET_DAUB6"));
daubcoeffmethod->append(M("TP_WAVELET_DAUB10"));
daubcoeffmethod->append(M("TP_WAVELET_DAUB14"));
daubcoeffmethod->append(M("TP_WAVELET_DAUB20"));
daubcoeffmethodconn = daubcoeffmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::daubcoeffmethodChanged));
daubcoeffmethod->set_tooltip_text(M("TP_WAVELET_DAUB_TOOLTIP"));
Gtk::Label* const daubcoeffLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DAUB") + ":"));
@ -1609,6 +1610,8 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
daubcoeffmethod->set_active(3);
} else if (pp->wavelet.daubcoeffmethod == "14_") {
daubcoeffmethod->set_active(4);
} else if (pp->wavelet.daubcoeffmethod == "20_") {
daubcoeffmethod->set_active(5);
}
//Dirmethod->set_active (3);
@ -2546,6 +2549,8 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
pp->wavelet.daubcoeffmethod = "10_";
} else if (daubcoeffmethod->get_active_row_number() == 4) {
pp->wavelet.daubcoeffmethod = "14_";
} else if (daubcoeffmethod->get_active_row_number() == 5) {
pp->wavelet.daubcoeffmethod = "20_";
}
if (Dirmethod->get_active_row_number() == 0) {