diff --git a/rtdata/languages/default b/rtdata/languages/default index d47179bd97..b20bd36da1 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -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,14 +3038,16 @@ 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;CAM 16 +TP_LOCALLAB_CAMMODE_CAM16;CAM16 TP_LOCALLAB_CAMMODE_JZ;Jz Cz Hz TP_LOCALLAB_CATAD;Chromatic adaptation/Cat16 TP_LOCALLAB_CBDL;Contrast by Detail Levels @@ -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 Ciecam’s 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 CIECAM’s 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\nAverage: Average light conditions (standard). The image will not change.\n\nDim: Dim conditions. The image will become slightly brighter.\n\nDark: 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 & 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 diff --git a/rtengine/cplx_wavelet_dec.h b/rtengine/cplx_wavelet_dec.h index 592bd2f37a..f3146d4f76 100644 --- a/rtengine/cplx_wavelet_dec.h +++ b/rtengine/cplx_wavelet_dec.h @@ -16,6 +16,8 @@ * * 2010 Ilya Popov * 2012 Emil Martinec + * 2024 Jacques Desmis + */ #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++) { diff --git a/rtengine/cplx_wavelet_filter_coeffs.h b/rtengine/cplx_wavelet_filter_coeffs.h index 3386be8d0a..3d3727f316 100644 --- a/rtengine/cplx_wavelet_filter_coeffs.h +++ b/rtengine/cplx_wavelet_filter_coeffs.h @@ -15,7 +15,7 @@ * along with RawTherapee. If not, see . * * 2012 Emil Martinec - * 2014 Jacques Desmis + * 2014 - 2024 Jacques Desmis */ #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 !! } diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index ca94cbeb09..5e92ab8cf4 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -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 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); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index f564c405a0..106dbba902 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -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 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); diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index 79e565bbcb..52ad8e6f6a 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -160,6 +160,7 @@ class ImProcCoordinator final : public StagedImageProcessor, public HistogramObs WavOpacityCurveBY waOpacityCurveBY; WavOpacityCurveW waOpacityCurveW; WavOpacityCurveWL waOpacityCurveWL; + WavOpacityCurveWL icmOpacityCurveWL; RetinextransmissionCurve dehatransmissionCurve; RetinexgaintransmissionCurve dehagaintransmissionCurve; diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index af527edcd1..a8b1280507 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -1228,8 +1228,10 @@ 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 (Jpro > 99.9f) { - Jpro = 99.9f; + if(settings->autocielab) {//avoid artifacts + if (Jpro > 99.9f) { + Jpro = 99.9f; + } } Jpro = CAMBrightCurveJ[(float)(Jpro * 327.68f)]; //lightness CIECAM02 + contrast diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 6200f177dc..801f74f0dd 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -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 buildMeaLut(const float inVals[11], const float mea[10], float& lutFactor); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index e0ffaa6fe7..640e9e04d0 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -640,6 +640,7 @@ struct local_params { int showmasklogmet; int showmask_met; int showmaskciemet; + bool processwa; bool fftbl; float laplacexp; float balanexp; @@ -834,6 +835,7 @@ struct local_params { float sigmabl; float sigmaed; float sigmalc; + float offslc; float sigmalc2; float residsha; float residshathr; @@ -957,6 +959,9 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.smoothciem = 3; } else if (locallab.spots.at(sp).smoothciemet == "level") { lp.smoothciem = 4; + //if need I will add an other smoothciemet with variable + } else if (locallab.spots.at(sp).smoothciemet == "sigm") { + lp.smoothciem = 6; } @@ -990,6 +995,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.showmasklogmet = lllogMask; lp.showmask_met = ll_Mask; lp.showmaskciemet = llcieMask; + lp.processwa = locallab.spots.at(sp).processwav; lp.fftcieMask = locallab.spots.at(sp).fftcieMask; lp.islogcie = locallab.spots.at(sp).logcie && locallab.spots.at(sp).expprecam; lp.issmoothcie = locallab.spots.at(sp).smoothcie; @@ -1203,6 +1209,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.daubLen = 12; } else if (locallab.spots.at(sp).wavMethod == "D14") { lp.daubLen = 16; + } else if (locallab.spots.at(sp).wavMethod == "D20") { + lp.daubLen = 22; } @@ -1876,6 +1884,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.sigmabl = locallab.spots.at(sp).sigmabl; lp.sigmaed = locallab.spots.at(sp).sigmaed; lp.sigmalc = locallab.spots.at(sp).sigmalc; + lp.offslc = locallab.spots.at(sp).offslc; lp.sigmalc2 = locallab.spots.at(sp).sigmalc2; lp.residsha = locallab.spots.at(sp).residsha; lp.residshathr = locallab.spots.at(sp).residshathr; @@ -1992,6 +2001,189 @@ static void calcTransition(const float lox, const float loy, const float ach, co } } } +//sigmoid +/* C -* + * + * Simplified porting of darktable's sigmoid module to Rawtherapee + * Copyright of the original code follows + * Thanks to Alberto Griggio for the Sigmoid Tone Mapper CTL + */ +/* + This file is part of darktable, + Copyright (C) 2020-2023 darktable developers. + + darktable is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + darktable is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with darktable. If not, see . +*/ + +//const float middle_grey = 0.01f * params->locallab.spots.at(sp).sourceGraycie; //0.1845f; + +const float display_black_target = 0.0152f; + +const float display_white_target = 100.f; + +float max(float a, float b) +{ + if (a > b) { + return a; + } else { + return b; + } +} + +float generalized_loglogistic_sigmoid(float value, + float magnitude, + float paper_exp, + float film_fog, + float film_power, + float paper_power) +{ + const float clamped_value = max(value, 0.0); + // The following equation can be derived as a model for film + paper but it has a pole at 0 + // magnitude * powf(1.0f + paper_exp * powf(film_fog + value, -film_power), -paper_power); + // Rewritten on a stable around zero form: + const float film_response = pow(film_fog + clamped_value, film_power); + const float paper_response = magnitude * pow(film_response / (paper_exp + film_response), paper_power); + + // Safety check for very large floats that cause numerical errors + if (xisnanf(paper_response)) { + return magnitude; + } else { + return paper_response; + } +} + +void calculate_params(float middle_grey_contrast, + float contrast_skewness, + float display_black_target, + // float display_white_target, + float &film_power, + float &white_target, + float &black_target, + float &film_fog, + float &paper_exposure, + float &paper_power, + float middle_grey + // float display_white_target = 1.f +) +{ + /* Calculate actual skew log logistic parameters to fulfill the following: + * f(scene_zero) = display_black_target + * f(scene_grey) = middle_grey + * f(scene_inf) = display_white_target + * Slope at scene_grey independent of skewness i.e. only changed by the contrast parameter. + */ + + // Calculate a reference slope for no skew and a normalized display + const float ref_film_power = middle_grey_contrast; + const float ref_paper_power = 1.0f; + const float ref_magnitude = 1.0f; + const float ref_film_fog = 0.0f; + const float ref_paper_exposure = pow_F(ref_film_fog + middle_grey, ref_film_power) * ((ref_magnitude / middle_grey) - 1.0f); + const float delta = 1e-6; + const float ref_slope = (generalized_loglogistic_sigmoid(middle_grey + delta, ref_magnitude, ref_paper_exposure, ref_film_fog, + ref_film_power, ref_paper_power) + - generalized_loglogistic_sigmoid(middle_grey - delta, ref_magnitude, ref_paper_exposure, ref_film_fog, + ref_film_power, ref_paper_power)) / 2.0f / delta; + + // Add skew + paper_power = pow(5.0, -contrast_skewness); + + // Slope at low film power + const float temp_film_power = 1.0f; + const float temp_white_target = 0.01f * white_target; //display_white_target; + const float temp_white_grey_relation = pow_F(temp_white_target / middle_grey, 1.0f / paper_power) - 1.0f; + const float temp_paper_exposure = pow_F(middle_grey, temp_film_power) * temp_white_grey_relation; + const float temp_slope = (generalized_loglogistic_sigmoid(middle_grey + delta, temp_white_target, temp_paper_exposure, + ref_film_fog, temp_film_power, paper_power) + - generalized_loglogistic_sigmoid(middle_grey - delta, temp_white_target, temp_paper_exposure, + ref_film_fog, temp_film_power, paper_power)) / 2.0f / delta; + + // Figure out what film power fulfills the target slope + // (linear when assuming display_black = 0.0) + film_power = ref_slope / temp_slope; + + // Calculate the other parameters now that both film and paper power is known + white_target = 0.01f * white_target; //display_white_target; + black_target = 0.01f * display_black_target; + const float white_grey_relation = pow_F(white_target / middle_grey, 1.0f / paper_power) - 1.0f; + const float white_black_relation = pow_F(black_target / white_target, -1.0f / paper_power) - 1.0f; + + film_fog = middle_grey * pow(white_grey_relation, 1.0f / film_power) / (pow_F(white_black_relation, 1.0f / film_power) - pow_F(white_grey_relation, 1.0f / film_power)); + paper_exposure = pow_F(film_fog + middle_grey, film_power) * white_grey_relation; +} + + +void ImProcFunctions::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) +{ + float film_power = 1.f; + float white_target = white_point_disp; + float black_target = 1.f; + float film_fog = 1.f; + float paper_exposure = 1.f; + float paper_power = 1.f; + float display_black_target = black_point; //0.0152f; + +// + // compute the sigmoid parameters from the UI controls + calculate_params(middle_grey_contrast, contrast_skewness, + display_black_target, film_power, + white_target, black_target, film_fog, + paper_exposure, paper_power, middle_grey); + float rgb[3] = {r, g, b}; + for (int i = 0; i < 3; i = i+1) { + rgb[i] = max(rgb[i], 0); + } + for (int i = 0; i < 3; i = i+1) { + rgb[i] = generalized_loglogistic_sigmoid(rgb[i], white_target, + paper_exposure, film_fog, + film_power, paper_power); + } + rout = rgb[0]; + gout = rgb[1]; + bout = rgb[2]; +} + + +//sigmoid Q (cam16) and J (Jz) +void ImProcFunctions::sigmoid_QJ(float Q, float &Qout, float middle_grey_contrast, float contrast_skewness, float middle_grey, float black_point, float white_point_disp) +{ + float film_power = 1.f; + float white_target = white_point_disp; + float black_target = 1.f; + float film_fog = 1.f; + float paper_exposure = 1.f; + float paper_power = 1.f; + float display_black_target = black_point; + + // compute the sigmoid parameters from the UI controls + calculate_params(middle_grey_contrast, contrast_skewness, display_black_target, film_power, white_target, black_target, film_fog, paper_exposure, paper_power, middle_grey); + float value = Q; + value = max(Q, 0.f); + value = generalized_loglogistic_sigmoid(value, white_target, paper_exposure, film_fog, film_power, paper_power); + Qout = value; +} // Copyright 2018 Alberto Griggio @@ -2622,32 +2814,58 @@ SOFTWARE. // I also took some code from Alberto Grigio */ //Copyright (c) 2023 Thatcher Freeman -// Adapted to Rawtherapee Jacques Desmis mars 2024 jdesmis@gmail.com +// Adapted to Rawtherapee Jacques Desmis mars / june 2024 jdesmis@gmail.com -float rolloff_function(float x, float dr, float b, float c, float kmid) +float ImProcFunctions::rolloff_freeman_function(float x, float dr, float b, float c, float kmid) { return (dr * (x / (x + b)) + c) * kmid;//Simple sigmoid (rather a polynomial asymptotic power function) ponderate with kmid - take into account if need Mean Yb scene and Mean Yb viewing and slope value } //Copyright (c) 2023 Thatcher Freeman // Adapted to Rawtherapee Jacques Desmis mars 2024 jdesmis@gmail.com -float scene_contrast(float x, float mid_gray_scene, float gamma) +float ImProcFunctions::scene_referred_contrast(float x, float mid_gray_scene, float gamma) { return mid_gray_scene * std::pow(x / mid_gray_scene, gamma);//apply gamma } //Copyright (c) 2023 Thatcher Freeman // Adapted to Rawtherapee Jacques Desmis mars 2024 jdesmis@gmail.com -float do_get(float x, bool rolloff_, float mid_gray_scene, float gamma, float dr, float b, float c, float kmid) +float ImProcFunctions::get_freeman_parameters(float x, bool rolloff_, float mid_gray_scene, float gamma, float slopelim, float dr, float b, float c, float kmid) { - if (rolloff_ && x <= mid_gray_scene) {//general smooth - till Yb scene + if (rolloff_ && x <= mid_gray_scene / slopelim) {//general smooth - till Yb scene return x; } else { - return rolloff_function(scene_contrast(x, mid_gray_scene, gamma), dr, b, c, kmid);//simulate polynomial power function with a slope to begin + return rolloff_freeman_function(scene_referred_contrast(x, mid_gray_scene / slopelim, gamma), dr, b, c, kmid);//simulate polynomial power function with a slope to begin } } //Copyright (c) 2023 Thatcher Freeman -// Adapted to Rawtherapee Jacques Desmis 25 mars 2024 -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, LUTf& lut, LUTf& lutr, LUTf& lutg, LUTf& lutb, int mode, bool scale, bool takeyb) +// Adapted to Rawtherapee Jacques Desmis - August 2024 + +void ImProcFunctions::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 dr;//Dynamic Range + float b; + float c;//black point + float gamma; + float mid_gray_scene_;//Mean luminance - Scene conditions + c = black_point; + dr = white_point - c; + float kmid = 1.f; + + if(takeyb){ + kmid = mid_gray_scene / mid_gray_view; + kmid = cbrt(kmid); + } + mid_gray_scene_ = mid_gray_scene; + + b = (dr / (mid_gray_scene_ - c)) * (1.f - ((mid_gray_scene_ - c) / dr)) * mid_gray_scene_;//b - ponderate mid_gray_scene taking into account the total DR, and the dark part below the mid_gray_scene + gamma = target_slope * (float) std::pow((mid_gray_scene_ + b), 2.0) / (dr * b);//Calculate gamma with slope and mid_gray_scene + Qout = get_freeman_parameters(Q, rolloff, mid_gray_scene_, gamma, 1.f, dr, b, c, kmid);//call main function +} + + + +// Adapted to Rawtherapee Jacques Desmis 25 mars - 5 june 2024 +void ImProcFunctions::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) { float dr;//Dynamic Range float b; @@ -2656,8 +2874,7 @@ void tonemapFreeman(float target_slope, float target_sloper, float target_slopeg float gammar; float gammag; float gammab; - float mid_gray_scene_;//Mean luminance - Scene conditions - // mid_gray_view //Mean luminance - Viewing conditions + float mid_gray_scene_;//Mean luminance - Scene conditions // mid_gray_view //Mean luminance - Viewing conditions c = black_point; dr = white_point - c; @@ -2697,15 +2914,25 @@ void tonemapFreeman(float target_slope, float target_sloper, float target_slopeg } //lut - take from Alberto Griggio if(mode == 4) { + float sloplimr = 1.f; + float sloplimg = 1.f; + float sloplimb = 1.f; + if(limslope) { + rolloff = true; + + sloplimr *= smooththreshold; + sloplimg *= smooththreshold; + sloplimb *= smooththreshold; + } for (int i = 0; i < 65536; ++i) {// i - value image RGB - lutr[i] = do_get(float(i) / 65535.f, rolloff, mid_gray_scene_, gammar, dr, b, c, kmid);//call main function - lutg[i] = do_get(float(i) / 65535.f, rolloff, mid_gray_scene_, gammag, dr, b, c, kmid);//call main function - lutb[i] = do_get(float(i) / 65535.f, rolloff, mid_gray_scene_, gammab, dr, b, c, kmid);//call main function + lutr[i] = get_freeman_parameters(float(i) / 65535.f, rolloff, mid_gray_scene_, gammar, sloplimr, dr, b, c, kmid);//call main function + lutg[i] = get_freeman_parameters(float(i) / 65535.f, rolloff, mid_gray_scene_, gammag, sloplimg, dr, b, c, kmid);//call main function + lutb[i] = get_freeman_parameters(float(i) / 65535.f, rolloff, mid_gray_scene_, gammab, sloplimb, dr, b, c, kmid);//call main function } } else { kmid = 1.f; for (int i = 0; i < 65536; ++i) {// i - value image RGB - lut[i] = do_get(float(i) / 65535.f, rolloff, mid_gray_scene_, gamma, dr, b, c, kmid);//call main function + lut[i] = get_freeman_parameters(float(i) / 65535.f, rolloff, mid_gray_scene_, gamma, 1.f, dr, b, c, kmid);//call main function } } } @@ -2837,6 +3064,14 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag bool ciec = false; bool iscie = false; + + int modeqj = 1; + if (params->locallab.spots.at(sp).modeQJ == "511") { + modeqj = 0; + } else if (params->locallab.spots.at(sp).modeQJ == "512") { + modeqj = 1; + } + if (params->locallab.spots.at(sp).ciecam && params->locallab.spots.at(sp).explog && call == 1) { ciec = true; iscie = false; @@ -2847,18 +3082,33 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag bool z_cam = false; //params->locallab.spots.at(sp).jabcie; //alaways use normal algorithm, Zcam giev often bad results bool jabcie = false;//always disabled + bool issigjz12 = params->locallab.spots.at(sp).sigjz12; + bool issigq12 = params->locallab.spots.at(sp).sigq12; + bool islogjz = params->locallab.spots.at(sp).forcebw; bool issigjz = params->locallab.spots.at(sp).sigjz; bool issigq = params->locallab.spots.at(sp).sigq; - // bool islogq = params->locallab.spots.at(sp).logcie; - // bool istrc = params->locallab.spots.at(sp).trccie; + bool issig = true; //params->locallab.spots.at(sp).sigcie; //sigmoid J Q variables + // const float sigmoidlambda = params->locallab.spots.at(sp).sigmoidldacie12; + // const float sigmoidth = params->locallab.spots.at(sp).sigmoidthcie; + // const float sigmoidbl = params->locallab.spots.at(sp).sigmoidblcie12; + const bool sigmoidnorm = params->locallab.spots.at(sp).normcie; + const float sigmoidlambda = params->locallab.spots.at(sp).sigmoidldacie; const float sigmoidth = params->locallab.spots.at(sp).sigmoidthcie; const float sigmoidbl = params->locallab.spots.at(sp).sigmoidblcie; - const bool sigmoidnorm = params->locallab.spots.at(sp).normcie; + + + int mobwev12 = 0; + if (params->locallab.spots.at(sp).bwevMethod12 == "sigQ") { + mobwev12 = 0; + } else if (params->locallab.spots.at(sp).bwevMethod12 == "slop") { + mobwev12 = 1; + } + int mobwev = 0; float sumcamq01 = 0.5f; @@ -2870,7 +3120,20 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag mobwev = 2; } - float senssig = (float) params->locallab.spots.at(sp).sigmoidsenscie; + float senssig =(float) params->locallab.spots.at(sp).sigmoidsenscie; + + float middle_grey_contrast = params->locallab.spots.at(sp).sigmoidldacie12; + float contrast_skewness = params->locallab.spots.at(sp).sigmoidthcie12; + float white_point_disp = params->locallab.spots.at(sp).sigmoidblcie12; + float middle_grey = 0.01 * params->locallab.spots.at(sp).sourceGraycie; + middle_grey *= 2.f;//take into account Ciecam + middle_grey = std::min(middle_grey, 0.6f); + + float black_point = xexpf(lp.blackevjz * std::log(2.f) + xlogf(middle_grey)); + float white_pointsig = xexpf(lp.whiteevjz * std::log(2.f) + xlogf(middle_grey));//to adapt if need and remove slider whitsig + + float slopsmootq =(float) params->locallab.spots.at(sp).slopesmoq; + float mid_gray_view = 0.01f * lp.targetgraycie; TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(params->icm.workingProfile); const double wip[3][3] = {//improve precision with double {wiprof[0][0], wiprof[0][1], wiprof[0][2]}, @@ -2919,6 +3182,7 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag bl = 0.01f * (float) params->locallab.spots.at(sp).strcielog; bl = std::min(bl, 1.f); } + //end sigmoid int width = lab->W, height = lab->H; @@ -3396,6 +3660,20 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag const double noise = pow(2., -16.6);//16.6 instead of 16 a little less than others, but we work in double const double log2 = xlog(2.); const float log2f = xlogf(2.f); + + float middle_grey_contrastjz = params->locallab.spots.at(sp).sigmoidldajzcie12; + float contrast_skewnessjz = params->locallab.spots.at(sp).sigmoidthjzcie12; + float white_point_dispjz = params->locallab.spots.at(sp).sigmoidbljzcie12; + float middle_greyjz = 0.01 * params->locallab.spots.at(sp).sourceGraycie; + middle_greyjz *= 2.f; + middle_greyjz = std::min(middle_greyjz, 0.6f); + + float black_pointjz = xexpf(lp.blackevjz * std::log(2.f) + xlogf(middle_greyjz)); + float white_pointsigjz = xexpf(lp.whiteevjz * std::log(2.f) + xlogf(middle_greyjz));//to adapt if need and remove slider whitsig + float drjz = white_pointsigjz - black_pointjz; + if(params->locallab.spots.at(sp).sigybjz12) { + middle_greyjz = middle_greyjz * drjz + black_pointjz; + } if ((mocam == 2) && call == 0) { //Jz az bz ==> Jz Cz Hz before Ciecam16 double mini = 1000.; @@ -3515,7 +3793,6 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag if (settings->verbose) { printf("La=%4.1f PU_adap=%2.1f maxi=%f mini=%f mean=%f, avgm=%f to_screen=%f Max_real=%f to_one=%f\n", (double) la, adapjz, maxi, mini, sum, avgm, to_screen, maxreal, to_one); } - const float sigmoidlambdajz = params->locallab.spots.at(sp).sigmoidldajzcie; const float sigmoidthjz = params->locallab.spots.at(sp).sigmoidthjzcie; const float sigmoidbljz = params->locallab.spots.at(sp).sigmoidbljzcie; @@ -3530,6 +3807,8 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag const float sigmjz = 3.3f + 7.1f * (1.f - powsig); // e^10.4 = 32860 const float bljz = sigmoidbljz; + + double contreal = 0.2 * params->locallab.spots.at(sp).contjzcie; DiagonalCurve jz_contrast({ DCT_NURBS, @@ -3683,11 +3962,12 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag #endif // adap maximum level wavelet to size of RT-spot int wavelet_level = 1 + params->locallab.spots.at(sp).csthresholdjz.getBottomRight();//retrieve with +1 maximum wavelet_level + wavelet_level = rtengine::max(5, wavelet_level); int minwin = rtengine::min(width, height); - int maxlevelspot = 10;//maximum possible + int maxlevelspot = 9;//maximum possible // adapt maximum level wavelet to size of crop - while ((1 << maxlevelspot) >= (minwin * sk) && maxlevelspot > 1) { + while ((1 << maxlevelspot) >= (minwin) && maxlevelspot > 1) { --maxlevelspot ; } @@ -3697,7 +3977,7 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag //simple local contrast in function luminance if (locwavCurvejz && locwavutilijz && wavcurvejz) { - float strengthjz = 1.2; + float strengthjz = 1.2f; std::unique_ptr wdspot(new wavelet_decomposition(temp->L[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen));//lp.daubLen if (wdspot->memory_allocation_failed()) { @@ -3705,7 +3985,7 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag } maxlvl = wdspot->maxlevel(); - wavlc(*wdspot, level_bljz, level_hljz, maxlvl, level_hrjz, level_brjz, ahighjz, bhighjz, alowjz, blowjz, sigmalcjz, strengthjz, locwavCurvejz, numThreads); + wavlc(*wdspot, level_bljz, level_hljz, maxlvl, level_hrjz, level_brjz, ahighjz, bhighjz, alowjz, blowjz, sigmalcjz, 1.f, strengthjz, locwavCurvejz, numThreads); wdspot->reconstruct(temp->L[0], 1.f); } @@ -3925,8 +4205,18 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag } } - //sigmoid - if (issigjz && iscie) { //sigmoid Jz + //sigmoid 5.12 + if (issigjz12 && iscie && modeqj == 1) { //sigmoid Jz + float val = Jz; + float Jout = 0.f; + sigmoid_QJ(val, Jout, middle_grey_contrastjz, contrast_skewnessjz, middle_greyjz, black_pointjz, white_point_dispjz); + + Jz = Jout; + Jz = LIM01(Jz); + } + + //sigmoid 5.11 + if (issigjz && iscie && modeqj == 0) { //sigmoid Jz float val = Jz; if (islogjz) { @@ -4202,6 +4492,8 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag comprfactor = 0.4f * comprfactor * (float) dratt;//adapt comprfactor to Dynamic Range float newgray = 0.18f; + + // bool logqprov = false; if ((params->locallab.spots.at(sp).logcie && params->locallab.spots.at(sp).logcieq) || mobwev != 0) {//increase Dyn Range when log encoding dynamic_range += 0.2;//empirical value gray = 0.01f * (float) params->locallab.spots.at(sp).sourceGraycie; @@ -4251,7 +4543,7 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag float *data = nullptr; float *datanorm = nullptr; - if ((sigmoidnorm && issigq) || params->locallab.spots.at(sp).logcieq) { + if (((sigmoidnorm && issigq) || params->locallab.spots.at(sp).logcieq) && modeqj == 0) {//5.11 datain = new float[width* height]; data = new float[width * height]; datanorm = new float[width * height]; @@ -4378,7 +4670,9 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag if (ciec && mocam == 1) {//only Cam16 bool jp = false; - if (params->locallab.spots.at(sp).logcie && params->locallab.spots.at(sp).logcieq && iscie) {//log encoding Q + // if (params->locallab.spots.at(sp).logcie && iscie) {//log encoding Q + if (params->locallab.spots.at(sp).logcie && params->locallab.spots.at(sp).logcieq && iscie && modeqj == 0) {//log encoding Q 5.11 + float val = Qpro * coefq; if (val > (float) noise) { @@ -4387,9 +4681,26 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag Qpro *= f; } } - // if (issig && issigq && iscie && !islogq && mobwev != 2) { //sigmoid Q only and black Ev & white Ev - if (issig && issigq && iscie && mobwev != 2) { //sigmoid Q only and black Ev & white Ev + if (issig && issigq12 && iscie && modeqj == 1) { //sigmoid Q and slope based Q 5.12 float val = Qpro * coefq; + float Qout = 0.f; + if(mobwev12 == 0) { + sigmoid_QJ(val, Qout, middle_grey_contrast, contrast_skewness, middle_grey, black_point, white_point_disp); + } + if(mobwev12 == 1) { + bool rolloff = false;//all range + bool kmid = false;//not take into account Yb viewing + tonemapFreemanQ(val, Qout, slopsmootq , white_pointsig, black_point, middle_grey, mid_gray_view, rolloff, kmid); + } + + Qpro = std::max(Qout / coefq, 0.f); + Jpro = SQR((10.f * Qpro) / wh); + + } + + if (issig && issigq && iscie && mobwev != 2 && modeqj == 0) { //sigmoid Q only and black Ev & white Ev 5.11 + + float val = Qpro * coefq; if (mobwev == 1) { val = std::max((xlog(val) / log2 - shadows_range) / (dynamic_range + 1.5), noise);//in range EV @@ -4437,11 +4748,6 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag Jpro = SQR((10.f * Qpro) / wh); Qpro = (Qpro == 0.f ? epsil : Qpro); // avoid division by zero spro = 100.0f * sqrtf(Mpro / Qpro); - - if (Jpro > 99.9f) { - Jpro = 99.9f; - } - Jpro = CAMBrightCurveJ[(float)(Jpro * 327.68f)]; //lightness CIECAM02 + contrast float Sp = spro / 100.0f; Ciecam02::curvecolorfloat(schr, Sp, sres, 1.5f); @@ -4587,8 +4893,7 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag #endif } } - - if ((mocam == 1 && (sigmoidnorm && issigq)) || params->locallab.spots.at(sp).logcieq) { //Normalize luminance + if (((mocam == 1 && (sigmoidnorm && issigq)) || params->locallab.spots.at(sp).logcieq) && modeqj == 0) { //Normalize luminance 5.11 #ifdef _OPENMP #pragma omp parallel for schedule(dynamic, 16) @@ -4630,6 +4935,9 @@ void ImProcFunctions::ciecamloc_02float(struct local_params& lp, int sp, LabImag delete [] datain; delete [] data; delete [] datanorm; + + + } @@ -5108,8 +5416,8 @@ void ImProcFunctions::DeNoise_Local(int call, const struct local_params& lp, Lab transformed->L[y][x] = CLIP(original->L[y][x] + difL); transformed->a[y][x] = clipC((original->a[y][x] + difa) * factnoise); transformed->b[y][x] = clipC((original->b[y][x] + difb) * factnoise) ; - - if (blshow) { + + if (blshow && lp.fullim != 3) { transformed->L[y][x] = CLIP(12000.f + amplabL * difL);// * 10.f empirical to can visualize modifications transformed->a[y][x] = clipC(amplabL * difa);// * 10.f empirical to can visualize modifications transformed->b[y][x] = clipC(amplabL * difb);// * 10.f empirical to can visualize modifications @@ -5268,7 +5576,7 @@ void ImProcFunctions::DeNoise_Local2(const struct local_params& lp, LabImage* or transformed->a[y][x] = clipC((original->a[y][x] + difa) * factnoise); transformed->b[y][x] = clipC((original->b[y][x] + difb) * factnoise) ; - if (blshow) { + if (blshow && lp.fullim != 3) { transformed->L[y][x] = CLIP(12000.f + amplabL * difL);// * 10.f empirical to can visualize modifications transformed->a[y][x] = clipC(amplabL * difa);// * 10.f empirical to can visualize modifications transformed->b[y][x] = clipC(amplabL * difb);// * 10.f empirical to can visualize modifications @@ -5517,7 +5825,7 @@ void ImProcFunctions::InverseBlurNoise_Local(LabImage * originalmask, const stru transformed->a[y][x] = clipC(original->a[y][x] + difa) ; transformed->b[y][x] = clipC(original->b[y][x] + difb); - if (blshow) { + if (blshow && lp.fullim != 3) { transformed->L[y][x] = CLIP(12000.f + diflc); transformed->a[y][x] = clipC(difa); transformed->b[y][x] = clipC(difb); @@ -5539,7 +5847,7 @@ void ImProcFunctions::InverseBlurNoise_Local(LabImage * originalmask, const stru transformed->a[y][x] = clipC(original->a[y][x] + difa) ; transformed->b[y][x] = clipC(original->b[y][x] + difb); - if (blshow) { + if (blshow && lp.fullim != 3) { transformed->L[y][x] = CLIP(12000.f + diflc); transformed->a[y][x] = clipC(difa); transformed->b[y][x] = clipC(difb); @@ -6004,6 +6312,9 @@ void ImProcFunctions::deltaEforMask(float **rdE, int bfw, int bfh, LabImage* buf static void showmask(int lumask, const local_params& lp, int xstart, int ystart, int cx, int cy, int bfw, int bfh, LabImage* bufexporig, LabImage* transformed, LabImage* bufmaskorigSH, int inv) { + if(lp.fullim == 3) { + return; + } float lum = fabs(lumask * 400.f); float colo = 0.f; @@ -6489,6 +6800,9 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int { + if(lp.fullim == 3) { + return; + } array2D ble(bfw, bfh); array2D blechro(bfw, bfh); array2D hue(bfw, bfh); @@ -6642,7 +6956,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int int minwin1 = rtengine::min(bfw, bfh); int maxlevelspot1 = 9; - while ((1 << maxlevelspot1) >= (minwin1 * sk) && maxlevelspot1 > 1) { + while ((1 << maxlevelspot1) >= (minwin1) && maxlevelspot1 > 1) { --maxlevelspot1 ; } @@ -6968,7 +7282,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int int minwin = rtengine::min(bfw, bfh); int maxlevelspot = 9; - while ((1 << maxlevelspot) >= (minwin * sk) && maxlevelspot > 1) { + while ((1 << maxlevelspot) >= (minwin) && maxlevelspot > 1) { --maxlevelspot ; } @@ -7306,7 +7620,7 @@ void ImProcFunctions::InverseSharp_Local(float **loctemp, const float hueref, co const float difL = loctemp[y][x] - original->L[y][x]; transformed->L[y][x] = CLIP(original->L[y][x] + difL * reducdE); - if (sharshow) { + if (sharshow && lp.fullim != 3) { transformed->a[y][x] = 0.f; transformed->b[y][x] = ampli * 5.f * difL * reducdE; } else if (previewshar) { @@ -7466,7 +7780,7 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const transformed->L[y][x] = CLIP(original->L[y][x] + difL * reducdE); - if (sharshow) { + if (sharshow && lp.fullim != 3) { transformed->a[y][x] = 0.f; transformed->b[y][x] = ampli * 5.f * difL * reducdE; } else if (previewshar || lp.prevdE) { @@ -7799,7 +8113,7 @@ void ImProcFunctions::transit_shapedetect_retinex(int call, int senstype, LabIma } } ; - if (retishow) { + if (retishow && lp.fullim != 3) { transformed->L[y][x] = CLIP(12000.f + diflc); } } @@ -7837,7 +8151,7 @@ void ImProcFunctions::transit_shapedetect_retinex(int call, int senstype, LabIma } } - if (retishow) { + if (retishow && lp.fullim != 3) { transformed->a[y][x] = clipC(difa); transformed->b[y][x] = clipC(difb); } @@ -8108,7 +8422,7 @@ void ImProcFunctions::transit_shapedetect(int senstype, const LabImage * bufexpo transformed->b[y][x] = clipC(original->b[y][x] + difb); - if (cbshow || tmshow) { + if ((cbshow || tmshow) && lp.fullim != 3) { transformed->L[y][x] = CLIP(12000.f + difL); transformed->a[y][x] = clipC(difa); transformed->b[y][x] = clipC(difb); @@ -8926,13 +9240,13 @@ void ImProcFunctions::BlurNoise_Local(LabImage *tmp1, LabImage * originalmask, c const float maxdifab = rtengine::max(std::fabs(difa), std::fabs(difb)); - if (blshow && lp.colorde < 0) { //show modifications with use "b" + if ((blshow && lp.colorde < 0) && lp.fullim != 3 ) { //show modifications with use "b" // (origshow && lp.colorde < 0) { //original Retinex transformed->a[y][x] = 0.f; transformed->b[y][x] = ampli * 8.f * difL * reducdE; transformed->L[y][x] = CLIP(12000.f + 0.5f * ampli * difL); - } else if (blshow && lp.colorde > 0) {//show modifications without use "b" + } else if ((blshow && lp.colorde > 0) && lp.fullim != 3) {//show modifications without use "b" if (difL < 1000.f) {//if too low to be view use ab difL += 0.5f * maxdifab; } @@ -9033,11 +9347,12 @@ void ImProcFunctions::transit_shapedetect2(int sp, float meantm, float stdtm, in const bool colshow = ((lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) && senstype == 0); const bool SHshow = ((lp.showmaskSHmet == 1 || lp.showmaskSHmet == 2) && senstype == 9); const bool tmshow = ((lp.showmasktmmet == 1 || lp.showmasktmmet == 2) && senstype == 8); - const bool lcshow = ((lp.showmasklcmet == 1 || lp.showmasklcmet == 2) && senstype == 10); + const bool lcshow = ((lp.showmasklcmet == 1 || lp.showmasklcmet == 2 || lp.processwa) && senstype == 10); + const bool lcshow2 = ((lp.showmasklcmet == 1 || lp.processwa) && senstype == 10); const bool origshow = ((lp.showmasksoftmet == 5) && senstype == 3 && lp.softmet == 1); const bool logshow = ((lp.showmasklogmet == 1 || lp.showmasklogmet == 2) && senstype == 11); const bool cieshow = ((lp.showmaskciemet == 1 || lp.showmaskciemet == 2) && senstype == 31); - + const bool masshow = ((lp.showmask_met == 1) && senstype == 20); const bool previewvib = ((lp.showmaskvibmet == 4) && senstype == 2 && lp.fullim != 3); @@ -9353,13 +9668,13 @@ void ImProcFunctions::transit_shapedetect2(int sp, float meantm, float stdtm, in const float difb = factorx * realstrbdE; float maxdifab = rtengine::max(std::fabs(difa), std::fabs(difb)); - if ((expshow || vibshow || colshow || SHshow || tmshow || lcshow || logshow || cieshow || origshow || masshow) && lp.colorde < 0) { //show modifications with use "b" + if (((expshow || vibshow || colshow || SHshow || tmshow || lcshow || logshow || cieshow || origshow || masshow) && lp.colorde < 0 && (lp.fullim != 3)) || lcshow2 ) { //show modifications with use "b" // (origshow && lp.colorde < 0) { //original Retinex transformed->a[y + ystart][x + xstart] = 0.f; transformed->b[y + ystart][x + xstart] = ampli * 8.f * diflc * reducdE; transformed->L[y + ystart][x + xstart] = CLIP(12000.f + 0.5f * ampli * diflc); - } else if ((expshow || vibshow || colshow || SHshow || tmshow || lcshow || logshow || cieshow || origshow || masshow) && lp.colorde > 0) {//show modifications without use "b" + } else if (((expshow || vibshow || colshow || SHshow || tmshow || lcshow || logshow || cieshow || origshow || masshow) && lp.colorde > 0 && (lp.fullim != 3)) || lcshow2) {//show modifications without use "b" if (diflc < 1000.f) {//if too low to be view use ab diflc += 0.5f * maxdifab; } @@ -10085,7 +10400,7 @@ void ImProcFunctions::Compresslevels(float **Source, int W_L, int H_L, float com } } -void ImProcFunctions::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 ImProcFunctions::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) { float mean[10]; float meanN[10]; @@ -10093,6 +10408,12 @@ void ImProcFunctions::wavlc(wavelet_decomposition& wdspot, int level_bl, int lev float sigmaN[10]; float MaxP[10]; float MaxN[10]; + float inva5 = 0.8f; + float inva6 = 0.7f; + float inva7 = 0.5f; + float inva8 = 0.4f; + float inva9 = 0.3f; + float inva10 = 0.1f; Evaluate2(wdspot, mean, meanN, sigma, sigmaN, MaxP, MaxN, numThreads); @@ -10117,46 +10438,69 @@ void ImProcFunctions::wavlc(wavelet_decomposition& wdspot, int level_bl, int lev klev = ahigh * level + bhigh; } } - + if(level_hr < 6) {//low attenuation for low levels + inva5 = 1.f; + inva6 = 0.9f; + inva7 = 0.7f; + inva8 = 0.6f; + inva9 = 0.4f; + inva10 = 0.2f; + } float* const* wav_L = wdspot.level_coeffs(level); - + float offset = offslc; if (MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { constexpr float insigma = 0.666f; //SD const float logmax = log(MaxP[level]); //log Max - const float rapX = (mean[level] + sigmalc * sigma[level]) / MaxP[level]; //rapport between sD / max + const float rapX = (offset * mean[level] + sigmalc * sigma[level]) / MaxP[level]; //rapport between sD / max const float inx = log(insigma); const float iny = log(rapX); const float rap = inx / iny; //koef const float asig = 0.166f / (sigma[level] * sigmalc); - const float bsig = 0.5f - asig * mean[level]; - const float amean = 0.5f / mean[level]; - const float limit1 = mean[level] + sigmalc * sigma[level]; - const float limit2 = mean[level]; + const float bsig = 0.5f - asig * (mean[level] * offset); + const float amean = 0.5f / (mean[level] * offset); + // const float limit1 = mean[level] + sigmalc * sigma[level]; + // const float limit2 = mean[level]; + const float effect = sigmalc; + float mea[10];//simulation using mean and sigma, to evaluate signal + calceffect(level, mean, sigma, mea, effect, offset); + 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 + const float threshold = offset * mean[level] + sigmalc * sigma[level];//base signal calculation. + #ifdef _OPENMP - #pragma omp parallel for schedule(dynamic, 16 * W_L) if (multiThread) -#endif - - for (int i = 0; i < W_L * H_L; i++) { - const float val = std::fabs(wav_L[dir][i]); + // #pragma omp parallel for schedule(dynamic, 16 * W_L) if (multiThread) + #pragma omp parallel for if (multiThread) - float absciss; +#endif - if (val >= limit1) { //for max - const float valcour = xlogf(val); - absciss = xexpf((valcour - logmax) * rap); - } else if (val >= limit2) { - absciss = asig * val + bsig; - } else { - absciss = amean * val; - } + for (int y = 0; y < H_L; y++) { + for (int x = 0; x < W_L; x++) {//for each pixel + float &val = wav_L[dir][y * W_L + x]; + const float WavCL = std::fabs(wav_L[dir][y * W_L + x]); + + + float absciss; + 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; + } + const float kc = klev * (locwavCurve[absciss * 500.f] - 0.5f); + const float reduceeffect = kc <= 0.f ? 1.f : strength; - const float kc = klev * (locwavCurve[absciss * 500.f] - 0.5f); - const float reduceeffect = kc <= 0.f ? 1.f : strength; + float kinterm = 1.f + reduceeffect * kc; + kinterm = kinterm <= 0.f ? 0.01f : kinterm; - float kinterm = 1.f + reduceeffect * kc; - kinterm = kinterm <= 0.f ? 0.01f : kinterm; + // wav_L[dir][i] *= kinterm <= 0.f ? 0.01f : kinterm; + val *= (1.f + (kinterm - 1.f) * (*meaLut)[WavCL * lutFactor]);//change signal (contrast) for each level, direction, with LUT. - wav_L[dir][i] *= kinterm <= 0.f ? 0.01f : kinterm; + } } } } @@ -10965,7 +11309,7 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float if (locwavCurve && locwavutili && wavcurve) {//simple local contrast in function luminance float strengthlc = 1.5f; - wavlc(*wdspot, level_bl, level_hl, maxlvl, level_hr, level_br, ahigh, bhigh, alow, blow, lp.sigmalc, strengthlc, locwavCurve, numThreads); + wavlc(*wdspot, level_bl, level_hl, maxlvl, level_hr, level_br, ahigh, bhigh, alow, blow, lp.sigmalc, lp.offslc, strengthlc, locwavCurve, numThreads); } //reconstruct all for L @@ -11445,11 +11789,11 @@ void ImProcFunctions::DeNoise(int call, int aut, bool noiscfactiv, const struct #endif int minwin = rtengine::min(GW, GH); - int maxlevelspot = 10;//maximum possible + int maxlevelspot = 9;//maximum possible bool isnois = true; // adap maximum level wavelet to size of crop - while ((1 << maxlevelspot) >= (minwin * sk) && maxlevelspot > 1) { + while ((1 << maxlevelspot) >= (minwin) && maxlevelspot > 1) { --maxlevelspot ; } @@ -13886,7 +14230,7 @@ void ImProcFunctions::Lab_Local( 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 ) { @@ -17219,6 +17563,7 @@ void ImProcFunctions::Lab_Local( } } else if (lp.locmet == 1) { //wavelet && sk ==1 int wavelet_level = 1 + params->locallab.spots.at(sp).csthreshold.getBottomRight();//retrieve with +1 maximum wavelet_level + wavelet_level = rtengine::max(5, wavelet_level); float mL = params->locallab.spots.at(sp).clarilres / 100.0; float mC = params->locallab.spots.at(sp).claricres / 100.0; float softr = params->locallab.spots.at(sp).clarisoft; @@ -17232,10 +17577,10 @@ void ImProcFunctions::Lab_Local( #endif // adap maximum level wavelet to size of RT-spot int minwin = rtengine::min(bfw, bfh); - int maxlevelspot = 10;//maximum possible + int maxlevelspot = 9;//maximum possible // adap maximum level wavelet to size of crop - while ((1 << maxlevelspot) >= (minwin * sk) && maxlevelspot > 1) { + while ((1 << maxlevelspot) >= (minwin) && maxlevelspot > 1) { --maxlevelspot ; } @@ -20232,8 +20577,9 @@ void ImProcFunctions::Lab_Local( tmpImage->copyData(tmpImagelog); - if(params->locallab.spots.at(sp).logcie && !params->locallab.spots.at(sp).logcieq) { - log_encode(tmpImagelog, lp, multiThread, bfw, bfh); + if(params->locallab.spots.at(sp).logcie & !params->locallab.spots.at(sp).logcieq ) { + // printf("Call log encode\n"); + log_encode(tmpImagelog, lp, multiThread, bfw, bfh); float strlog = 0.01f * (float) params->locallab.spots.at(sp).strcielog; @@ -20250,26 +20596,178 @@ void ImProcFunctions::Lab_Local( } } } + + bool gambas = false; + float ksr = 1.f; + float ksb = 1.f; + float ksg = 1.f; + //gamtone, slotone + /* comment this code - will probably not used with new PR GHS + if(lp.smoothciem == 5) { + ksr = params->locallab.spots.at(sp).kslopesmor; + float gamr = 2.4f * ksr; + float slr = 12.92f; + if(!params->locallab.spots.at(sp).smoothcietrcrel) { + gamr = 2.4f * ksr; + slr = 12.92f; + if(gamr < 2.f) { + slr = 2.5f * gamr - 2.f; + } else if (gamr < 2.2f) { + slr = 7.5f * gamr - 12.f; + } else if (gamr < 2.4f) { + slr = 42.1f * gamr - 88.12f; + } else if (gamr < 2.6f) { + slr = 25.4f * gamr - 48.04f; + } else if (gamr < 2.88f) { + slr = 7.142857f * gamr - 0.571428f; + } else if (gamr < 3.6f) { + slr = 13.8888f * gamr - 20.f; + } + } + GammaValues g_ar; //gamma parameters + double pwrr = 1.0 / static_cast(gamr); + Color::calcGamma(pwrr, slr, g_ar); // call to calcGamma with selected gamma and slope + + ksg = params->locallab.spots.at(sp).kslopesmog; + float gamg = 2.4f * ksg; + float slg = 12.92f; + if(!params->locallab.spots.at(sp).smoothcietrcrel) { + gamg = 2.4f * ksg; + slg = 12.92f; + if(gamg < 2.f) { + slg = 2.5f * gamg - 2.f; + } else if (gamg < 2.2f) { + slg = 7.5f * gamg - 12.f; + } else if (gamr < 2.4f) { + slg = 42.1f * gamg - 88.12f; + } else if (gamg < 2.6f) { + slg = 25.4f * gamg - 48.04f; + } else if (gamg < 2.88f) { + slg = 7.142857f * gamg - 0.571428f; + } else if (gamg < 3.6f) { + slg = 13.8888f * gamg - 20.f; + } + } + GammaValues g_ag; //gamma parameters + double pwrg = 1.0 / static_cast(gamg); + Color::calcGamma(pwrg, slg, g_ag); // call to calcGamma with selected gamma and slope + + ksb = params->locallab.spots.at(sp).kslopesmob; + float gamb = 2.4f * ksb; + float slb = 12.92f; + if(!params->locallab.spots.at(sp).smoothcietrcrel) { + + gamb = 2.4f * ksb; + slb = 12.92f; + if(gamb < 2.f) { + slb = 2.5f * gamb - 2.f; + } else if (gamb < 2.2f) { + slb = 7.5f * gamb - 12.f; + } else if (gamb < 2.4f) { + slb = 42.1f * gamb - 88.12f; + } else if (gamb < 2.6f) { + slb = 25.4f * gamb - 48.04f; + } else if (gamb < 2.88f) { + slb = 7.142857f * gamb - 0.571428f; + } else if (gamb < 3.6f) { + slb = 13.8888f * gamb - 20.f; + } + } + GammaValues g_ab; //gamma parameters + double pwrb = 1.0 / static_cast(gamb); + Color::calcGamma(pwrb, slb, g_ab); // call to calcGamma with selected gamma and slope + Imagefloat *srcp = nullptr; + srcp = new Imagefloat(bfw, bfh); + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic, 16) if (multiThread) +#endif + + for (int i = 0; i < bfh; ++i) + for (int j = 0; j < bfw; ++j) { + float r = (double) tmpImage->r(i, j); + float g = (double) tmpImage->g(i, j); + float b = (double) tmpImage->b(i, j); + r = (Color::igammatab_srgb[r]) / 65535.f; + g = (Color::igammatab_srgb[g]) / 65535.f; + b = (Color::igammatab_srgb[b]) / 65535.f; + srcp->r(i, j) = r; + srcp->g(i, j) = g; + srcp->b(i, j) = b; + } + +#ifdef _OPENMP + # pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + + for (int y = 0; y < bfh; ++y) { + int x = 0; +#ifdef __SSE2__ + + for (; x < bfw - 3; x += 4) { + STVFU(tmpImage->r(y, x), F2V(65536.f) * gammalog(LVFU(srcp->r(y, x)), F2V(gamr), F2V(slr), F2V(g_ar[3]), F2V(g_ar[4]))); + STVFU(tmpImage->g(y, x), F2V(65536.f) * gammalog(LVFU(srcp->g(y, x)), F2V(gamg), F2V(slg), F2V(g_ag[3]), F2V(g_ag[4]))); + STVFU(tmpImage->b(y, x), F2V(65536.f) * gammalog(LVFU(srcp->b(y, x)), F2V(gamb), F2V(slb), F2V(g_ab[3]), F2V(g_ab[4]))); + } + +#endif + for (; x < bfw; ++x) { + tmpImage->r(y, x) = 65536.f * gammalog(srcp->r(y, x), gamr, slr, g_ar[3], g_ar[4]); + tmpImage->g(y, x) = 65536.f * gammalog(srcp->g(y, x), gamg, slg, g_ag[3], g_ag[4]); + tmpImage->b(y, x) = 65536.f * gammalog(srcp->b(y, x), gamb, slb, g_ab[3], g_ab[4]); + } + } + delete srcp; + + tone_eqsmooth(this, tmpImage, lp, params->icm.workingProfile, sk, multiThread);//reduce Ev > 0 < 12 + if(params->locallab.spots.at(sp).smoothcietrc) {//add more control on highlights with gamma based + gambas = true; + } + + } + + */ + if(lp.smoothciem == 6) {//Sigmoid - from Darktable + float middle_grey_contrast = params->locallab.spots.at(sp).contsig; + float contrast_skewness = params->locallab.spots.at(sp).skewsig; + float white_point_disp = params->locallab.spots.at(sp).whitsig; + float middle_grey = 0.01 * params->locallab.spots.at(sp).sourceGraycie; + float black_point = xexpf(lp.blackevjz * std::log(2.f) + xlogf(middle_grey)); + // float white_pointsig = xexpf(lp.whiteevjz * std::log(2.f) + xlogf(middle_grey));//to adapt if need and remove slider whitsig + // float dr = white_pointsig - black_point; + // bool scale = lp.issmoothcie;//scale Yb mid_gray - WhiteEv and BlavkEv + + // if(scale) {//scale Yb mean luminance scene with white : dr and black + // middle_grey = middle_grey * dr + black_point; + // } + +#ifdef _OPENMP + # pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + + for (int i = 0; i < bfh; ++i) + for (int j = 0; j < bfw; ++j) { + float r = tmpImage->r(i, j) / 65535.f; + float g = tmpImage->g(i, j) / 65535.f; + float b = tmpImage->b(i, j) / 65535.f; + float rout = 0.f; + float gout = 0.f; + float bout = 0.f; + sigmoid_main(r, g, b, rout, gout, bout, middle_grey_contrast, contrast_skewness, /*white_pointsig,*/ middle_grey, black_point, white_point_disp); + tmpImage->r(i, j) = 65535.f * rout; + tmpImage->g(i, j) = 65535.f * gout; + tmpImage->b(i, j) = 65535.f * bout; + + } + } if(lp.smoothciem == 1) { tone_eqsmooth(this, tmpImage, lp, params->icm.workingProfile, sk, multiThread);//reduce Ev > 0 < 12 - } else if(lp.smoothciem == 2 || lp.smoothciem == 3 || lp.smoothciem == 4) {// 2 - only smmoth highlightd - 3 - Tone mapping with slope and mid_grey + } else if(lp.smoothciem == 2 || lp.smoothciem == 3 || lp.smoothciem == 4 || (gambas && lp.smoothciem == 5)) {// 2 - only smmoth highlightd - 3 - Tone mapping with slope and mid_grey //TonemapFreeman - Copyright (c) 2023 Thatcher Freeman float mid_gray = 0.01f * lp.sourcegraycie;//Mean luminance Yb Scene float mid_gray_view = 0.01f * lp.targetgraycie;//Mean luminance Yb Viewing - // if(mode == 3 && target_slope != 1.f ) {//case tone-mapping -/* if(params->locallab.spots.at(sp).{ - float midutil = mid_gray_view / mid_gray_scene;//take into account ratio between Yb source and Yb viewing - float midk = 1.f; - float k_slope = 2.2f; - if(target_slope >= 1.f) { - midk = pow_F(midutil, k_slope * (target_slope - 1.f));//ponderation in function target_slope when "slope user" < 1.f - } - kmid = midk; - - } -*/ lp.whiteevjz = LIM(lp.whiteevjz, 0.1f, 31.5f);//limit whiteEv to avoid crash float white_point = xexpf(lp.whiteevjz * std::log(2.f) + xlogf(mid_gray));//lp.whiteevjz White_Ev lp.blackevjz = LIM(lp.blackevjz, -15.5f, -0.2f);//limit BlackEv to avoid crash @@ -20279,13 +20777,23 @@ void ImProcFunctions::Lab_Local( float slopegrayr = 1.f; float slopegrayg = 1.f; float slopegrayb = 1.f; + //printf("wp=%f bp=%f \n", (double) white_point, (double) black_point); int mode = 1; float slopsmoot = 1.f - ((float) params->locallab.spots.at(sp).slopesmo - 1.f);//modify response so when increase slope the grays are becoming lighter float slopsmootr = 1.f - ((float) params->locallab.spots.at(sp).slopesmor - 1.f); float slopsmootg = 1.f - ((float) params->locallab.spots.at(sp).slopesmog - 1.f); float slopsmootb = 1.f - ((float) params->locallab.spots.at(sp).slopesmob - 1.f); + slopeg = params->locallab.spots.at(sp).slopesmog; + linkrgb = params->locallab.spots.at(sp).smoothcielnk; + if(gambas && lp.smoothciem == 5) { + slopsmootr = 1.f - (ksr - 1.f); + slopsmootg = 1.f - (ksg - 1.f); + slopsmootb = 1.f - (ksb - 1.f); + } + float smooththreshold = params->locallab.spots.at(sp).smoothcieth; bool takeyb = params->locallab.spots.at(sp).smoothcieyb; bool lummod = params->locallab.spots.at(sp).smoothcielum; + bool lumhigh = params->locallab.spots.at(sp).smoothciehigh; float maxsl= 4.f;//maximum real slope float minslider = 0.01f;//minimum slider value > 0.f float aa = (1.9f - maxsl) / (0.1f - minslider);//interpolation : 1.9f slope value for slider = 0.1f @@ -20302,8 +20810,11 @@ void ImProcFunctions::Lab_Local( slopegrayb = slopsmoot; mode = 3; }//modify slope - if(lp.smoothciem == 4) {//levels + if(lp.smoothciem == 4 || (gambas && lp.smoothciem == 5)) {//levels rolloff = false;//allows tone-mapping slope + if(gambas && lp.smoothciem == 5) { + rolloff = true; + } if(slopsmootr < 0.1f) { slopsmootr = aa * slopsmootr + bb; } @@ -20318,17 +20829,20 @@ void ImProcFunctions::Lab_Local( slopegrayb = slopsmootb; mode = 4; } - LUTf lut(65536, LUT_CLIP_OFF);//take from Alberto Griggio LUTf lutr(65536, LUT_CLIP_OFF); LUTf lutg(65536, LUT_CLIP_OFF); LUTf lutb(65536, LUT_CLIP_OFF); - bool scale = lp.issmoothcie;//scale Yb mid_gray - WhiteEv and BlavkEv + //printf("slopsmoot=%f\n", (double) slopsmoot); - tonemapFreeman(slopegray, slopegrayr, slopegrayg, slopegrayb, white_point, black_point, mid_gray, mid_gray_view, rolloff, lut, lutr, lutg, lutb, mode, scale, takeyb); - - if(lp.smoothciem == 4) { - if(lummod) {//luminosity mode by Lab conversion + bool scale = lp.issmoothcie;//scale Yb mid_gray - WhiteEv and BlavkEv + bool limslope = lumhigh; + if(gambas && lp.smoothciem == 5) { + limslope = true; + } + tonemapFreeman(slopegray, slopegrayr, slopegrayg, slopegrayb, white_point, black_point, mid_gray, mid_gray_view, rolloff, smooththreshold, limslope, lut, lutr, lutg, lutb, mode, scale, takeyb); + if(lp.smoothciem == 4 || (gambas && lp.smoothciem == 5)) { + if(lummod && lp.smoothciem == 4) {//luminosity mode by Lab conversion #ifdef _OPENMP #pragma omp parallel for #endif @@ -20392,8 +20906,7 @@ void ImProcFunctions::Lab_Local( } } } - } - + } rgb2lab(*tmpImage, *bufexpfin, params->icm.workingProfile); delete tmpImage; diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index bb1356b866..618b3f3360 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -17,7 +17,7 @@ // // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// * 2014 - 2019 2020 - Jacques Desmis +// * 2014 - 2019 2020 2024 - Jacques Desmis // * 2014 Ingo Weyrich // @@ -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 +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 wdspot = std::unique_ptr(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) { diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 44b3bf6c10..1be49f2f05 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -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 }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index d2e04132d9..9746c3aab8 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -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(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(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); @@ -7748,11 +7835,18 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->logcie, "Locallab", "logcie_" + index_str, spot.logcie, keyFile); 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->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); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 94108e5fd7..6719b50043 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -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 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; + }; /** @@ -2480,7 +2517,7 @@ struct WaveletParams { WavOpacityCurveSH& opacityCurveLUTSH, WavOpacityCurveBY& opacityCurveLUTBY, WavOpacityCurveW& opacityCurveLUTW, - WavOpacityCurveWL& opacityCurveLUTWL + WavOpacityCurveWL& opacityCurveLUTWL ) const; }; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 935001c93a..586ad5cec4 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -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 }; diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 64321a5a8d..d9e4ed5f9b 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -473,6 +473,8 @@ class LocallabListener double meanxelc; double meanyelc; int primlc; + double slopeglc; + bool linkrgblc; }; //select spot settings @@ -529,6 +531,7 @@ class AutoprimListener 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; }; diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 258688d910..049e13453f 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -1517,6 +1517,17 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT const int GW = labView->W; const int GH = labView->H; std::unique_ptr 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)); @@ -1527,8 +1538,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); @@ -1596,7 +1607,6 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT labView->b[x][y] = 0.f; } } - } if (params.colorappearance.enabled) { diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 1cdbfe682b..79eb1c80bf 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1294,7 +1294,8 @@ class ImageProcessor 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 @@ class ImageProcessor 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 @@ class ImageProcessor const int GH = labView->H; std::unique_ptr 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 @@ class ImageProcessor 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 @@ class ImageProcessor labView->b[x][y] = 0.f; } } - } //Colorappearance and tone-mapping associated diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index 4104ce66e7..4e371db40f 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -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); diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc index 3cb5c82d2f..c4292688a6 100644 --- a/rtgui/controlspotpanel.cc +++ b/rtgui/controlspotpanel.cc @@ -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( diff --git a/rtgui/icmpanel.cc b/rtgui/icmpanel.cc index 42a3d14121..260a1aaabe 100644 --- a/rtgui/icmpanel.cc +++ b/rtgui/icmpanel.cc @@ -26,6 +26,10 @@ #include "options.h" #include "pathutils.h" #include "rtimage.h" +#include "curveeditor.h" +#include "curveeditorgroup.h" +#include "editcallbacks.h" +#include #include "rtengine/dcp.h" #include "rtengine/iccstore.h" @@ -38,7 +42,8 @@ using namespace rtengine::procparams; 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,7 +77,13 @@ 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; ipDialog = Gtk::manage(new MyFileChooserButton(M("TP_ICM_INPUTDLGLABEL"), Gtk::FILE_CHOOSER_ACTION_OPEN)); @@ -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(new CurveEditorGroup(options.lastIcmCurvesDir, M("TP_ICM_OPACITYWLI"))); + opacityCurveEditorWLI->setCurveListener(this); + const ColorManagementParams default_params; + + opacityShapeWLI = static_cast(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(); diff --git a/rtgui/icmpanel.h b/rtgui/icmpanel.h index 821379ef8c..634420efe0 100644 --- a/rtgui/icmpanel.h +++ b/rtgui/icmpanel.h @@ -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 @@ class ICMPanelListener 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 @@ class ICMPanel final : 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 opacityCurveEditorWLI; + FlatCurveEditor* opacityShapeWLI; + Adjuster* redx; Adjuster* redy; Adjuster* grex; @@ -75,7 +95,7 @@ class ICMPanel final : //Gtk::Label* blb; Gtk::Button* neutral; sigc::connection trcExpconn; - bool lasttrcExp; + sigc::connection wavExpconn; sigc::connection neutralconn; bool lastToneCurve; @@ -127,6 +147,13 @@ class ICMPanel final : 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; @@ -171,7 +198,7 @@ class ICMPanel final : sigc::connection wprimconn; MyComboBoxText* wcat; sigc::connection wcatconn; - + std::unique_ptr aRendIntent; sigc::connection arendintentconn; @@ -186,15 +213,15 @@ class ICMPanel final : sigc::connection ipc; Glib::ustring oldip; ICMPanelListener* icmplistener; - + double dcpTemperatures[2]; Glib::ustring lastRefFilename; Glib::ustring camName; 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; float nextbx; @@ -205,6 +232,7 @@ class ICMPanel final : float nextwy; float nextmx; float nextmy; + Gtk::Label* wavlocLabels; public: static const Glib::ustring TOOL_NAME; @@ -220,6 +248,8 @@ class ICMPanel final : 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 @@ class ICMPanel final : void wprimChanged(); void wcatChanged(); void trcExpChanged(); + void wavExpChanged(); void opChanged(); void oiChanged(int n); void aiChanged(int n); diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index a167cb5e1d..776b971aea 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -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 &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); } } diff --git a/rtgui/locallabtools.cc b/rtgui/locallabtools.cc index e4753ccbcf..5226147427 100644 --- a/rtgui/locallabtools.cc +++ b/rtgui/locallabtools.cc @@ -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(); @@ -5770,6 +5760,8 @@ void LocallabVibrance::updateguivib(int spottype) } enableListener(); + + return false; } diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 828615ba38..a2d2c54479 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -64,6 +64,7 @@ class LocallabTool: 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 @@ class LocallabTool: 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 @@ class LocallabTool: 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 @@ class LocallabTool: 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 @@ class LocallabTool: 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 @@ class LocallabContrast: 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 @@ class LocallabContrast: 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 @@ class LocallabContrast: void localcontMethodChanged(); void origlcChanged(); + void processwavChanged(); void wavgradlChanged(); void wavedgChanged(); void localedgMethodChanged(); @@ -1693,9 +1726,11 @@ class Locallabcie: 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 @@ class Locallabcie: 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 @@ class Locallabcie: Adjuster* const whiteEvjz; Adjuster* const targetjz; Gtk::Frame* const bevwevFrame; - Gtk::CheckButton* const forcebw; - ToolParamBlock* const sigBox; + 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 @@ class Locallabcie: 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 @@ class Locallabcie: 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 @@ class Locallabcie: 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 @@ class Locallabcie: 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 @@ class Locallabcie: 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 @@ class Locallabcie: 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 @@ class Locallabcie: 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(); diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index 7ea5c55829..75305c99bc 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -433,14 +433,10 @@ void LocallabTone::updateguitone(int spottype) enatmMask->set_active(false); enatmMaskaft->set_active(false); - // showmasktmMethodConn.block(true); - showmasktmMethod->set_active(0); - // showmasktmMethodConn.block(false); previewtm->hide(); // previewtmConn.block(true); previewtm->set_active(false); // previewtmConn.block(false); - resetMaskView(); } else { sensitm->show(); previewtm->show(); @@ -450,7 +446,8 @@ void LocallabTone::updateguitone(int spottype) } enableListener(); - + + return false; } ); @@ -1208,7 +1205,6 @@ void LocallabRetinex::updateguireti(int spottype) updateGUIToMode(static_cast(complexity->get_active_row_number())); } enableListener(); - return false; } ); @@ -2523,9 +2519,11 @@ LocallabContrast::LocallabContrast(): lclightness(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_LIGHTNESS"), 0, 3.0, 0.01, 1.0))), contFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTWFRA")))), sigmalc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))), + offslc(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVOFFSET"), 0.33, 1.6, 0.01, 1.))), LocalcurveEditorwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAV"))), wavshape(static_cast(LocalcurveEditorwav->addCurve(CT_Flat, "", nullptr, false, false))), - csThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLD"), 0, 9, 0, 0, 6, 6, 0, false))), + csThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLD"), 0, 9, 0, 0, 7, 5, 0, false))), + processwav(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_PROCESSWAV")))), levelwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LEVELWAV"), 1, 9, 1, 4))), expresidpyr(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))), residcont(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCONT"), -100, 100, 1, 0))), @@ -2620,6 +2618,9 @@ LocallabContrast::LocallabContrast(): auto m = ProcEventMapper::getInstance(); Evlocallabpreviewlc = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PREVIEWLC"); Evlocallabfeatherwav = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_FEATHERWAV"); + Evlocallaboffslc = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_OFFSETWAV"); + + Evlocallabprocesswav = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PROCESSWAV"); set_orientation(Gtk::ORIENTATION_VERTICAL); @@ -2642,6 +2643,7 @@ LocallabContrast::LocallabContrast(): contFrame->set_label_align(0.025, 0.5); sigmalc->setAdjusterListener(this); + offslc->setAdjusterListener(this); LocalcurveEditorwav->setCurveListener(this); @@ -2697,6 +2699,7 @@ LocallabContrast::LocallabContrast(): clarisoft->setAdjusterListener(this); origlcConn = origlc->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::origlcChanged)); + processwavConn = processwav->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::processwavChanged)); Gtk::Box *TittleVBox; TittleVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); @@ -2925,8 +2928,10 @@ LocallabContrast::LocallabContrast(): pack_start(*lcdarkness); pack_start(*lclightness); pack_start(*csThreshold); + pack_start(*processwav); ToolParamBlock* const coBox = Gtk::manage(new ToolParamBlock()); coBox->pack_start(*sigmalc); + coBox->pack_start(*offslc); coBox->pack_start(*LocalcurveEditorwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor // coBox->pack_start(*csThreshold); contFrame->add(*coBox); @@ -3131,14 +3136,13 @@ void LocallabContrast::updateguicont(int spottype) GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected // Update GUI fullimage or main + disableListener(); if(spottype == 3) { sensilc->hide(); - showmasklcMethod->set_active(0); previewlc->hide(); previewlc->set_active(false); - resetMaskView(); enalcMask->set_active(false); exprecovw->hide(); expmasklc->hide(); @@ -3150,7 +3154,7 @@ void LocallabContrast::updateguicont(int spottype) updateGUIToMode(static_cast(complexity->get_active_row_number())); } enableListener(); - + return false; } ); @@ -3219,7 +3223,7 @@ void LocallabContrast::updateAdviceTooltips(const bool showTooltips) wavshapecomp->setTooltip(M("TP_LOCALLAB_WAT_WAVDELTABAL_TOOLTIP")); threswav->set_tooltip_text(M("TP_LOCALLAB_WAT_BALTHRES_TOOLTIP")); residcomp->set_tooltip_text(M("TP_LOCALLAB_WAT_RESIDCOMP_TOOLTIP")); - + processwav->set_tooltip_text(M("TP_LOCALLAB_PROCESSWAV_TOOLTIP")); expresidpyr->set_tooltip_text(M("TP_LOCALLAB_WAT_EXPRESID_TOOLTIP")); expcontrastpyr->set_tooltip_text(M("TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP")); @@ -3318,6 +3322,7 @@ void LocallabContrast::updateAdviceTooltips(const bool showTooltips) decayw->set_tooltip_text(""); lowthresw->set_tooltip_text(""); higthresw->set_tooltip_text(""); + processwav->set_tooltip_text(""); } } @@ -3337,6 +3342,7 @@ void LocallabContrast::disableListener() localcontMethodConn.block(true); origlcConn.block(true); + processwavConn.block(true); wavgradlConn.block(true); wavedgConn.block(true); localedgMethodConn.block(true); @@ -3358,6 +3364,7 @@ void LocallabContrast::enableListener() localcontMethodConn.block(false); origlcConn.block(false); + processwavConn.block(false); wavgradlConn.block(false); wavedgConn.block(false); localedgMethodConn.block(false); @@ -3403,6 +3410,7 @@ void LocallabContrast::read(const rtengine::procparams::ProcParams* pp, const Pa lcdarkness->setValue(spot.lcdarkness); lclightness->setValue(spot.lclightness); sigmalc->setValue(spot.sigmalc); + offslc->setValue(spot.offslc); wavshape->setCurve(spot.locwavcurve); csThreshold->setValue(spot.csthreshold); levelwav->setValue((double)spot.levelwav); @@ -3421,6 +3429,7 @@ void LocallabContrast::read(const rtengine::procparams::ProcParams* pp, const Pa claricres->setValue(spot.claricres); clarisoft->setValue(spot.clarisoft); origlc->set_active(spot.origlc); + processwav->set_active(spot.processwav); wavgradl->set_active(spot.wavgradl); sigmalc2->setValue(spot.sigmalc2); strwav->setValue(spot.strwav); @@ -3529,6 +3538,7 @@ void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited* spot.lcdarkness = lcdarkness->getValue(); spot.lclightness = lclightness->getValue(); spot.sigmalc = sigmalc->getValue(); + spot.offslc = offslc->getValue(); spot.locwavcurve = wavshape->getCurve(); spot.csthreshold = csThreshold->getValue(); spot.levelwav = levelwav->getIntValue(); @@ -3547,6 +3557,7 @@ void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited* spot.claricres = claricres->getValue(); spot.clarisoft = clarisoft->getValue(); spot.origlc = origlc->get_active(); + spot.processwav = processwav->get_active(); spot.wavgradl = wavgradl->get_active(); spot.sigmalc2 = sigmalc2->getValue(); spot.strwav = strwav->getValue(); @@ -3635,6 +3646,7 @@ void LocallabContrast::setDefaults(const rtengine::procparams::ProcParams* defPa lcdarkness->setDefault(defSpot.lcdarkness); lclightness->setDefault(defSpot.lclightness); sigmalc->setDefault(defSpot.sigmalc); + offslc->setDefault(defSpot.offslc); levelwav->setDefault((double)defSpot.levelwav); csThreshold->setDefault(defSpot.csthreshold); residcont->setDefault(defSpot.residcont); @@ -3727,6 +3739,13 @@ void LocallabContrast::adjusterChanged(Adjuster* a, double newval) } } + if (a == offslc) { + if (listener) { + listener->panelChanged(Evlocallaboffslc, + offslc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + if (a == levelwav) { if (listener) { listener->panelChanged(Evlocallablevelwav, @@ -4177,6 +4196,7 @@ void LocallabContrast::convertParamToNormal() // Set hidden GUI widgets in Normal mode to default spot values origlc->set_active(defSpot.origlc); + processwav->set_active(defSpot.processwav); wavgradl->set_active(defSpot.wavgradl); sigmalc2->setValue(defSpot.sigmalc2); strwav->setValue(defSpot.strwav); @@ -4190,6 +4210,7 @@ void LocallabContrast::convertParamToNormal() waveshow->set_active(defSpot.waveshow); radiusw->setValue(defSpot.radiusw); detailw->setValue(defSpot.detailw); + offslc->setValue(defSpot.offslc); if (defSpot.localedgMethod == "fir") { localedgMethod->set_active(0); @@ -4253,13 +4274,14 @@ void LocallabContrast::convertParamToSimple() disableListener(); gamlc->setValue(defSpot.gamlc); +/* // Set hidden specific GUI widgets in Simple mode to default spot values if (defSpot.localcontMethod == "loc") { localcontMethod->set_active(0); } else if (defSpot.localcontMethod == "wav") { localcontMethod->set_active(1); } - +*/ showmasklcMethod->set_active(0); enalcMask->set_active(defSpot.enalcMask); // CCmasklcshape->setCurve(defSpot.CCmasklccurve); @@ -4288,7 +4310,7 @@ void LocallabContrast::updateGUIToMode(const modeType new_type) switch (new_type) { case Simple: // Expert and Normal mode widgets are hidden in Simple mode - localcontMethod->hide(); + localcontMethod->show(); origlc->hide(); expcontrastpyr->hide(); expcontrastpyr2->hide(); @@ -4313,7 +4335,7 @@ void LocallabContrast::updateGUIToMode(const modeType new_type) expmasklc->show(); exprecovw->show(); decayw->hide(); - + offslc->hide(); if (enalcMask->get_active()) { maskusablew->show(); maskunusablew->hide(); @@ -4341,6 +4363,7 @@ void LocallabContrast::updateGUIToMode(const modeType new_type) if (localcontMethod->get_active_row_number() != 1) { // Keep widget hidden when localcontMethod is equal to 1 fftwlc->show(); } + offslc->show(); expmasklc->show(); exprecovw->show(); @@ -4403,6 +4426,22 @@ void LocallabContrast::origlcChanged() } } +void LocallabContrast::processwavChanged() +{ + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (processwav->get_active()) { + listener->panelChanged(Evlocallabprocesswav, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabprocesswav, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + + void LocallabContrast::wavgradlChanged() { if (isLocActivated && exp->getEnabled()) { @@ -4634,11 +4673,14 @@ void LocallabContrast::updateContrastGUI1() levelwav->show(); expresidpyr->show(); clariFrame->show(); + offslc->hide(); if (mode == Expert) { // Keep widget hidden in Normal and Simple mode expcontrastpyr->show(); expcontrastpyr2->show(); gamlc->show(); + offslc->show(); + } fftwlc->hide(); @@ -4912,7 +4954,7 @@ void LocallabCBDL::updateguicbdl(int spottype) updateGUIToMode(static_cast(complexity->get_active_row_number())); } enableListener(); - + return false; } ); @@ -5867,11 +5909,9 @@ void LocallabLog::updateguilog(int spottype) if(spottype == 3) { sensilog->hide(); - showmaskLMethod->set_active(0); previewlog->hide(); previewlog->set_active(false); enaLMask->set_active(false); - resetMaskView(); exprecovl->hide(); expmaskL->hide(); } else { @@ -5882,7 +5922,7 @@ void LocallabLog::updateguilog(int spottype) updateGUIToMode(static_cast(complexity->get_active_row_number())); } enableListener(); - + return false; } ); @@ -7280,10 +7320,8 @@ void LocallabMask::updateguimask(int spottype) if(spottype == 3) { sensimask->hide(); - showmask_Method->set_active(0); previewmas->hide(); previewmas->set_active(false); - resetMaskView(); blendmask->hide(); blendmaskab->hide(); softradiusmask->hide(); @@ -7312,6 +7350,7 @@ void LocallabMask::updateguimask(int spottype) } enableListener(); + return false; } @@ -7980,13 +8019,14 @@ Locallabcie::Locallabcie(): // ciecam specific widgets sensicie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))), previewcie(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_PREVIEW")))), - reparcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))), jabcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JAB")))), modecam(Gtk::manage(new MyComboBoxText())), + modeQJ(Gtk::manage(new MyComboBoxText())), modecie(Gtk::manage(new MyComboBoxText())), jzFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_JZFRA")))), modeHBoxcam(Gtk::manage(new Gtk::Box())), + modeHBoxQJ(Gtk::manage(new Gtk::Box())), modeHBoxcie(Gtk::manage(new Gtk::Box())), cieFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGFRA")))), expcamscene(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))), @@ -8010,7 +8050,6 @@ Locallabcie::Locallabcie(): jz100(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZ100"), 0.10, 0.90, 0.01, 0.25))), pqremap(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZPQREMAP"), 100., 10000., 0.1, 120.))), pqremapcam16(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CAM16PQREMAP"), 100., 10000., 1., 100.))), - forcejz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JZFORCE")))), expjz(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))), jzshFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_JZSHFRA")))), hljzcie(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_HIGHLIGHTS"), 0., 100., 1., 0.))), @@ -8036,29 +8075,38 @@ Locallabcie::Locallabcie(): contqcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONQL"), -100., 100., 0.5, 0.))), lightsigqcie(Gtk::manage(new Adjuster(M(""), -100., 100., 0.5, 0.))), contsigqcie(Gtk::manage(new Adjuster(M(""), -100., 100., 0.5, 0.))), - contthrescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTHRES"), -1., 1., 0.01, 0.))), - logjzFrame(Gtk::manage(new Gtk::Frame())), logjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JZLOG")))), blackEvjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLACK_EV"), -16.00, 0.00, 0.01, -5.00))), whiteEvjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WHITE_EV"), 0.00, 32.000, 0.01, 10.00))), targetjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZTARGET_EV"), 4., 80.0, 0.1, 18.0))), bevwevFrame(Gtk::manage(new Gtk::Frame())), - forcebw(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BWFORCE")))), + sigybjz12(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDNORMCIE")))), + sigBox12(Gtk::manage(new ToolParamBlock())), + sigmoidFrame12(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))), + sigq12(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGFRA")))), + slopesmoq(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTH"), 0.6, 2.0, 0.01, 1.))), + sigmoidldacie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.5, 3.5, 0.01, 1.8))), + sigmoidthcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), -1., 1., 0.01, 0., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), + sigmoidblcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 50., 1000., 0.5, 100.))), + autocomprHBox(Gtk::manage(new Gtk::Box())), + comprcieauto(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_SIGMOIDLOGAUTO")))), + normcie12(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDNORMCIE")))), + normcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDNORMCIE11")))), + modeHBoxbwev12(Gtk::manage(new Gtk::Box())), + bwevMethod12(Gtk::manage(new MyComboBoxText())), + modeHBoxbwev(Gtk::manage(new Gtk::Box())), + bwevMethod(Gtk::manage(new MyComboBoxText())), sigBox(Gtk::manage(new ToolParamBlock())), sigmoidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))), + sigq(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGFRA11")))), sigmoidnormFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGNORM")))), - sigq(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGFRA")))), sigmoidldacie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.0, 1., 0.01, 0.5))), - sigmoidthcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), 0.1, 4., 0.01, 1.2, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), + sigmoidthcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH11"), 0.1, 4., 0.01, 1.2, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), sigmoidsenscie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDSENSI"), 0.1, 1.5, 0.01, 0.9))), - sigmoidblcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 0.05, 1., 0.01, 0.75))), - autocomprHBox(Gtk::manage(new Gtk::Box())), - comprcieauto(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_SIGMOIDLOGAUTO")))), - normcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDNORMCIE")))), - modeHBoxbwev(Gtk::manage(new Gtk::Box())), - bwevMethod(Gtk::manage(new MyComboBoxText())), + sigmoidblcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL11"), 0.05, 1., 0.01, 0.75))), + logcieFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGCIE")))), logcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGCIE")))), comprBox(Gtk::manage(new ToolParamBlock())), @@ -8074,8 +8122,13 @@ Locallabcie::Locallabcie(): slopjcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGSLOPJCIE"), 0., 500., 0.01, 12.923))), midtcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MIDTCIE"), -100, 100, 1, 0))), smoothcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_SCA")))), + smoothcielnk(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_LNK")))), + smoothcietrc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_TRC")))), + smoothcietrcrel(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_TRCREL")))), smoothcieyb(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_YB")))), smoothcielum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_LUM")))), + smoothciehigh(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_HIGH")))), + smoothcieth(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SMOOTHCIETH"), 0.5, 1.5, 0.01, 1.0))), ciesmoothBox(Gtk::manage(new ToolParamBlock())), smoothBox(Gtk::manage(new Gtk::Box())), smoothciemet(Gtk::manage(new MyComboBoxText())), @@ -8083,7 +8136,13 @@ Locallabcie::Locallabcie(): slopesmor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTHR"), 0.01, 1.6, 0.01, 1.))), slopesmog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTHG"), 0.01, 1.6, 0.01, 1.))), slopesmob(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTHB"), 0.01, 1.6, 0.01, 1.))), - whitescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGWHITESCIE"), -100, 100, 1, 0))), + kslopesmor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTRCR"), 0.75, 1.5, 0.01, 1.))), + kslopesmog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTRCG"), 0.75, 1.5, 0.01, 1.))), + kslopesmob(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTRCB"), 0.75, 1.5, 0.01, 1.))), + contsig(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SMOOTHCONTSIG"), 0.5, 3.5, 0.01, 1.15))), + skewsig(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SMOOTHSKEWSIG"), -1., 1., 0.01, 0., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), + whitsig(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SMOOTHWHITSIG"), 50, 1000., 0.5, 100.))), + whitescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGWHITESCIE"), -100, 100, 1, 20))), blackscie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGBLACKSSCIE"), -100, 100, 1, 0))), willBox(Gtk::manage(new Gtk::Box())), illMethod(Gtk::manage(new MyComboBoxText())), @@ -8091,7 +8150,7 @@ Locallabcie::Locallabcie(): primMethod(Gtk::manage(new MyComboBoxText())), primCoordGridl(Gtk::manage(new Gtk::Grid())), trcFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TRCFRAME")))), - smoothFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CIE_SMOOTHFRAME")))), + smoothFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CIE_SMOOTHFRAME12")))), primillFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_PRIMILLFRAME")))), redBox(Gtk::manage(new ToolParamBlock())), redxl(Gtk::manage(new Adjuster(M("TC_PRIM_REDX"), 0.41, 1.0, 0.0001, 0.7347))), @@ -8115,13 +8174,20 @@ Locallabcie::Locallabcie(): bwcieBox(Gtk::manage(new Gtk::Box())), bwcie(Gtk::manage(new Gtk::CheckButton(M("TP_ICM_BW")))), + sigmoidjzFrame12(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGJZFRA")))), sigmoidjzFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGJZFRA")))), + sigmoid2Frame12(Gtk::manage(new Gtk::Frame(M("")))), sigmoid2Frame(Gtk::manage(new Gtk::Frame(M("")))), sigcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGCIE")))), - sigjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGJZFRA")))), + sigjz12(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGJZFRA")))), + sigmoidldajzcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.5, 3.5, 0.01, 1.3))), + sigmoidthjzcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), -1., 1., 0.01, 0., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), + sigmoidbljzcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 50., 1000., 0.5, 100.))), + sigjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGJZFRA11")))), + forcebw(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BWFORCE")))), sigmoidldajzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0., 1.0, 0.01, 0.5))), - sigmoidthjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), - sigmoidbljzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 0.5, 1.5, 0.01, 1.))), + sigmoidthjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH11"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), + sigmoidbljzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL11"), 0.5, 1.5, 0.01, 1.))), colorflcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCOLORFL"), -100., 100., 0.5, 0.))), saturlcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATURV"), -100., 100., 0.5, 0.))), rstprotectcie(Gtk::manage(new Adjuster(M("TP_COLORAPP_RSTPRO"), 0., 100., 0.1, 0.))), @@ -8179,7 +8245,6 @@ Locallabcie::Locallabcie(): showmaskcieMethod(Gtk::manage(new MyComboBoxText())), enacieMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), enacieMaskall(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASKALL")))), -// maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), maskcieCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), CCmaskcieshape(static_cast(maskcieCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), LLmaskcieshape(static_cast(maskcieCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), @@ -8213,7 +8278,8 @@ Locallabcie::Locallabcie(): { auto m = ProcEventMapper::getInstance(); Evlocallabpreviewcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PREVIEWCIE"); - Evlocallabnormcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_NORM"); + Evlocallabnormcie12 = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_NORM"); + Evlocallabnormcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_NORM11"); Evlocallabstrumaskcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_STRU"); EvLocallabtoolcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_STRU_TOOL"); EvLocallabfftcieMask = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_BLURFFT"); @@ -8221,7 +8287,6 @@ Locallabcie::Locallabcie(): Evlocallabblurcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_BLURRAD"); Evlocallabhighmaskcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_HIGH"); Evlocallabshadmaskcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_SHAD"); - Evlocallabsigmoidsenscie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SIGADAP"); EvlocallabLLmaskcieshapewav = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_WLC"); EvlocallabcsThresholdcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_WLEV"); Evlocallabcomprcie = m->newEvent(HDR, "HISTORY_MSG_LOCAL_CIE_BRICOMP"); @@ -8230,17 +8295,29 @@ Locallabcie::Locallabcie(): Evlocallablogcieq = m->newEvent(HDR, "HISTORY_MSG_LOCAL_CIE_LOGCIEQ"); Evlocallabcomprcieth = m->newEvent(HDR, "HISTORY_MSG_LOCAL_CIE_BRICOMPTH"); EvlocallabHHhmaskcieshape = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_CHH"); - EvlocallabbwevMethod = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SIGMET"); + EvlocallabbwevMethod12 = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SIGMET"); Evlocallabgamjcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_GAM"); Evlocallabslopjcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOP"); Evlocallabmidtcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_MIDT"); + Evlocallabcontsig = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_CONTSIG"); + Evlocallabskewsig = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SKEWSIG"); + Evlocallabwhitsig = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_WHITSIG"); Evlocallabslopesmo = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMO"); + Evlocallabslopesmoq = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMOQ"); Evlocallabslopesmor = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMOR"); Evlocallabslopesmog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMOG"); Evlocallabslopesmob = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMOB"); + Evlocallabkslopesmor = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_KSLOPESMOR"); + Evlocallabkslopesmog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_KSLOPESMOG"); + Evlocallabkslopesmob = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_KSLOPESMOB"); Evlocallabsmoothcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTH"); + Evlocallabsmoothcielnk = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHLNK"); + Evlocallabsmoothcietrc = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHTRC"); + Evlocallabsmoothcietrcrel = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHTRCREL"); Evlocallabsmoothcieyb = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHYB"); + Evlocallabsmoothcieth = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHTH"); Evlocallabsmoothcielum = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTH_LUM"); + Evlocallabsmoothciehigh = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTH_HIGH"); Evlocallabsigcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SIG"); Evlocallabillcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_ILL"); Evlocallabprimcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_PRIM"); @@ -8257,7 +8334,7 @@ Locallabcie::Locallabcie(): Evlocallabgamutcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_GAMUTCIE"); Evlocallabbwcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_BWCIE"); Evlocallabexpprecam = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_EXPPRECAM"); - Evlocallablightsigqcie = m->newEvent(AUTOEXP, ""); + Evlocallablightsigqcie12 = m->newEvent(AUTOEXP, ""); Evlocallabcontsigqcie = m->newEvent(AUTOEXP, ""); Evlocallabrefi = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_REFI"); Evlocallabshiftxl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SHIFTXL"); @@ -8268,11 +8345,24 @@ Locallabcie::Locallabcie(): EvlocallabenacieMaskall = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_ENAMASKALL"); Evlocallabsmoothciemet = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHMET"); Evlocallabfeathercie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_FEATHERCIE"); - + EvlocallabmodeQJ = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_QJMETHOD"); + EvlocallabbwevMethod = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_WEVMETHOD11"); + Evlocallabsigmoidldacie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGDACIE"); + Evlocallabsigmoidthcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGTHCIE"); + Evlocallabsigmoidblcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGBLCIE"); + Evlocallabsigq = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGQ11"); + Evlocallabsigq_12 = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGQ12"); + Evlocallabsigjz = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGJZ11"); + Evlocallabforcebw = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGFORCEBW"); + Evlocallabsigmoidldajzcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGJZ11CONT"); + Evlocallabsigmoidthjzcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGJZ11GRAY"); + Evlocallabsigmoidbljzcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGJZ11BL"); + Evlocallabsigmoidsenscie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGSENSICIE"); + Evlocallablogcie_12 = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_LOGCIE12"); set_orientation(Gtk::ORIENTATION_VERTICAL); // Parameter Ciecam specific widgets - const LocallabParams::LocallabSpot defSpot; + const LocallabParams::LocallabSpot defSpot; reparcie->setAdjusterListener(this); sensicie->setAdjusterListener(this); @@ -8281,7 +8371,6 @@ Locallabcie::Locallabcie(): pack_start(*previewcie); pack_start(*reparcie); modeHBoxcam->set_spacing(2); - //modeHBoxcam->set_tooltip_markup (M ("TP_LOCALLAB_CAMMODE_TOOLTIP")); Gtk::Label* modeLabelcam = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_CAMMODE") + ":")); modeHBoxcam->pack_start(*modeLabelcam, Gtk::PACK_SHRINK); modecam->append(M("TP_LOCALLAB_CAMMODE_CAM16")); @@ -8291,6 +8380,17 @@ Locallabcie::Locallabcie(): modecamconn = modecam->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::modecamChanged)); pack_start(*modeHBoxcam); + modeHBoxQJ->set_spacing(2); + Gtk::Label* modeLabelQJ = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_QJMODE") + ":")); + modeHBoxQJ->pack_start(*modeLabelQJ, Gtk::PACK_SHRINK); + modeHBoxQJ->set_tooltip_markup(M("TP_LOCALLAB_QJMODE_TOOLTIP")); + modeQJ->append(M("TP_LOCALLAB_QJMODE_511")); + modeQJ->append(M("TP_LOCALLAB_QJMODE_512")); + modeQJ->set_active(1); + modeHBoxQJ->pack_start(*modeQJ); + modeQJconn = modeQJ->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::modeQJChanged)); + pack_start(*modeHBoxQJ); + modeHBoxcie->set_spacing(2); modeHBoxcie->set_tooltip_markup(M("TP_LOCALLAB_CIEMODE_TOOLTIP")); Gtk::Label* modeLabel = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_CIEMODE") + ":")); @@ -8331,10 +8431,6 @@ Locallabcie::Locallabcie(): setExpandAlignProperties(expcamscene, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - - - - ToolParamBlock* const cieFBox = Gtk::manage(new ToolParamBlock()); cieFBox->pack_start(*Autograycie); cieFBox->pack_start(*sourceGraycie); @@ -8363,10 +8459,9 @@ Locallabcie::Locallabcie(): bevwevFrame->add(*bevwevBox); cieFBox->pack_start(*bevwevFrame); - sigmoidFrame->set_label_align(0.025, 0.5); - sigmoidFrame->set_label_widget(*sigq); - sigmoidnormFrame->set_label_align(0.025, 0.5); - sigmoidnormFrame->set_label_widget(*normcie); + sigmoidFrame12->set_label_align(0.025, 0.5); + sigmoidFrame12->set_label_widget(*sigq12); + sigmoidFrame12->set_tooltip_text(M("TP_LOCALLAB_SIGMOID16_TOOLTIP")); Gtk::Box *TittleVBoxprecam; @@ -8381,8 +8476,8 @@ Locallabcie::Locallabcie(): setExpandAlignProperties(expprecam, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); + sigmoid2Frame12->set_label_align(0.025, 0.5); sigmoid2Frame->set_label_align(0.025, 0.5); - //sigmoid2Frame->set_label_widget(*sigcie); logcieFrame->set_label_align(0.025, 0.5); logcieFrame->set_label_widget(*logcie); Gtk::Label* illLabel = Gtk::manage(new Gtk::Label(M("TP_ICM_WORKING_ILLU") + ":")); @@ -8479,24 +8574,33 @@ Locallabcie::Locallabcie(): gamutcieconn = gamutcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::gamutcieChanged)); - ToolParamBlock* const signormBox = Gtk::manage(new ToolParamBlock()); - ToolParamBlock* const sigfraBox = Gtk::manage(new ToolParamBlock()); bwcieBox->pack_start(*bwcie, Gtk::PACK_EXPAND_WIDGET); bwcieconn = bwcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::bwcieChanged)); - modeHBoxbwev->set_spacing(2); + modeHBoxbwev12->set_spacing(2); ToolParamBlock* const gamcieBox = Gtk::manage(new ToolParamBlock()); - Gtk::Label* modeLabelbwev = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SIGMOIDQJ") + ":")); + Gtk::Label* modeLabelbwev12 = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SIGMOIDQJ") + ":")); + modeHBoxbwev12->pack_start(*modeLabelbwev12, Gtk::PACK_SHRINK); + + bwevMethod12->append(M("TP_LOCALLAB_BWEVSIG")); + bwevMethod12->append(M("TP_LOCALLAB_BWEVSLOP")); + bwevMethod12->set_active(1); + bwevMethod12Conn = bwevMethod12->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::bwevMethod12Changed)); + modeHBoxbwev12->pack_start(*bwevMethod12); + + modeHBoxbwev->set_spacing(2); + Gtk::Label* modeLabelbwev = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SIGMOIDQJ11") + ":")); modeHBoxbwev->pack_start(*modeLabelbwev, Gtk::PACK_SHRINK); - bwevMethod->append(M("TP_LOCALLAB_BWEVNONE")); - bwevMethod->append(M("TP_LOCALLAB_BWEVSIG")); + bwevMethod->append(M("TP_LOCALLAB_BWEVNONE11")); + bwevMethod->append(M("TP_LOCALLAB_BWEVSIG11")); bwevMethod->set_active(1); bwevMethodConn = bwevMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::bwevMethodChanged)); modeHBoxbwev->pack_start(*bwevMethod); + comprBox->pack_start(*comprcie); comprBox->pack_start(*strcielog); comprBox->pack_start(*satcie); @@ -8519,21 +8623,37 @@ Locallabcie::Locallabcie(): smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_GAMMA ROLLOFF")); smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_GAMMA")); smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_LEVELS")); + //if need I will add an other smoothciemet with variable + smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_SIG")); smoothciemet->set_active(0); + smoothciemet->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP")); + ciesmoothBox->pack_start(*smoothBox); ciesmoothBox->pack_start(*slopesmo); ciesmoothBox->pack_start(*slopesmor); ciesmoothBox->pack_start(*slopesmog); ciesmoothBox->pack_start(*slopesmob); + ciesmoothBox->pack_start(*kslopesmor); + ciesmoothBox->pack_start(*kslopesmog); + ciesmoothBox->pack_start(*kslopesmob); + ciesmoothBox->pack_start(*contsig); + ciesmoothBox->pack_start(*skewsig); + ciesmoothBox->pack_start(*whitsig); + ciesmoothBox->pack_start(*smoothcielnk); + ciesmoothBox->pack_start(*smoothciehigh); ciesmoothBox->pack_start(*smoothcielum); ciesmoothBox->pack_start(*smoothcieyb); ciesmoothBox->pack_start(*smoothcie); - + ciesmoothBox->pack_start(*smoothcietrc); + ciesmoothBox->pack_start(*smoothcietrcrel); + ciesmoothBox->pack_start(*smoothcieth); smoothciemetconn = smoothciemet->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::smoothciemetChanged)); smoothcieBox->pack_start(*ciesmoothBox); smoothFrame->add(*smoothcieBox); + trccieBox->pack_start(*smoothFrame); + trccieBox->pack_start(*bwcieBox); trcFrame->add(*trccieBox); gamcieBox->pack_start(*trcFrame); primillBox->pack_start(*willBox); @@ -8548,29 +8668,53 @@ Locallabcie::Locallabcie(): colorBox->pack_start(*shiftxl); colorBox->pack_start(*shiftyl); colorFramecie->add(*colorBox); - primillBox->pack_start(*bwcieBox); primillBox->pack_start(*colorFramecie); primillFrame->add(*primillBox); gamcieBox->pack_start(*primillFrame); - - expprecam->add(*gamcieBox, false); + ToolParamBlock* const sigfraBox12 = Gtk::manage(new ToolParamBlock()); + + sigfraBox12->pack_start(*modeHBoxbwev12); + sigfraBox12->pack_start(*slopesmoq); + sigfraBox12->pack_start(*sigmoidldacie12); + sigfraBox12->pack_start(*sigmoidthcie12); + sigfraBox12->pack_start(*sigmoidblcie12); + sigmoid2Frame12->add(*sigfraBox12); + sigBox12->pack_start(*sigmoid2Frame12); + sigmoidFrame12->add(*sigBox12); + sigmoidFrame->set_label_align(0.025, 0.5); + sigmoidFrame->set_label_widget(*sigq); + sigmoidnormFrame->set_label_align(0.025, 0.5); + sigmoidnormFrame->set_label_widget(*normcie); + ToolParamBlock* const sigfraBox = Gtk::manage(new ToolParamBlock()); + sigfraBox->pack_start(*modeHBoxbwev); sigfraBox->pack_start(*sigmoidldacie); sigfraBox->pack_start(*sigmoidthcie); - sigfraBox->pack_start(*sigmoidsenscie); - sigfraBox->pack_start(*modeHBoxbwev); + sigfraBox->pack_start(*sigmoidsenscie); sigmoid2Frame->add(*sigfraBox); sigBox->pack_start(*sigmoid2Frame); + ToolParamBlock* const signormBox = Gtk::manage(new ToolParamBlock()); signormBox->pack_start(*sigmoidblcie); sigmoidnormFrame->add(*signormBox); sigBox->pack_start(*sigmoidnormFrame); sigmoidFrame->add(*sigBox); + sigmoidjzFrame12->set_label_align(0.025, 0.5); + sigmoidjzFrame12->set_label_widget(*sigjz12); + ToolParamBlock* const sigjzBox12 = Gtk::manage(new ToolParamBlock()); + sigjzBox12->pack_start(*sigmoidldajzcie12); + sigjzBox12->pack_start(*sigmoidthjzcie12); + sigjzBox12->pack_start(*sigmoidbljzcie12); + sigjzBox12->pack_start(*sigybjz12); + sigmoidjzFrame12->add(*sigjzBox12); + sigmoidjzFrame12->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP")); + + cieFBox->pack_start(*sigmoidjzFrame12); sigmoidjzFrame->set_label_align(0.025, 0.5); sigmoidjzFrame->set_label_widget(*sigjz); @@ -8578,11 +8722,13 @@ Locallabcie::Locallabcie(): sigjzBox->pack_start(*sigmoidldajzcie); sigjzBox->pack_start(*sigmoidthjzcie); sigjzBox->pack_start(*sigmoidbljzcie); + sigjzBox->pack_start(*forcebw); sigmoidjzFrame->add(*sigjzBox); - + cieFBox->pack_start(*sigmoidjzFrame); + cieFBox->pack_start(*surHBoxcie); @@ -8653,7 +8799,6 @@ Locallabcie::Locallabcie(): jz2CurveEditorG->setCurveListener(this); LHshapejz->setIdentityValue(0.); LHshapejz->setResetCurve(FlatCurveType(defSpot.LHcurvejz.at(0)), defSpot.LHcurvejz); - // LHshapejz->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); LHshapejz->setCurveColorProvider(this, 3); LHshapejz->setBottomBarBgGradient(six_shape); jz2CurveEditorG->curveListComplete(); @@ -8760,6 +8905,7 @@ Locallabcie::Locallabcie(): jabcieConn = jabcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::jabcieChanged)); AutograycieConn = Autograycie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::AutograycieChanged)); comprcieautoconn = comprcieauto->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::comprcieautoChanged)); + normcie12conn = normcie12->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::normcie12Changed)); normcieconn = normcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::normcieChanged)); expprecamconn = expprecam->signal_enabled_toggled().connect(sigc::mem_fun(*this, &Locallabcie::expprecamChanged)); @@ -8768,15 +8914,21 @@ Locallabcie::Locallabcie(): satcieconn = satcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::satcieChanged)); logcieqconn = logcieq->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logcieqChanged)); smoothcieconn = smoothcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcieChanged)); + smoothcielnkconn = smoothcielnk->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcielnkChanged)); + smoothcietrcconn = smoothcietrc->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcietrcChanged)); + smoothcietrcrelconn = smoothcietrcrel->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcietrcrelChanged)); smoothcieybconn = smoothcieyb->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcieybChanged)); smoothcielumconn = smoothcielum->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcielumChanged)); + smoothciehighconn = smoothciehigh->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothciehighChanged)); logjzconn = logjz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logjzChanged)); + sigjz12conn = sigjz12->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigjz12Changed)); sigjzconn = sigjz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigjzChanged)); + forcebwconn = forcebw->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::forcebwChanged)); + sigq12conn = sigq12->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigq12Changed)); sigqconn = sigq->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigqChanged)); - forcejzConn = forcejz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::forcejzChanged)); qtojConn = qtoj->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::qtojChanged)); chjzcieconn = chjzcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::chjzcieChanged)); - forcebwConn = forcebw->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::forcebwChanged)); + sigybjz12Conn = sigybjz12->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigybjz12Changed)); sourceGraycie->setAdjusterListener(this); sourceGraycie->setLogScale(10, 18, true); @@ -8862,19 +9014,29 @@ Locallabcie::Locallabcie(): whiteEvjz->setAdjusterListener(this); targetjz->setAdjusterListener(this); targetjz->setLogScale(10, 18, true); + sigmoidldacie12->setAdjusterListener(this); + sigmoidthcie12->setAdjusterListener(this); + sigmoidblcie12->setAdjusterListener(this); + sigmoidldacie->setAdjusterListener(this); sigmoidthcie->setAdjusterListener(this); - sigmoidsenscie->setAdjusterListener(this); sigmoidblcie->setAdjusterListener(this); + sigmoidsenscie->setAdjusterListener(this); + comprcie->setAdjusterListener(this); strcielog->setAdjusterListener(this); comprcieth->setAdjusterListener(this); gamjcie->setAdjusterListener(this); slopjcie->setAdjusterListener(this); slopjcie->setLogScale(100, 1); + smoothcieth->setAdjusterListener(this); midtcie->setAdjusterListener(this); whitescie->setAdjusterListener(this); blackscie->setAdjusterListener(this); + sigmoidldajzcie12->setAdjusterListener(this); + sigmoidthjzcie12->setAdjusterListener(this); + sigmoidbljzcie12->setAdjusterListener(this); + sigmoidldajzcie->setAdjusterListener(this); sigmoidthjzcie->setAdjusterListener(this); sigmoidbljzcie->setAdjusterListener(this); @@ -8893,9 +9055,16 @@ Locallabcie::Locallabcie(): catadcie->setAdjusterListener(this); slopesmo->setAdjusterListener(this); + slopesmoq->setAdjusterListener(this); slopesmor->setAdjusterListener(this); slopesmog->setAdjusterListener(this); slopesmob->setAdjusterListener(this); + kslopesmor->setAdjusterListener(this); + kslopesmog->setAdjusterListener(this); + kslopesmob->setAdjusterListener(this); + contsig->setAdjusterListener(this); + skewsig->setAdjusterListener(this); + whitsig->setAdjusterListener(this); Gtk::Box *TittleVBoxcam16; TittleVBoxcam16 = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); @@ -8937,7 +9106,14 @@ Locallabcie::Locallabcie(): cie1lightFrame->set_label_align(0.025, 0.5); cie1contFrame->set_label_align(0.025, 0.5); cie1colorFrame->set_label_align(0.025, 0.5); + + ToolParamBlock* const cieP11Box = Gtk::manage(new ToolParamBlock()); + cieP11Box->pack_start(*cieCurveEditorG); + cieP11Box->pack_start(*cieCurveEditorG2); + expLcie->add(*cieP11Box, false); + ToolParamBlock* const cieP1Box = Gtk::manage(new ToolParamBlock()); + cieP1Box->pack_start(*expLcie, false, false); ToolParamBlock* const cieP1lightBox = Gtk::manage(new ToolParamBlock()); cieP1lightBox->pack_start(*lightlcie); cieP1lightBox->pack_start(*lightqcie); @@ -8964,14 +9140,9 @@ Locallabcie::Locallabcie(): cieP1colorBox->pack_start(*rstprotectcie); cie1colorFrame->add(*cieP1colorBox); cieP1Box->pack_start(*cie1colorFrame); - cieP1Box->pack_start(*sigmoidFrame);//disable provisory Sigmoid - + cieP1Box->pack_start(*sigmoidFrame12); + cieP1Box->pack_start(*sigmoidFrame); - ToolParamBlock* const cieP11Box = Gtk::manage(new ToolParamBlock()); - cieP11Box->pack_start(*cieCurveEditorG); - cieP11Box->pack_start(*cieCurveEditorG2); - expLcie->add(*cieP11Box, false); - cieP1Box->pack_start(*expLcie, false, false); expcam16->add(*cieP1Box, false); pack_start(*expcam16, false, false); @@ -9122,7 +9293,6 @@ Locallabcie::Locallabcie(): maskcieBox->pack_start(*blendmaskcie, Gtk::PACK_SHRINK, 0); maskcieBox->pack_start(*radmaskcie, Gtk::PACK_SHRINK, 0); - //maskcieBox->pack_start(*lapmaskcie, Gtk::PACK_SHRINK, 0); maskcieBox->pack_start(*chromaskcie, Gtk::PACK_SHRINK, 0); maskcieBox->pack_start(*gammaskcie, Gtk::PACK_SHRINK, 0); maskcieBox->pack_start(*slomaskcie, Gtk::PACK_SHRINK, 0); @@ -9210,14 +9380,12 @@ void Locallabcie::updateguicie(int spottype) if(spottype == 3) { sensicie->hide(); - showmaskcieMethod->set_active(0); previewcie->hide(); exprecovcie->hide(); expmaskcie->hide(); enacieMask->set_active(false); enacieMaskall->set_active(false); previewcie->set_active(false); - resetMaskView(); } else { sensicie->show(); previewcie->show(); @@ -9252,7 +9420,7 @@ void Locallabcie::previewcieChanged() void Locallabcie::setDefaultExpanderVisibility() { - expLcie->set_expanded(false); + expLcie->set_expanded(true); expjz->set_expanded(false); expwavjz->set_expanded(false); expcamscene->set_expanded(false); @@ -9268,15 +9436,13 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) if (showTooltips) { recothrescie->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP")); reparcie->set_tooltip_text(M("TP_LOCALLAB_LOGREPART_TOOLTIP")); - // cieFrame->set_tooltip_text(M("TP_LOCALLAB_LOGSCENE_TOOLTIP")); expcamscene->set_tooltip_text(M("TP_LOCALLAB_LOGSCENE_TOOLTIP")); PQFrame->set_tooltip_text(M("TP_LOCALLAB_JZPQFRA_TOOLTIP")); qtoj->set_tooltip_text(M("TP_LOCALLAB_JZQTOJ_TOOLTIP")); logcie->set_tooltip_text(M("TP_LOCALLAB_LOGCIE_TOOLTIP")); - logcieq->set_tooltip_text(M("TP_LOCALLAB_LOGCIEQ_TOOLTIP")); smoothcie->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP")); slopesmo->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP")); - smoothciemet->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP")); + // smoothciemet->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP")); modecam->set_tooltip_text(M("TP_LOCALLAB_JZMODECAM_TOOLTIP")); adapjzcie->set_tooltip_text(M("TP_LOCALLAB_JABADAP_TOOLTIP")); jz100->set_tooltip_text(M("TP_LOCALLAB_JZ100_TOOLTIP")); @@ -9294,12 +9460,13 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) wavshapejz->setTooltip(M("TP_LOCALLAB_WAT_WAVSHAPE_TOOLTIP")); LocalcurveEditorwavjz->set_tooltip_markup(M("TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP")); csThresholdjz->set_tooltip_markup(M("TP_LOCALLAB_WAT_THRESHOLDWAV_TOOLTIP")); - forcejz->set_tooltip_text(M("TP_LOCALLAB_JZFORCE_TOOLTIP")); sourceGraycie->set_tooltip_text(M("TP_LOCALLAB_JZLOGYBOUT_TOOLTIP")); sourceabscie->set_tooltip_text(M("TP_COLORAPP_ADAPSCEN_TOOLTIP")); cie1Frame->set_tooltip_text(M("TP_LOCALLAB_LOGIMAGE_TOOLTIP")); - sigmoidFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID16_TOOLTIP")); - sigmoidjzFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP")); + smoothFrame->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP")); + +// sigmoidFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID16_TOOLTIP")); +// sigmoidjzFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP")); contlcie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTL_TOOLTIP")); contqcie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTQ_TOOLTIP")); contthrescie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTTHRES_TOOLTIP")); @@ -9313,7 +9480,6 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) targetGraycie->set_tooltip_text(M("TP_COLORAPP_YBOUT_TOOLTIP")); detailcie->set_tooltip_text(M("TP_LOCALLAB_LOGDETAIL_TOOLTIP")); catadcie->set_tooltip_text(M("TP_LOCALLAB_LOGCATAD_TOOLTIP")); - // cie2Frame->set_tooltip_text(M("TP_LOCALLAB_LOGVIEWING_TOOLTIP")); expcamviewing->set_tooltip_text(M("TP_LOCALLAB_LOGVIEWING_TOOLTIP")); sensicie->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); CCmaskcieshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); @@ -9325,7 +9491,6 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) mask2cieCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP")); Lmaskcieshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); exprecovcie->set_tooltip_markup(M("TP_LOCALLAB_MASKRESH_TOOLTIP")); - // expgradcie->set_tooltip_markup(M("TP_LOCALLAB_MASKRESH_TOOLTIP")); strumaskcie->set_tooltip_text(M("TP_LOCALLAB_STRUSTRMASK_TOOLTIP")); fftcieMask->set_tooltip_text(M("TP_LOCALLAB_FFTMASK_TOOLTIP")); contcie->set_tooltip_text(M("TP_LOCALLAB_CONTTHMASK_TOOLTIP")); @@ -9339,7 +9504,9 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) midtcie->set_tooltip_text(M("TP_LOCALLAB_PRECAM_TOOLTIP")); whitescie->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDWHITESCIE_TOOLTIP")); blackscie->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDWHITESCIE_TOOLTIP")); - normcie->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIE_TOOLTIP")); + normcie12->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIE_TOOLTIP")); + sigmoidblcie12->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIEDISP_TOOLTIP")); + sigmoidbljzcie12->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIEDISP_TOOLTIP")); sigmoidblcie->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIEBLEND_TOOLTIP")); catBox->set_tooltip_text(M("TP_ICM_WORKING_CAT_TOOLTIP")); wprimBox->set_tooltip_text(M("TP_ICM_WORKING_PRIM_TOOLTIP")); @@ -9353,13 +9520,11 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) } else { reparcie->set_tooltip_text(""); recothrescie->set_tooltip_text(""); - // cieFrame->set_tooltip_text(""); expcamscene->set_tooltip_text(""); PQFrame->set_tooltip_text(""); modecam->set_tooltip_text(""); qtoj->set_tooltip_text(""); logcie->set_tooltip_text(""); - logcieq->set_tooltip_text(""); jabcie->set_tooltip_text(""); adapjzcie->set_tooltip_text(""); jz100->set_tooltip_text(""); @@ -9369,12 +9534,11 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) pqremap->set_tooltip_text(""); pqremapcam16->set_tooltip_text(""); Autograycie->set_tooltip_text(""); - forcejz->set_tooltip_text(""); sourceGraycie->set_tooltip_text(""); sourceabscie->set_tooltip_text(""); cie1Frame->set_tooltip_text(""); - sigmoidFrame->set_tooltip_text(""); - sigmoidjzFrame->set_tooltip_text(""); +// sigmoidFrame->set_tooltip_text(""); +// sigmoidjzFrame->set_tooltip_text(""); contlcie->set_tooltip_text(""); contqcie->set_tooltip_text(""); contthrescie->set_tooltip_text(""); @@ -9388,7 +9552,6 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) targetGraycie->set_tooltip_text(""); detailcie->set_tooltip_text(""); catadcie->set_tooltip_text(""); - // cie2Frame->set_tooltip_text(""); expcamviewing->set_tooltip_text(""); sensicie->set_tooltip_text(""); CCmaskcieshape->setTooltip(""); @@ -9422,11 +9585,14 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) midtcie->set_tooltip_text(""); smoothcie->set_tooltip_text(""); slopesmo->set_tooltip_text(""); - smoothciemet->set_tooltip_text(""); + smoothFrame->set_tooltip_text(""); + + // smoothciemet->set_tooltip_text(""); whitescie->set_tooltip_text(""); blackscie->set_tooltip_text(""); - normcie->set_tooltip_text(""); - sigmoidblcie->set_tooltip_text(""); + normcie12->set_tooltip_text(""); + sigmoidblcie12->set_tooltip_text(""); + sigmoidbljzcie12->set_tooltip_text(""); catBox->set_tooltip_text(""); expprecam->set_tooltip_text(""); wprimBox->set_tooltip_text(""); @@ -9442,11 +9608,11 @@ void Locallabcie::disableListener() { LocallabTool::disableListener(); AutograycieConn.block(true); - forcejzConn.block(true); - forcebwConn.block(true); + sigybjz12Conn.block(true); qtojConn.block(true); jabcieConn.block(true); comprcieautoconn.block(true); + normcie12conn.block(true); normcieconn.block(true); expprecamconn.block(true); gamutcieconn.block(true); @@ -9460,16 +9626,25 @@ void Locallabcie::disableListener() satcieconn.block(true); logcieqconn.block(true); smoothcieconn.block(true); + smoothcielnkconn.block(true); + smoothcietrcconn.block(true); + smoothcietrcrelconn.block(true); smoothcieybconn.block(true); smoothcielumconn.block(true); + smoothciehighconn.block(true); logjzconn.block(true); + sigjz12conn.block(true); sigjzconn.block(true); + forcebwconn.block(true); + sigq12conn.block(true); sigqconn.block(true); chjzcieconn.block(true); sursourcieconn.block(true); surroundcieconn.block(true); modecieconn.block(true); modecamconn.block(true); + modeQJconn.block(true); + bwevMethod12Conn.block(true); bwevMethodConn.block(true); toneMethodcieConn.block(true); toneMethodcieConn2.block(true); @@ -9484,11 +9659,11 @@ void Locallabcie::enableListener() { LocallabTool::enableListener(); AutograycieConn.block(false); - forcejzConn.block(false); - forcebwConn.block(false); + sigybjz12Conn.block(false); qtojConn.block(false); jabcieConn.block(false); comprcieautoconn.block(false); + normcie12conn.block(false); normcieconn.block(false); expprecamconn.block(false); gamutcieconn.block(false); @@ -9502,16 +9677,25 @@ void Locallabcie::enableListener() satcieconn.block(false); logcieqconn.block(false); smoothcieconn.block(false); + smoothcielnkconn.block(false); + smoothcietrcconn.block(false); + smoothcietrcrelconn.block(false); smoothcieybconn.block(false); smoothcielumconn.block(false); + smoothciehighconn.block(false); logjzconn.block(false); + sigjz12conn.block(false); sigjzconn.block(false); + forcebwconn.block(false); + sigq12conn.block(false); sigqconn.block(false); chjzcieconn.block(false); sursourcieconn.block(false); surroundcieconn.block(false); modecieconn.block(false); modecamconn.block(false); + modeQJconn.block(false); + bwevMethod12Conn.block(false); bwevMethodConn.block(false); toneMethodcieConn.block(false); toneMethodcieConn2.block(false); @@ -9569,7 +9753,6 @@ void Locallabcie::enacieMaskallChanged2() { const LocallabParams::LocallabSpot defSpot; - // if (modecam->get_active_row_number() == 1) { if(!enacieMaskall->get_active()) { lapmaskcie->setValue(defSpot.lapmaskcie); gammaskcie->setValue(defSpot.gammaskcie); @@ -9612,7 +9795,6 @@ void Locallabcie::enacieMaskallChanged2() mask2cieCurveEditorGwav->show(); wavFramecie->show(); } - // } } void Locallabcie::enacieMaskallChanged() @@ -9693,6 +9875,12 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE modecam->set_active(1); } + if (spot.modeQJ == "511") { + modeQJ->set_active(0); + } else if (spot.modeQJ == "512") { + modeQJ->set_active(1); + } + if (spot.modecie == "com") { modecie->set_active(0); } else if (spot.modecie == "tm") { @@ -9720,8 +9908,7 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE } Autograycie->set_active(spot.Autograycie); - forcejz->set_active(spot.forcejz); - forcebw->set_active(spot.forcebw); + sigybjz12->set_active(spot.sigybjz12); qtoj->set_active(spot.qtoj); sourceGraycie->setValue(spot.sourceGraycie); comprcieauto->set_active(spot.comprcieauto); @@ -9740,6 +9927,8 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE smoothciemet->set_active(3); } else if (spot.smoothciemet == "level") { smoothciemet->set_active(4); + } else if (spot.smoothciemet == "sigm") { + smoothciemet->set_active(5); } @@ -9824,6 +10013,7 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE } + normcie12->set_active(spot.normcie12); normcie->set_active(spot.normcie); gamutcie->set_active(spot.gamutcie); bwcie->set_active(spot.bwcie); @@ -9832,35 +10022,56 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE satcie->set_active(spot.satcie); logcieq->set_active(spot.logcieq); smoothcie->set_active(spot.smoothcie); + smoothcielnk->set_active(spot.smoothcielnk); + smoothcietrc->set_active(spot.smoothcietrc); + smoothcietrcrel->set_active(spot.smoothcietrcrel); smoothcieyb->set_active(spot.smoothcieyb); smoothcielum->set_active(spot.smoothcielum); + smoothciehigh->set_active(spot.smoothciehigh); logjz->set_active(spot.logjz); + sigjz12->set_active(spot.sigjz12); sigjz->set_active(spot.sigjz); + forcebw->set_active(spot.forcebw); + sigq12->set_active(spot.sigq12); sigq->set_active(spot.sigq); chjzcie->set_active(true);//force to true to avoid other mode sourceabscie->setValue(spot.sourceabscie); jabcie->set_active(spot.jabcie); jabcieChanged(); modecamChanged(); + modeQJChanged(); sursourcieChanged(); + bwevMethod12Changed(); bwevMethodChanged(); + normcie12Changed(); normcieChanged(); expprecamChanged(); gamutcieChanged(); bwcieChanged(); sigcieChanged(); comprcieautoChanged(); + sigq12Changed(); sigqChanged(); logcieChanged(); satcieChanged(); logcieqChanged(); smoothcieChanged(); + smoothcielnkChanged(); + smoothcietrcChanged(); + smoothcietrcrelChanged(); smoothcieybChanged(); smoothcielumChanged(); + smoothciehighChanged(); primMethodChanged(); illMethodChanged(); smoothciemetChanged(); + if (spot.bwevMethod12 == "sigQ") { + bwevMethod12->set_active(0); + } else if (spot.bwevMethod12 == "slop") { + bwevMethod12->set_active(1); + } + if (spot.bwevMethod == "none") { bwevMethod->set_active(0); } else if (spot.bwevMethod == "sig") { @@ -9934,25 +10145,43 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE blackEvjz->setValue(spot.blackEvjz); whiteEvjz->setValue(spot.whiteEvjz); targetjz->setValue(spot.targetjz); + sigmoidldacie12->setValue(spot.sigmoidldacie12); + sigmoidthcie12->setValue(spot.sigmoidthcie12); + sigmoidblcie12->setValue(spot.sigmoidblcie12); + sigmoidldacie->setValue(spot.sigmoidldacie); sigmoidthcie->setValue(spot.sigmoidthcie); - sigmoidsenscie->setValue(spot.sigmoidsenscie); sigmoidblcie->setValue(spot.sigmoidblcie); + sigmoidsenscie->setValue(spot.sigmoidsenscie); + comprcie->setValue(spot.comprcie); strcielog->setValue(spot.strcielog); comprcieth->setValue(spot.comprcieth); gamjcie->setValue(spot.gamjcie); + smoothcieth->setValue(spot.smoothcieth); slopjcie->setValue(spot.slopjcie); + contsig->setValue(spot.contsig); + skewsig->setValue(spot.skewsig); + whitsig->setValue(spot.whitsig); slopesmo->setValue(spot.slopesmo); + slopesmoq->setValue(spot.slopesmoq); slopesmor->setValue(spot.slopesmor); slopesmog->setValue(spot.slopesmog); slopesmob->setValue(spot.slopesmob); + kslopesmor->setValue(spot.kslopesmor); + kslopesmog->setValue(spot.kslopesmog); + kslopesmob->setValue(spot.kslopesmob); midtcie->setValue(spot.midtcie); whitescie->setValue(spot.whitescie); blackscie->setValue(spot.blackscie); + sigmoidldajzcie12->setValue(spot.sigmoidldajzcie12); + sigmoidthjzcie12->setValue(spot.sigmoidthjzcie12); + sigmoidbljzcie12->setValue(spot.sigmoidbljzcie12); + sigmoidldajzcie->setValue(spot.sigmoidldajzcie); sigmoidthjzcie->setValue(spot.sigmoidthjzcie); sigmoidbljzcie->setValue(spot.sigmoidbljzcie); + contqcie->setValue(spot.contqcie); contsigqcie->setValue(spot.contsigqcie); colorflcie->setValue(spot.colorflcie); @@ -10010,7 +10239,6 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE toolcie->set_active(spot.toolcie); fftcieMask->set_active(spot.fftcieMask); contcie->setValue(spot.contcie); -// updateColorGUI3(); blurcie->setValue(spot.blurcie); LLmaskcieshapewav->setCurve(spot.LLmaskciecurvewav); csThresholdcie->setValue(spot.csthresholdcie); @@ -10023,6 +10251,8 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE updateGUIToMode(static_cast(complexity->get_active_row_number())); // Update Ciecam GUI updatecieGUI(); + + updatecielnkGUI(); } void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) @@ -10045,6 +10275,12 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.modecam = "jz"; } + if (modeQJ->get_active_row_number() == 0) { + spot.modeQJ = "511"; + } else if (modeQJ->get_active_row_number() == 1) { + spot.modeQJ = "512"; + } + if (modecie->get_active_row_number() == 0) { spot.modecie = "com"; } else if (modecie->get_active_row_number() == 1) { @@ -10092,13 +10328,13 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.labgridcieMy); spot.Autograycie = Autograycie->get_active(); - spot.forcejz = forcejz->get_active(); - spot.forcebw = forcebw->get_active(); + spot.sigybjz12 = sigybjz12->get_active(); spot.qtoj = qtoj->get_active(); spot.jabcie = jabcie->get_active(); spot.sourceGraycie = sourceGraycie->getValue(); spot.sourceabscie = sourceabscie->getValue(); spot.comprcieauto = comprcieauto->get_active(); + spot.normcie12 = normcie12->get_active(); spot.normcie = normcie->get_active(); spot.gamutcie = gamutcie->get_active(); spot.bwcie = bwcie->get_active(); @@ -10107,11 +10343,18 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.satcie = satcie->get_active(); spot.logcieq = logcieq->get_active(); spot.smoothcie = smoothcie->get_active(); + spot.smoothcielnk = smoothcielnk->get_active(); + spot.smoothcietrc = smoothcietrc->get_active(); + spot.smoothcietrcrel = smoothcietrcrel->get_active(); spot.smoothcieyb = smoothcieyb->get_active(); spot.smoothcielum = smoothcielum->get_active(); + spot.smoothciehigh = smoothciehigh->get_active(); spot.logjz = logjz->get_active(); spot.sigjz = sigjz->get_active(); + spot.forcebw = forcebw->get_active(); + spot.sigjz12 = sigjz12->get_active(); spot.chjzcie = chjzcie->get_active(); + spot.sigq12 = sigq12->get_active(); spot.sigq = sigq->get_active(); if (sursourcie->get_active_row_number() == 0) { @@ -10126,12 +10369,19 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.sursourcie = "disacie"; } + if (bwevMethod12->get_active_row_number() == 0) { + spot.bwevMethod12 = "sigQ"; + } else if (bwevMethod12->get_active_row_number() == 1) { + spot.bwevMethod12 = "slop"; + } + if (bwevMethod->get_active_row_number() == 0) { spot.bwevMethod = "none"; } else if (bwevMethod->get_active_row_number() == 1) { spot.bwevMethod = "sig"; } + if (smoothciemet->get_active_row_number() == 0) { spot.smoothciemet = "none"; } else if (smoothciemet->get_active_row_number() == 1) { @@ -10142,7 +10392,9 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.smoothciemet = "gamnorol"; } else if (smoothciemet->get_active_row_number() == 4) { spot.smoothciemet = "level"; - } + } else if (smoothciemet->get_active_row_number() == 5) { + spot.smoothciemet = "sigm"; + } if (illMethod->get_active_row_number() == 0) { spot.illMethod = "d41"; @@ -10261,25 +10513,43 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.blackEvjz = blackEvjz->getValue(); spot.whiteEvjz = whiteEvjz->getValue(); spot.targetjz = targetjz->getValue(); + spot.sigmoidldacie12 = sigmoidldacie12->getValue(); + spot.sigmoidthcie12 = sigmoidthcie12->getValue(); + spot.sigmoidblcie12 = sigmoidblcie12->getValue(); + spot.sigmoidldacie = sigmoidldacie->getValue(); spot.sigmoidthcie = sigmoidthcie->getValue(); - spot.sigmoidsenscie = sigmoidsenscie->getValue(); spot.sigmoidblcie = sigmoidblcie->getValue(); + spot.sigmoidsenscie = sigmoidsenscie->getValue(); + spot.comprcie = comprcie->getValue(); spot.strcielog = strcielog->getValue(); spot.comprcieth = comprcieth->getValue(); spot.gamjcie = gamjcie->getValue(); + spot.smoothcieth = smoothcieth->getValue(); spot.slopjcie = slopjcie->getValue(); + spot.contsig = contsig->getValue(); + spot.skewsig = skewsig->getValue(); + spot.whitsig = whitsig->getValue(); spot.slopesmo = slopesmo->getValue(); + spot.slopesmoq = slopesmoq->getValue(); spot.slopesmor = slopesmor->getValue(); spot.slopesmog = slopesmog->getValue(); spot.slopesmob = slopesmob->getValue(); + spot.kslopesmor = kslopesmor->getValue(); + spot.kslopesmog = kslopesmog->getValue(); + spot.kslopesmob = kslopesmob->getValue(); spot.midtcie = midtcie->getIntValue(); spot.whitescie = whitescie->getIntValue(); spot.blackscie = blackscie->getIntValue(); + spot.sigmoidldajzcie12 = sigmoidldajzcie12->getValue(); + spot.sigmoidthjzcie12 = sigmoidthjzcie12->getValue(); + spot.sigmoidbljzcie12 = sigmoidbljzcie12->getValue(); + spot.sigmoidldajzcie = sigmoidldajzcie->getValue(); spot.sigmoidthjzcie = sigmoidthjzcie->getValue(); spot.sigmoidbljzcie = sigmoidbljzcie->getValue(); + spot.contqcie = contqcie->getValue(); spot.contsigqcie = contsigqcie->getValue(); spot.colorflcie = colorflcie->getValue(); @@ -10409,7 +10679,7 @@ void Locallabcie::updatesigloc(const float cont_sig, const float light_sig) -void Locallabcie::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 Locallabcie::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) { nextrx = r_x; nextry = r_y; @@ -10435,7 +10705,7 @@ void Locallabcie::updateiPrimloc(const float r_x, const float r_y, const float g nextmy = 1.81818f * (nextmy + 0.1f) - 1.f; idle_register.add( - [this, r_x, r_y, g_x, g_y, b_x, b_y]() -> bool { + [this, r_x, r_y, g_x, g_y, b_x, b_y, slg, lkg]() -> bool { GThreadLock lock; disableListener(); @@ -10446,10 +10716,19 @@ void Locallabcie::updateiPrimloc(const float r_x, const float r_y, const float g bluxl->setValue(b_x); bluyl->setValue(b_y); labgridcie->setParams(nextrx, nextry, nextbx, nextby, nextgx, nextgy, nextwx, nextwy, nextmx, nextmy, false); + /* + if(lkg) { + slopesmor->setValue(slg); + slopesmob->setValue(slg); + adjusterChanged(slopesmor, 0.); + adjusterChanged(slopesmob, 0.); + + } + */ enableListener(); return false; } - ); + ); } @@ -10468,6 +10747,7 @@ void Locallabcie::updateAutocompute(const float blackev, const float whiteev, co whiteEvjz->setValue(whiteev); sourceGraycie->setValue(sourceg); sourceabscie->setValue(sourceab); + pqremap->setValue(sourceab); float sour = std::min((double) sourceab, 10000.) / 10000.f; float pal = std::max(10. * (double) sqrt(sour), 1.5); adapjzcie->setValue(pal);//max = 10 and min 1.5 @@ -10519,32 +10799,17 @@ void Locallabcie::AutograycieChanged() } } -void Locallabcie::forcejzChanged() -{ - - if (isLocActivated && exp->getEnabled()) { - if (listener) { - if (forcejz->get_active()) { - listener->panelChanged(Evlocallabforcejz, - M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); - } else { - listener->panelChanged(Evlocallabforcejz, - M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); - } - } - } -} -void Locallabcie::forcebwChanged() +void Locallabcie::sigybjz12Changed() { if (isLocActivated && exp->getEnabled()) { if (listener) { - if (forcebw->get_active()) { - listener->panelChanged(Evlocallabforcebw, + if (sigybjz12->get_active()) { + listener->panelChanged(Evlocallabsigybjz12, M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } else { - listener->panelChanged(Evlocallabforcebw, + listener->panelChanged(Evlocallabsigybjz12, M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } } @@ -10598,15 +10863,28 @@ void Locallabcie::comprcieautoChanged() } } -void Locallabcie::normcieChanged() +void Locallabcie::normcie12Changed() { - if (normcie->get_active()) { - sigmoidblcie->set_sensitive(true); - } else { - sigmoidblcie->set_sensitive(false); + + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (normcie12->get_active()) { + listener->panelChanged(Evlocallabnormcie12, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabnormcie12, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } } +} + +void Locallabcie::normcieChanged() +{ + + if (isLocActivated && exp->getEnabled()) { if (listener) { if (normcie->get_active()) { @@ -10621,7 +10899,6 @@ void Locallabcie::normcieChanged() } - void Locallabcie::gamutcieChanged() { if (gamutcie->get_active()) { @@ -10704,10 +10981,10 @@ void Locallabcie::logcieChanged() if (isLocActivated && exp->getEnabled()) { if (listener) { if (logcie->get_active()) { - listener->panelChanged(Evlocallablogcie, + listener->panelChanged(Evlocallablogcie_12, M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } else { - listener->panelChanged(Evlocallablogcie, + listener->panelChanged(Evlocallablogcie_12, M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } } @@ -10768,6 +11045,70 @@ void Locallabcie::smoothcieChanged() } } +void Locallabcie::updatecielnkGUI() +{ + + if(smoothcielnk->get_active()) { + slopesmob->setValue(slopesmog->getValue()); + slopesmor->setValue(slopesmog->getValue()); + + } else { + // + } + +} + +void Locallabcie::smoothcielnkChanged() +{ + updatecielnkGUI(); + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (smoothcielnk->get_active()) { + listener->panelChanged(Evlocallabsmoothcielnk, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabsmoothcielnk, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + +void Locallabcie::smoothcietrcChanged() +{ + if (smoothcietrc->get_active()) { + smoothcieth->show(); + } else { + smoothcieth->hide(); + } + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (smoothcietrc->get_active()) { + listener->panelChanged(Evlocallabsmoothcietrc, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabsmoothcietrc, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + +void Locallabcie::smoothcietrcrelChanged() +{ + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (smoothcietrcrel->get_active()) { + listener->panelChanged(Evlocallabsmoothcietrcrel, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabsmoothcietrcrel, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + void Locallabcie::smoothcieybChanged() { if (isLocActivated && exp->getEnabled()) { @@ -10798,6 +11139,27 @@ void Locallabcie::smoothcielumChanged() } } +void Locallabcie::smoothciehighChanged() +{ + if (smoothciehigh->get_active()) { + smoothcieth->show(); + } else { + smoothcieth->hide(); + } + + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (smoothciehigh->get_active()) { + listener->panelChanged(Evlocallabsmoothciehigh, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabsmoothciehigh, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + void Locallabcie::logjzChanged() { if (isLocActivated && exp->getEnabled()) { @@ -10813,61 +11175,124 @@ void Locallabcie::logjzChanged() } } -void Locallabcie::sigjzChanged() +void Locallabcie::sigjz12Changed() { if (isLocActivated && exp->getEnabled()) { if (listener) { - if (sigjz->get_active()) { - listener->panelChanged(Evlocallabsigjz, + if (sigjz12->get_active()) { + listener->panelChanged(Evlocallabsigjz12, M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } else { - listener->panelChanged(Evlocallabsigjz, + listener->panelChanged(Evlocallabsigjz12, M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } } } } -void Locallabcie::sigqChanged() +void Locallabcie::forcebwChanged() { - contsigqcie->hide(); - lightsigqcie->hide(); - if (isLocActivated && exp->getEnabled()) { if (listener) { - if (sigq->get_active()) { - listener->panelChanged(Evlocallabsigq, + if (forcebw->get_active()) { + listener->panelChanged(Evlocallabforcebw, M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } else { - listener->panelChanged(Evlocallabsigq, + listener->panelChanged(Evlocallabforcebw, M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } } } } -void Locallabcie::chjzcieChanged() +void Locallabcie::sigjzChanged() { - if (chjzcie->get_active()) { - thrhjzcie->set_sensitive(true); - } else { - thrhjzcie->set_sensitive(false); - } - if (isLocActivated && exp->getEnabled()) { if (listener) { - if (chjzcie->get_active()) { - listener->panelChanged(Evlocallabchjzcie, + if (sigjz->get_active()) { + listener->panelChanged(Evlocallabsigjz, M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } else { - listener->panelChanged(Evlocallabchjzcie, + listener->panelChanged(Evlocallabsigjz, M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); } } } } -void Locallabcie::modecamChanged() + +void Locallabcie::sigq12Changed() +{ + contsigqcie->hide(); + lightsigqcie->hide(); + + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (sigq12->get_active()) { + listener->panelChanged(Evlocallabsigq_12, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabsigq_12, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + +void Locallabcie::sigqChanged() +{ + + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (sigq->get_active()) { + listener->panelChanged(Evlocallabsigq, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabsigq, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + + +void Locallabcie::chjzcieChanged() +{ + if (chjzcie->get_active()) { + thrhjzcie->set_sensitive(true); + } else { + thrhjzcie->set_sensitive(false); + } + + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (chjzcie->get_active()) { + listener->panelChanged(Evlocallabchjzcie, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabchjzcie, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + +void Locallabcie::modeQJChanged() +{ + qjmodall(); + + if (isLocActivated && exp->getEnabled()) { + + if (listener) { + listener->panelChanged(EvlocallabmodeQJ, + modeQJ->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + +} + + +void Locallabcie::modecamChanged() { const int mode = complexity->get_active_row_number(); contsigqcie->hide(); @@ -10884,9 +11309,8 @@ void Locallabcie::modecamChanged() PQFrame->show(); logjzFrame->show(); bevwevFrame->show(); - sigmoidjzFrame->show(); - sigmoidFrame->hide(); - forcejz->hide(); + qjmodjz(); + sigmoidFrame12->hide(); expprecam->hide(); expcam16->hide(); expcamviewing->hide(); @@ -10902,6 +11326,8 @@ void Locallabcie::modecamChanged() adapjzcie->hide(); jz100->hide(); pqremap->hide(); + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); if (mode == Expert) { pqremapcam16->show(); @@ -10915,13 +11341,12 @@ void Locallabcie::modecamChanged() if (modecam->get_active_row_number() == 0) { bevwevFrame->show(); - sigmoidFrame->show(); + sigmoidFrame12->show(); expprecam->show(); - + qjmodcam(); } - sigmoidjzFrame->hide(); - forcejz->hide(); + sigmoidjzFrame12->hide(); catadcie->show(); } @@ -10937,6 +11362,8 @@ void Locallabcie::modecamChanged() surHBoxcie->show(); lapmaskcie->setValue(defSpot.lapmaskcie); enacieMaskallChanged2(); + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); if (mode == Expert) { exprecovcie->show(); @@ -10944,6 +11371,7 @@ void Locallabcie::modecamChanged() expgradcie->hide(); lapmaskcie->hide(); lapmaskcie->setValue(defSpot.lapmaskcie); + qjmodjz(); } @@ -10951,6 +11379,8 @@ void Locallabcie::modecamChanged() exprecovcie->show(); expgradcie->show(); expmaskcie->show(); + qjmodcam(); + } @@ -10963,16 +11393,19 @@ void Locallabcie::modecamChanged() jabcie->hide(); PQFrame->hide(); logjzFrame->hide(); - sigmoidjzFrame->hide(); - sigmoidFrame->hide(); + sigmoidjzFrame12->hide(); + sigmoidFrame12->hide(); bevwevFrame->hide(); if (modecam->get_active_row_number() == 0) { bevwevFrame->show(); - sigmoidFrame->show(); + sigmoidFrame12->show(); + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); + qjmodcam(); + } - forcejz->hide(); if (mode == Expert) { pqremapcam16->show(); @@ -11007,10 +11440,11 @@ void Locallabcie::modecamChanged() if (modecam->get_active_row_number() == 0) { bevwevFrame->show(); - sigmoidjzFrame->hide(); + sigmoidjzFrame12->hide(); expprecam->show(); lapmaskcie->show(); - + sigmoidjzFrame->hide(); + qjmodcam(); } @@ -11018,12 +11452,11 @@ void Locallabcie::modecamChanged() targetGraycie->hide(); targabscie->hide(); surrHBoxcie->hide(); - forcejz->hide(); pqremapcam16->hide(); PQFrame->show(); logjzFrame->show(); - sigmoidjzFrame->show(); - sigmoidFrame->hide(); + sigmoidjzFrame12->show(); + sigmoidFrame12->hide(); bevwevFrame->show(); catadcie->hide(); expcamviewing->hide(); @@ -11032,6 +11465,7 @@ void Locallabcie::modecamChanged() lapmaskcie->hide(); lapmaskcie->setValue(defSpot.lapmaskcie); enacieMaskallChanged2(); + qjmodjz(); if (chjzcie->get_active()) { thrhjzcie->set_sensitive(true); @@ -11042,7 +11476,7 @@ void Locallabcie::modecamChanged() } - + updatecieGUI(); } if (modecam->get_active_row_number() == 0) { @@ -11064,6 +11498,10 @@ void Locallabcie::modecamChanged() } else { pqremapcam16->hide(); } + + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); + qjmodcam(); } contsigqcie->hide(); @@ -11174,31 +11612,89 @@ void Locallabcie::illMethodChanged() void Locallabcie::smoothciemetChanged() { if(smoothciemet->get_active_row_number() == 3) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->show(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcieyb->hide(); + smoothcieth->hide(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); + } else if(smoothciemet->get_active_row_number() == 4) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->hide(); slopesmor->show(); slopesmog->show(); slopesmob->show(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcielum->show(); + smoothciehigh->show(); + smoothcielnk->show(); smoothcieyb->show(); + if (smoothciehigh->get_active()) { + smoothcieth->show(); + } else { + smoothcieth->hide(); + } + + } else if(smoothciemet->get_active_row_number() >= 5) { + contsig->show(); + skewsig->show(); + whitsig->hide(); + smoothcie->hide(); + slopesmo->hide(); + slopesmor->hide(); + slopesmog->hide(); + slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); + smoothcieyb->hide(); + smoothcieth->hide(); + smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); } else { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); slopesmo->hide(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); smoothcie->hide(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } - + updatecieGUI(); if (listener) { listener->panelChanged(Evlocallabsmoothciemet, smoothciemet->get_active_text()); } @@ -11251,40 +11747,51 @@ void Locallabcie::primMethodChanged() } -void Locallabcie::bwevMethodChanged() +void Locallabcie::bwevMethod12Changed() { const LocallabParams::LocallabSpot defSpot; const int mode = complexity->get_active_row_number(); - if (bwevMethod->get_active_row_number() == 2) {// && sigcie->get_active()) { - comprcie->set_sensitive(true); - comprcieth->set_sensitive(true); - comprcieauto->set_sensitive(true); - comprcieauto->set_active(true); - - if (mode == Simple) { - comprcieth->set_sensitive(false); - comprcieauto->set_sensitive(false); + if (bwevMethod12->get_active_row_number() == 0) {//sigmoid Q + slopesmoq->hide(); + sigmoidldacie12->show(); + sigmoidthcie12->show(); + sigmoidblcie12->hide(); + if(mode == Expert) { + sigmoidblcie12->show(); } - - } else { - comprcieth->set_sensitive(false); - comprcieauto->set_sensitive(false); + + } + if (bwevMethod12->get_active_row_number() == 1) {//Slope based Q + slopesmoq->show(); + sigmoidldacie12->hide(); + sigmoidthcie12->hide(); + sigmoidblcie12->hide(); } - if (bwevMethod->get_active_row_number() == 2) { - comprcie->setValue(defSpot.comprcie);//to test + if (isLocActivated && exp->getEnabled()) { + if (listener) { + listener->panelChanged(EvlocallabbwevMethod12, + bwevMethod12->get_active_text()); + } } +} +void Locallabcie::bwevMethodChanged() +{ + const LocallabParams::LocallabSpot defSpot; + if (isLocActivated && exp->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabbwevMethod, - bwevMethod->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")"); + bwevMethod->get_active_text()); } } } + + void Locallabcie::surroundcieChanged() { if (isLocActivated && exp->getEnabled()) { @@ -11300,13 +11807,12 @@ void Locallabcie::guijzczhz() expcamscene->hide(); cie1Frame->hide(); expcam16->hide(); - forcejz->hide(); pqremapcam16->hide(); PQFrame->hide(); logjzFrame->hide(); bevwevFrame->hide(); - sigmoidjzFrame->hide(); - sigmoidFrame->hide(); + sigmoidjzFrame12->hide(); + sigmoidFrame12->hide(); catadcie->hide(); expcamviewing->hide(); maskusablecie->hide(); @@ -11319,13 +11825,83 @@ void Locallabcie::guijzczhz() lapmaskcie->hide(); } +void Locallabcie::qjmodcam() // enable - disable function 5.11 or 5.12 Q Cam16 tone mapper brightness +{ + const int mode = complexity->get_active_row_number(); + if(mode != Simple) { + if (modeQJ->get_active_row_number() == 1) { //512 + sigmoidFrame12->show(); + sigmoidFrame->hide(); + logcieq->hide(); + logcieq->set_active(false); + + if(sigq->get_active()) { + sigq->set_active(false); + } + } else { //511 + sigmoidFrame12->hide(); + sigmoidFrame->show(); + if(sigq12->get_active()) { + sigq12->set_active(false); + } + if(mode == Expert){ + logcieq->show(); + } + + } + } else {//nothing in basic (Simple) + sigmoidFrame12->hide(); + sigmoidFrame->hide(); + logcieq->hide(); + logcieq->set_active(false); + } + +} + + +void Locallabcie::qjmodjz() // enable - disable function 5.11 or 5.12 J Jz tone mapper brightness +{ + const int mode = complexity->get_active_row_number(); + if(mode == Expert) { + + if (modeQJ->get_active_row_number() == 1) { + sigmoidjzFrame12->show(); + sigmoidjzFrame->hide(); + if(sigjz->get_active()) { + sigjz->set_active(false); + } + + } else { + sigmoidjzFrame12->hide(); + sigmoidjzFrame->show(); + if(sigjz12->get_active()) { + sigjz12->set_active(false); + } + } + } else {//nothing in basic (Simple) and Standard + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); + } +} + +void Locallabcie::qjmodall() // enable all Q and J tone mapper 5.11 5.12 +{ + if (modecam->get_active_row_number() == 1) {// Jz + qjmodjz(); + } + + if (modecam->get_active_row_number() == 0) {// Cam16 + qjmodcam(); + } + +} void Locallabcie::updateGUIToMode(const modeType new_type) { const LocallabParams::LocallabSpot defSpot; - + switch (new_type) { case Simple: catadcie->show(); @@ -11340,17 +11916,15 @@ void Locallabcie::updateGUIToMode(const modeType new_type) contqcie->hide(); colorflcie->hide(); surrHBoxcie->show(); - expLcie->hide(); + expLcie->show(); surHBoxcie->show(); sourceabscie->show(); targabscie->show(); - detailcie->show(); //hide + detailcie->show(); jabcie->hide(); modeHBoxcie->hide(); sensicie->show(); reparcie->show(); - sigmoidsenscie->hide(); - sigmoidnormFrame->hide(); pqremapcam16->hide(); expjz->hide(); jzFrame->hide(); @@ -11361,7 +11935,6 @@ void Locallabcie::updateGUIToMode(const modeType new_type) targetGraycie->show(); targabscie->show(); surrHBoxcie->show(); - forcejz->hide(); sourceGraycie->show(); expcamscene->show(); exprecovcie->hide(); @@ -11382,57 +11955,132 @@ void Locallabcie::updateGUIToMode(const modeType new_type) comprcieth->hide(); comprcieauto->hide(); comprBox->show(); - slopesmo->hide(); - slopesmor->hide(); - slopesmog->hide(); - slopesmob->hide(); + whitsig->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->hide(); smoothcielum->hide(); smoothcieyb->hide(); - + smoothciehigh->hide(); + smoothcielnk->hide(); + sigmoidblcie12->hide(); if (modecam->get_active_row_number() == 0) { bevwevFrame->show(); - sigmoidFrame->hide(); //show + sigmoidFrame12->hide(); expprecam->show(); primillFrame->hide(); expmaskcie->hide(); exprecovcie->hide(); expgradcie->hide(); + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); + sigmoidFrame12->hide(); + sigmoidFrame->hide(); + if(smoothciemet->get_active_row_number() == 3) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->show(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } else if(smoothciemet->get_active_row_number() == 4) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->hide(); slopesmor->show(); slopesmog->show(); slopesmob->show(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); - smoothcielum->show(); - smoothcieyb->show(); + smoothcielum->hide(); + smoothcielnk->show(); + smoothciehigh->show(); + if (smoothciehigh->get_active()) { + smoothcieth->show(); + } else { + smoothcieth->hide(); + } + smoothcieyb->hide(); + } else if(smoothciemet->get_active_row_number() >= 5) { + slopesmo->hide(); + slopesmor->hide(); + slopesmog->hide(); + slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); + smoothcieyb->hide(); + smoothcieth->hide(); + smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); + contsig->show(); + smoothcie->hide(); + skewsig->show(); + whitsig->hide(); + } else { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); slopesmo->hide(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); smoothcie->hide(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } + } else { + slopesmo->hide(); + contsig->hide(); + skewsig->hide(); + slopesmor->hide(); + slopesmog->hide(); + slopesmob->hide(); + smoothcieth->hide(); } if (modecam->get_active_row_number() == 1) { - // cieFrame->hide(); guijzczhz(); lapmaskcie->setValue(defSpot.lapmaskcie); enacieMaskallChanged2(); enacieMaskall->hide(); } + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); contsigqcie->hide(); lightsigqcie->hide(); @@ -11448,28 +12096,40 @@ void Locallabcie::updateGUIToMode(const modeType new_type) catadcie->show(); saturlcie->show(); rstprotectcie->show(); - chromlcie->show();//hide - huecie->show();//hide + chromlcie->show(); + huecie->show(); lightlcie->show(); - lightqcie->show();//hide + lightqcie->show(); contlcie->show(); contthrescie->show(); - contqcie->show();//hide + contqcie->show(); colorflcie->hide(); surrHBoxcie->show(); - expLcie->hide(); + expLcie->show(); surHBoxcie->show(); sourceabscie->show(); targabscie->show(); - detailcie->show();//hide + detailcie->show(); jabcie->hide(); modeHBoxcie->hide(); sensicie->show(); reparcie->show(); - sigmoidblcie->show(); - sigmoidsenscie->hide(); + if (bwevMethod12->get_active_row_number() == 0) {//sigmoid Q + slopesmoq->hide(); + sigmoidldacie12->show(); + sigmoidthcie12->show(); + sigmoidblcie12->hide(); + + } + if (bwevMethod12->get_active_row_number() == 1) {//Slope based Q + slopesmoq->show(); + sigmoidldacie12->hide(); + sigmoidthcie12->hide(); + sigmoidblcie12->hide(); + } + + sigmoidblcie12->show(); expjz->hide(); - forcejz->hide(); comprcie->show(); strcielog->show(); satcie->show(); @@ -11479,7 +12139,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) whitescie->show(); blackscie->show(); - logcieFrame->hide(); + logcieFrame->show(); comprcieth->show(); comprcieauto->show(); comprBox->show(); @@ -11508,7 +12168,8 @@ void Locallabcie::updateGUIToMode(const modeType new_type) blurFramecie->hide(); wavFramecie->hide(); maskcieHCurveEditorG->hide(); - sigmoidnormFrame->hide(); + sigmoidblcie12->hide(); + if (enacieMask->get_active()) { maskusablecie->show(); @@ -11519,47 +12180,106 @@ void Locallabcie::updateGUIToMode(const modeType new_type) maskunusablecie->show(); } - if (modecam->get_active_row_number() == 0) { + if (modecam->get_active_row_number() == 0 && modeQJ->get_active_row_number() == 1) { bevwevFrame->show(); - sigmoidFrame->show(); + sigmoidFrame12->show(); expprecam->show(); - primillFrame->hide();//show + primillFrame->hide(); enacieMaskall->hide(); - + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); + qjmodcam(); if(smoothciemet->get_active_row_number() == 3) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->show(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } else if(smoothciemet->get_active_row_number() == 4) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->hide(); slopesmor->show(); slopesmog->show(); slopesmob->show(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); - smoothcielum->show(); - smoothcieyb->show(); + smoothcielum->hide(); + smoothciehigh->show(); + smoothcielnk->show(); + smoothcieyb->hide(); + if (smoothciehigh->get_active()) { + smoothcieth->show(); + } else { + smoothcieth->hide(); + } + } else if(smoothciemet->get_active_row_number() >= 5) { + contsig->show(); + skewsig->show(); + whitsig->hide(); + slopesmo->hide(); + slopesmo->hide(); + slopesmor->hide(); + slopesmog->hide(); + slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); + smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); + smoothcieyb->hide(); + smoothcieth->hide(); + smoothcie->hide(); } else { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); slopesmo->hide(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); smoothcie->hide(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } } - if (modecam->get_active_row_number() == 1) { + if (modecam->get_active_row_number() == 1 ) { guijzczhz(); lapmaskcie->setValue(defSpot.lapmaskcie); enacieMaskallChanged2(); enacieMaskall->hide(); - + qjmodjz(); } else { exprecovcie->show(); expgradcie->show(); @@ -11598,7 +12318,18 @@ void Locallabcie::updateGUIToMode(const modeType new_type) targabscie->show(); detailcie->show(); modeHBoxcie->show(); - sigmoidblcie->show(); + if (bwevMethod12->get_active_row_number() == 0) {//sigmoid Q + slopesmoq->hide(); + sigmoidldacie12->show(); + sigmoidthcie12->show(); + sigmoidblcie12->show(); + } + if (bwevMethod12->get_active_row_number() == 1) {//Slope based Q + slopesmoq->show(); + sigmoidldacie12->hide(); + sigmoidthcie12->hide(); + sigmoidblcie12->hide(); + } pqremapcam16->show(); comprcie->show(); strcielog->show(); @@ -11610,9 +12341,6 @@ void Locallabcie::updateGUIToMode(const modeType new_type) logcieFrame->show(); comprcieth->show(); comprcieauto->show(); - sigmoidsenscie->show(); - sigmoidnormFrame->show(); - if (logcieq->get_active()) { satcie->hide(); sigmoidnormFrame->hide(); @@ -11624,7 +12352,6 @@ void Locallabcie::updateGUIToMode(const modeType new_type) targetGraycie->show(); targabscie->show(); surrHBoxcie->show(); - forcejz->hide(); sourceGraycie->show(); expcamscene->show(); exprecovcie->show(); @@ -11657,35 +12384,94 @@ void Locallabcie::updateGUIToMode(const modeType new_type) primillFrame->show(); enacieMaskallChanged2(); enacieMaskall->show(); - + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); + qjmodcam(); if(smoothciemet->get_active_row_number() == 3) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->show(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } else if(smoothciemet->get_active_row_number() == 4) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->hide(); slopesmor->show(); slopesmog->show(); slopesmob->show(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcielum->show(); + smoothciehigh->show(); + smoothcielnk->show(); smoothcieyb->show(); + if (smoothciehigh->get_active()) { + smoothcieth->show(); + } else { + smoothcieth->hide(); + } + } else if(smoothciemet->get_active_row_number() >= 5) { + contsig->show(); + skewsig->show(); + whitsig->show(); + slopesmo->hide(); + slopesmor->hide(); + slopesmog->hide(); + slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); + smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); + smoothcieyb->hide(); + smoothcieth->hide(); + smoothcie->hide(); + } else { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->hide(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcielum->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } } - if (modecam->get_active_row_number() == 1) { + if (modecam->get_active_row_number() == 1 && modeQJ->get_active_row_number() == 1) { jabcie->show(); expjz->show(); jzFrame->show(); @@ -11695,9 +12481,8 @@ void Locallabcie::updateGUIToMode(const modeType new_type) PQFrame->show(); logjzFrame->show(); bevwevFrame->show(); - sigmoidjzFrame->show(); - sigmoidFrame->hide(); - forcejz->hide(); + sigmoidjzFrame12->show(); + sigmoidFrame12->hide(); expprecam->hide(); expgradcie->hide(); expcam16->hide(); @@ -11707,53 +12492,113 @@ void Locallabcie::updateGUIToMode(const modeType new_type) lapmaskcie->setValue(defSpot.lapmaskcie); enacieMaskallChanged2(); enacieMaskall->show(); - + qjmodjz(); } expcamscene->show(); expcamviewing->show(); - if (modecam->get_active_row_number() == 0) { + if (modecam->get_active_row_number() == 0 && modeQJ->get_active_row_number() == 1) { targetGraycie->show(); targabscie->show(); surrHBoxcie->show(); pqremapcam16->show(); PQFrame->hide(); logjzFrame->hide(); - sigmoidjzFrame->hide(); + sigmoidjzFrame12->hide(); bevwevFrame->hide(); bevwevFrame->show(); - sigmoidFrame->show(); + sigmoidFrame12->show(); expprecam->show(); primillFrame->show(); enacieMaskallChanged2(); enacieMaskall->show(); - + sigmoidjzFrame12->hide(); + sigmoidjzFrame->hide(); + qjmodcam(); if(smoothciemet->get_active_row_number() == 3) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->show(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } else if(smoothciemet->get_active_row_number() == 4) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->hide(); slopesmor->show(); slopesmog->show(); slopesmob->show(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcielum->show(); + smoothciehigh->show(); + smoothcielnk->show(); smoothcieyb->show(); + if (smoothciehigh->get_active()) { + smoothcieth->show(); + } else { + smoothcieth->hide(); + } + + } else if(smoothciemet->get_active_row_number() >= 5) { + contsig->show(); + skewsig->show(); + whitsig->show(); + slopesmo->hide(); + slopesmor->hide(); + slopesmog->hide(); + slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); + smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); + smoothcieyb->hide(); + smoothcieth->hide(); + smoothcie->hide(); + } else { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); slopesmo->hide(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); smoothcie->hide(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } } @@ -11766,8 +12611,8 @@ void Locallabcie::updateGUIToMode(const modeType new_type) pqremapcam16->hide(); PQFrame->show(); logjzFrame->show(); - sigmoidjzFrame->show(); - sigmoidFrame->hide(); + sigmoidjzFrame12->show(); + sigmoidFrame12->hide(); bevwevFrame->show(); catadcie->hide(); expcamviewing->hide(); @@ -11789,6 +12634,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) } else { thrhjzcie->set_sensitive(false); } + qjmodjz(); } @@ -11815,7 +12661,11 @@ void Locallabcie::updatecieGUI() contsigqcie->hide(); lightsigqcie->hide(); - + + + + + if (modecie->get_active_row_number() > 0) { sensicie->hide(); @@ -11853,32 +12703,103 @@ void Locallabcie::updatecieGUI() } if(smoothciemet->get_active_row_number() == 3) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->show(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); smoothcie->show(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } else if(smoothciemet->get_active_row_number() == 4) { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); slopesmo->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); slopesmor->show(); slopesmog->show(); slopesmob->show(); smoothcie->show(); - smoothcielum->show(); - smoothcieyb->show(); + if (mode == Expert) { + smoothcielum->show(); + smoothcieyb->show(); + } else { + smoothcielum->hide(); + smoothcieyb->hide(); + } + if (smoothciehigh->get_active()) { + smoothcieth->show(); + } else { + smoothcieth->hide(); + } + + smoothciehigh->show(); + smoothcielnk->show(); + + } else if(smoothciemet->get_active_row_number() >= 5) { + contsig->show(); + skewsig->show(); + whitsig->hide(); + if (mode == Expert) { + whitsig->show(); + } + slopesmo->hide(); + slopesmor->hide(); + slopesmog->hide(); + slopesmob->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); + smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); + smoothcieyb->hide(); + smoothcieth->hide(); + smoothcie->hide(); + } else { + contsig->hide(); + skewsig->hide(); + whitsig->hide(); + kslopesmor->hide(); + kslopesmog->hide(); + kslopesmob->hide(); + smoothcietrc->hide(); + smoothcietrcrel->hide(); slopesmo->hide(); slopesmor->hide(); slopesmog->hide(); slopesmob->hide(); smoothcie->hide(); smoothcielum->hide(); + smoothciehigh->hide(); + smoothcielnk->hide(); smoothcieyb->hide(); + smoothcieth->hide(); } + qjmodcam(); + } + + if (modecam->get_active_row_number() == 1) { + qjmodjz(); } - sourceGraycie->show(); expcamscene->show(); @@ -11920,7 +12841,8 @@ void Locallabcie::updatecieGUI() sensicie->show(); reparcie->show(); } - + + qjmodall(); if (sursourcie->get_active_row_number() == 4) { expcam16->hide(); expcamviewing->hide(); @@ -11953,9 +12875,9 @@ void Locallabcie::updatecieGUI() pqremapcam16->hide(); PQFrame->show(); logjzFrame->show(); - sigmoidjzFrame->show(); + sigmoidjzFrame12->show(); bevwevFrame->show(); - sigmoidFrame->hide(); + sigmoidFrame12->hide(); catadcie->hide(); expprecam->hide(); expcamviewing->hide(); @@ -11967,9 +12889,9 @@ void Locallabcie::updatecieGUI() lapmaskcie->setValue(defSpot.lapmaskcie); enacieMaskallChanged2(); enacieMaskall->show(); - - } - + qjmodjz(); + + } } @@ -11980,18 +12902,17 @@ void Locallabcie::convertParamToSimple() // Disable all listeners disableListener(); - sigmoidblcie->setValue(defSpot.sigmoidblcie); + sigmoidblcie12->setValue(defSpot.sigmoidblcie12); + normcie12->set_active(defSpot.normcie12); normcie->set_active(defSpot.normcie); logcieq->set_active(defSpot.logcieq); - logcie->set_active(defSpot.logcie); blackEvjz->setValue(defSpot.blackEvjz); whiteEvjz->setValue(defSpot.whiteEvjz); whitescie->setValue(defSpot.whitescie); blackscie->setValue(defSpot.blackscie); - bwcie->set_active(defSpot.bwcie); - - sigq->set_active(defSpot.sigq); - //sigq->set_active(defSpot.sigq); + smoothcielum->set_active(defSpot.smoothcielum); + smoothcieyb->set_active(defSpot.smoothcieyb); + sigq12->set_active(defSpot.sigq12); pqremapcam16->setValue(defSpot.pqremapcam16); showmaskcieMethod->set_active(0); enacieMask->set_active(defSpot.enacieMask); @@ -12007,8 +12928,8 @@ void Locallabcie::convertParamToSimple() // Enable all listeners enableListener(); -} +} void Locallabcie::convertParamToNormal() { const LocallabParams::LocallabSpot defSpot; @@ -12016,17 +12937,16 @@ void Locallabcie::convertParamToNormal() // Disable all listeners disableListener(); contqcie->setValue(defSpot.contqcie); - sigmoidblcie->setValue(defSpot.sigmoidblcie); + sigmoidblcie12->setValue(defSpot.sigmoidblcie12); + normcie12->set_active(defSpot.normcie12); normcie->set_active(defSpot.normcie); logcieq->set_active(defSpot.logcieq); - logcie->set_active(defSpot.logcie); - bwcie->set_active(defSpot.bwcie); - //contsigqcie->setValue(defSpot.contsigqcie); + smoothcielum->set_active(defSpot.smoothcielum); + smoothcieyb->set_active(defSpot.smoothcieyb); colorflcie->setValue(defSpot.colorflcie); lightqcie->setValue(defSpot.lightqcie); chromlcie->setValue(defSpot.chromlcie); huecie->setValue(defSpot.huecie); - // detailcie->setValue(defSpot.detailcie); jabcie->set_active(defSpot.jabcie); LHshapejz->setCurve(defSpot.LHcurvejz); CHshapejz->setCurve(defSpot.CHcurvejz); @@ -12034,11 +12954,10 @@ void Locallabcie::convertParamToNormal() shapejz->setCurve(defSpot.jzcurve); shapecz->setCurve(defSpot.czcurve); shapeczjz->setCurve(defSpot.czjzcurve); - shapecie->setCurve(defSpot.ciecurve); - shapecie2->setCurve(defSpot.ciecurve2); lightjzcie->setValue(defSpot.lightjzcie); contjzcie->setValue(defSpot.contjzcie); detailciejz->setValue(defSpot.detailciejz); + sigmoidldajzcie12->setValue(defSpot.sigmoidldajzcie12); sigmoidldajzcie->setValue(defSpot.sigmoidldajzcie); hljzcie->setValue(defSpot.hljzcie); shjzcie->setValue(defSpot.shjzcie); @@ -12049,11 +12968,11 @@ void Locallabcie::convertParamToNormal() strsoftjzcie->setValue(defSpot.strsoftjzcie); thrhjzcie->setValue(defSpot.thrhjzcie); modecie->set_active(0); - //primMethod->set_active(0); catMethod->set_active(0); primMethod->set_active(0);//Prophoto illMethod->set_active(1);//D50 refi->setValue(defSpot.refi); + whitsig->setValue(defSpot.whitsig); pqremapcam16->setValue(defSpot.pqremapcam16); logcieChanged(); @@ -12064,7 +12983,7 @@ void Locallabcie::convertParamToNormal() showmaskcieMethod->set_active(0); enacieMask->set_active(defSpot.enacieMask); logjz->set_active(defSpot.logjz); - sigjz->set_active(defSpot.sigjz); + sigjz12->set_active(defSpot.sigjz12); lapmaskcie->setValue(defSpot.lapmaskcie); enacieMaskallChanged2(); @@ -12081,12 +13000,12 @@ void Locallabcie::convertParamToNormal() fftcieMask->set_active(defSpot.fftcieMask); contcie->setValue(defSpot.contcie); blurcie->setValue(defSpot.blurcie); - sigmoidsenscie->setValue(defSpot.sigmoidsenscie); LLmaskcieshapewav->setCurve(defSpot.LLmaskciecurvewav); csThresholdcie->setValue(defSpot.csthresholdcie); // Enable all listeners enableListener(); + updatecielnkGUI(); } @@ -12103,8 +13022,6 @@ void Locallabcie::setDefaults(const rtengine::procparams::ProcParams* defParams, sourceabscie->setDefault(defSpot.sourceabscie); saturlcie->setDefault(defSpot.saturlcie); rstprotectcie->setDefault(defSpot.rstprotectcie); - // chromlcie->setDefault(defSpot.chromlcie); - // huecie->setDefault(defSpot.huecie); chromjzcie->setDefault(defSpot.chromjzcie); saturjzcie->setDefault(defSpot.saturjzcie); huejzcie->setDefault(defSpot.huejzcie); @@ -12113,7 +13030,6 @@ void Locallabcie::setDefaults(const rtengine::procparams::ProcParams* defParams, thrhjzcie->setDefault(defSpot.thrhjzcie); lightlcie->setDefault(defSpot.lightlcie); lightjzcie->setDefault(defSpot.lightjzcie); - //lightqcie->setDefault(defSpot.lightqcie); lightsigqcie->setDefault(defSpot.lightsigqcie); contlcie->setDefault(defSpot.contlcie); contjzcie->setDefault(defSpot.contjzcie); @@ -12136,31 +13052,47 @@ void Locallabcie::setDefaults(const rtengine::procparams::ProcParams* defParams, blackEvjz->setDefault(defSpot.blackEvjz); whiteEvjz->setDefault(defSpot.whiteEvjz); targetjz->setDefault(defSpot.targetjz); + sigmoidldacie12->setDefault(defSpot.sigmoidldacie12); + sigmoidthcie12->setDefault(defSpot.sigmoidthcie12); + sigmoidblcie12->setDefault(defSpot.sigmoidblcie12); + sigmoidldacie->setDefault(defSpot.sigmoidldacie); sigmoidthcie->setDefault(defSpot.sigmoidthcie); - sigmoidsenscie->setDefault(defSpot.sigmoidsenscie); sigmoidblcie->setDefault(defSpot.sigmoidblcie); + sigmoidsenscie->setDefault(defSpot.sigmoidsenscie); + comprcie->setDefault(defSpot.comprcie); strcielog->setDefault(defSpot.strcielog); comprcieth->setDefault(defSpot.comprcieth); gamjcie->setDefault(defSpot.gamjcie); + smoothcieth->setDefault(defSpot.smoothcieth); whitescie->setDefault(defSpot.whitescie); blackscie->setDefault(defSpot.blackscie); slopjcie->setDefault(defSpot.slopjcie); slopesmo->setDefault(defSpot.slopesmo); - slopesmor->setDefault(defSpot.slopesmo); + slopesmoq->setDefault(defSpot.slopesmoq); + contsig->setDefault(defSpot.contsig); + skewsig->setDefault(defSpot.skewsig); + whitsig->setDefault(defSpot.whitsig); + slopesmor->setDefault(defSpot.slopesmor); slopesmog->setDefault(defSpot.slopesmog); slopesmob->setDefault(defSpot.slopesmob); + kslopesmor->setDefault(defSpot.kslopesmor); + kslopesmog->setDefault(defSpot.kslopesmog); + kslopesmob->setDefault(defSpot.kslopesmob); + sigmoidldajzcie12->setDefault(defSpot.sigmoidldajzcie12); + sigmoidthjzcie12->setDefault(defSpot.sigmoidthjzcie12); + sigmoidbljzcie12->setDefault(defSpot.sigmoidbljzcie12); + sigmoidldajzcie->setDefault(defSpot.sigmoidldajzcie); sigmoidthjzcie->setDefault(defSpot.sigmoidthjzcie); sigmoidbljzcie->setDefault(defSpot.sigmoidbljzcie); - // contqcie->setDefault(defSpot.contqcie); + contsigqcie->setDefault(defSpot.contsigqcie); colorflcie->setDefault(defSpot.colorflcie); targabscie->setDefault(defSpot.targabscie); targetGraycie->setDefault(defSpot.targetGraycie); catadcie->setDefault(defSpot.catadcie); - // detailcie->setDefault(defSpot.detailcie); strgradcie->setDefault((double)defSpot.strgradcie); anggradcie->setDefault((double)defSpot.anggradcie); feathercie->setDefault((double)defSpot.feathercie); @@ -12205,6 +13137,7 @@ void Locallabcie::setDefaults(const rtengine::procparams::ProcParams* defParams, + void Locallabcie::curveChanged(CurveEditor* ce) { if (isLocActivated && exp->getEnabled()) { @@ -12463,7 +13396,7 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) if (a == lightsigqcie) { if (listener) { - listener->panelChanged(Evlocallablightsigqcie, + listener->panelChanged(Evlocallablightsigqcie12, lightsigqcie->getTextValue() + spName); } } @@ -12609,6 +13542,13 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } } + if (a == sigmoidldacie12) { + if (listener) { + listener->panelChanged(Evlocallabsigmoidldacie12, + sigmoidldacie12->getTextValue() + spName); + } + } + if (a == sigmoidldacie) { if (listener) { listener->panelChanged(Evlocallabsigmoidldacie, @@ -12616,6 +13556,13 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } } + if (a == sigmoidldajzcie12) { + if (listener) { + listener->panelChanged(Evlocallabsigmoidldajzcie12, + sigmoidldajzcie12->getTextValue() + spName); + } + } + if (a == sigmoidldajzcie) { if (listener) { listener->panelChanged(Evlocallabsigmoidldajzcie, @@ -12623,6 +13570,29 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } } + if (a == sigmoidbljzcie) { + if (listener) { + listener->panelChanged(Evlocallabsigmoidbljzcie, + sigmoidbljzcie->getTextValue() + spName); + } + } + + + if (a == sigmoidthjzcie) { + if (listener) { + listener->panelChanged(Evlocallabsigmoidthjzcie, + sigmoidthjzcie->getTextValue() + spName); + } + } + + + if (a == sigmoidthcie12) { + if (listener) { + listener->panelChanged(Evlocallabsigmoidthcie12, + sigmoidthcie12->getTextValue() + spName); + } + } + if (a == sigmoidthcie) { if (listener) { listener->panelChanged(Evlocallabsigmoidthcie, @@ -12637,10 +13607,18 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } } - if (a == sigmoidthjzcie) { + + if (a == sigmoidthjzcie12) { if (listener) { - listener->panelChanged(Evlocallabsigmoidthjzcie, - sigmoidthjzcie->getTextValue() + spName); + listener->panelChanged(Evlocallabsigmoidthjzcie12, + sigmoidthjzcie12->getTextValue() + spName); + } + } + + if (a == sigmoidblcie12) { + if (listener) { + listener->panelChanged(Evlocallabsigmoidblcie12, + sigmoidblcie12->getTextValue() + spName); } } @@ -12681,6 +13659,13 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } } + if (a == smoothcieth) { + if (listener) { + listener->panelChanged(Evlocallabsmoothcieth, + smoothcieth->getTextValue() + spName); + } + } + if (a == slopjcie) { if (listener) { listener->panelChanged(Evlocallabslopjcie, @@ -12688,6 +13673,27 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } } + if (a == contsig) { + if (listener) { + listener->panelChanged(Evlocallabcontsig, + contsig->getTextValue() + spName); + } + } + + if (a == skewsig) { + if (listener) { + listener->panelChanged(Evlocallabskewsig, + skewsig->getTextValue() + spName); + } + } + + if (a == whitsig) { + if (listener) { + listener->panelChanged(Evlocallabwhitsig, + whitsig->getTextValue() + spName); + } + } + if (a == slopesmo) { if (listener) { listener->panelChanged(Evlocallabslopesmo, @@ -12695,25 +13701,95 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } } - if (a == slopesmor) { + if (a == slopesmoq) { if (listener) { - listener->panelChanged(Evlocallabslopesmor, + listener->panelChanged(Evlocallabslopesmoq, + slopesmoq->getTextValue() + spName); + } + } + + + if (a == slopesmog ) { + if(smoothcielnk->get_active()) { + BlockAdjusterEvents block_slopesmob(slopesmob); + BlockAdjusterEvents block_slopesmor(slopesmor); + slopesmob->setValue(newval); + slopesmor->setValue(newval); + if (listener) { + listener->panelChanged(Evlocallabslopesmog, + slopesmog->getTextValue() + spName); + + } + } else { + if (listener) { + listener->panelChanged(Evlocallabslopesmog, + slopesmog->getTextValue() + spName); + + } + } + } + + + if (a == slopesmor ) { + if(smoothcielnk->get_active()) { + BlockAdjusterEvents block_slopesmob(slopesmob); + BlockAdjusterEvents block_slopesmog(slopesmog); + slopesmob->setValue(newval); + slopesmog->setValue(newval); + if (listener) { + listener->panelChanged(Evlocallabslopesmor, + slopesmor->getTextValue() + spName); + + } + } else { + if (listener) { + listener->panelChanged(Evlocallabslopesmor, slopesmor->getTextValue() + spName); + + } + } + } + + if (a == slopesmob ) { + if(smoothcielnk->get_active()) { + BlockAdjusterEvents block_slopesmor(slopesmor); + BlockAdjusterEvents block_slopesmog(slopesmog); + slopesmor->setValue(newval); + slopesmog->setValue(newval); + if (listener) { + listener->panelChanged(Evlocallabslopesmob, + slopesmob->getTextValue() + spName); + + } + } else { + if (listener) { + listener->panelChanged(Evlocallabslopesmob, + slopesmob->getTextValue() + spName); + + } } } - if (a == slopesmog) { + if (a == kslopesmor) { if (listener) { - listener->panelChanged(Evlocallabslopesmog, - slopesmog->getTextValue() + spName); + listener->panelChanged(Evlocallabkslopesmor, + kslopesmor->getTextValue() + spName); } } - if (a == slopesmob) { + + if (a == kslopesmog) { if (listener) { - listener->panelChanged(Evlocallabslopesmob, - slopesmob->getTextValue() + spName); + listener->panelChanged(Evlocallabkslopesmog, + kslopesmog->getTextValue() + spName); + } + } + + if (a == kslopesmob) { + if (listener) { + listener->panelChanged(Evlocallabkslopesmob, + kslopesmob->getTextValue() + spName); } } @@ -12802,10 +13878,10 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } } - if (a == sigmoidbljzcie) { + if (a == sigmoidbljzcie12) { if (listener) { - listener->panelChanged(Evlocallabsigmoidbljzcie, - sigmoidbljzcie->getTextValue() + spName); + listener->panelChanged(Evlocallabsigmoidbljzcie12, + sigmoidbljzcie12->getTextValue() + spName); } } diff --git a/rtgui/options.cc b/rtgui/options.cc index 59e97c5950..acca54c238 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -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); diff --git a/rtgui/options.h b/rtgui/options.h index 9c34383a5e..3ee7349b04 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -486,6 +486,7 @@ class Options Glib::ustring lastRetinexDir; Glib::ustring lastDenoiseCurvesDir; Glib::ustring lastWaveletCurvesDir; + Glib::ustring lastIcmCurvesDir; Glib::ustring lastlocalCurvesDir; Glib::ustring lastPFCurvesDir; Glib::ustring lastHsvCurvesDir; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index b3da19b638..cfc58c310f 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -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& 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& 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& 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& 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& 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& 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& 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& 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& 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; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 68b362bf09..987c0196ca 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -845,6 +845,7 @@ class LocallabParamsEdited bool lcdarkness; bool lclightness; bool sigmalc; + bool offslc; bool levelwav; bool residcont; bool residsha; @@ -896,6 +897,7 @@ class LocallabParamsEdited bool wavgradl; bool wavcompre; bool origlc; + bool processwav; bool localcontMethod; bool localedgMethod; bool localneiMethod; @@ -1032,11 +1034,11 @@ class LocallabParamsEdited 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 @@ class LocallabParamsEdited 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 @@ class LocallabParamsEdited bool blackEvjz; bool whiteEvjz; bool targetjz; + bool sigmoidldacie12; + bool sigmoidthcie12; + bool sigmoidblcie12; bool sigmoidldacie; bool sigmoidthcie; bool sigmoidsenscie; @@ -1105,11 +1119,19 @@ class LocallabParamsEdited 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 @@ class LocallabParamsEdited 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; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index ac1b884b21..cf081d8866 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -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) {