LA - new tool - Color appearance (Cam16 & JzCzHz) (#6377)

* Gui improvments

* Several improvments GUI Jz algo

* Change function La for lightess Jz

* SH jzazbz first

* enable Jz SH

* Clean code

* Disabled Munsell correction when Jz

* Change tooltip and Cam16 Munsell

* GUI for CzHz and HzHz curves

* Enable curves Hz(Hz) Cz(Hz)

* Improve Cz chroma

* Jz100 reference refine

* Change limit Jz100

* Refine link between jz100 and peak adaptation

* Improve GUI

* Various improvment PQ PU gamut

* Change defaults settings

* forgotten PL in gamutjz

* Small changes and comment

* Change gamujz parameter

* disabled gamut Jz too slow

* Jzazbz curve Jz(Hz)

* reenable gamutjz

* small changes

* Change tooltip

* Change labels tooltips

* Jzazbz only on advanced mode

* GUI improvments

* Change tooltip

* Change default values and tooltip

* Added tooltip Jz

* Disabled Jz gamut

* Change gamma color and light - remove exposure

* Gamma for exposure and DR

* gamma Sharp

* Gamma vibrance

* gamma optimizations

* Change tooltips

* Optimization PQ

* LA GUI for tone curve Ciecam

* LA ciecam Enable curve lightness - brightness

* LA ciecam GUI color curve

* LA ciecam enable color curve

* Change tooltip and default values

* Enable Jz curve

* Enable Cz(Cz) curve

* Enable Cz(Jz) curve

* Added Log encoding to ciecam

* Improvment algorithm remapping

* Reenable forgotten listener logencodchanged

* Change Jz tooltips

* Reenable dynamic range and exposure

* First change GUI auto ciecam

* 2nd fixed ciecam auto

* Improve GUI maskbackground curves

* Enable activspot for la ciecam

* set sensitive sliders La ciecam when auto scene conditions

* Change internal calculations see comments

* Checcbox ForceJz to 1

* Change tool position - change order CAM model

* Expander for Jzczhz

* Remove unused code

* GUI changes

* Change labels CAM16 Jzazbz

* Change slider brightness parameters

* improvment SH jz

* Some changes to brightness Jz

* Fixed scene conditions auto

* Renable forgotten change

* Prepare calculation Zcam

* Prepare Iz for zcam

* First GUI Zcam

* Improve GUI Zcam

* Calculate Qz white - brightness of the reference white

* Prepare for PQ - eventually

* Init LUT ZCAMBrightCurveJz and ZCAMBrightCurveQz

* prepare zcam achromatic variables

* First zcam

* Change algo step 5 zcam

* Another change original algo

* Another change to original algo

* first colorfullness

* Fixed bad behavior threshold and change c c2 surround parameters

* added saturation Zcam

* Change parameters surround

* Enable chroma zcam

* change chroma and lightness formula

* disable OMP for 2nd process Zcam

* Improvment zcam for some high-light images

* Change parameters overflow zcam

* Change parmeters high datas

* another change to retrieve...

* Simplify code matrix conversion xyz-jzazbz

* Adjust internam parameters zcam

* Change some parameters - clean code

* Enable PQCam16

* Enable PQ Cam16 - disable ZCAM

* remove warning compilation message

* Change GUI jzczhz

* Fixed bad behavior remaping jz

* Remove forgotten parameter - hide Jz100 - PU adaptation- chnage tooltips

* Another change to chroma parameter

* Small changes

* If verbose display in console Cam16 informations

* If verbose display in console source saturation colorfullness

* Change to La calculation for ciecam

* Change GUI cam16 - jzczhz - remove cam16 and jzczhz

* Disable exposure compensation to calculate La for all Ciecam and Log encoding

* Change label Cam16 and jzczhz

* Improve GUI Jz

* Other improvment GUI Jz Cam16

* verify nan Jz and ciecam matrix to avoid crash

* Enable La manual for Jz to change PU-adaptation

* Improve calculation to avoid crash Jz and Cam16 matrix

* Fixed crash with local contrast in cam16

* Clean code loccont

* First step GUI Cie mask

* GUI part 2 - Cie

* Build cieMask

* Gui part 3 cie

* Valid llcieMask

* Valid llcieMask

* Pass GUI curves parameters to iplocallab.cc

* 2nd pass parameters from GUI to iplocallab.cc

* Init first functions modifications

* Add expander to cam16 adjustments

* First test mask cie

* Various improvment GUI - tooltips - process

* Take into account Yb cam16 for Jz - reenable warm-cool

* Surround source Cam16 before Jz

* Improve GUI and process

* Fixed bug and bad behavior last commit

* Fixed bug chroma mask - improve GUI - Relative luminance for Jz

* Increase sensitivity mask chroma

* Improve Jz with saturation Z - improve GUI Jzczhz

* Small code improvment

* Another change mask C and enable mask for Cam16 and Jz

* Some changes

* Enable denoise chroma mask

* Small change LIM01 normchromar

* Enable Zcam matrix

* Improve chroma curves...mask and boudaries

* take into account recursive slider in settings

* Change tooltip - improvment to C curve (denoise C - best value in curves - etc.) - remove Zcam button

* Change tooltips

* First part GUI - local contrast wavelet Jz

* Passed parameters GUI local contrast wav jz to rtengine

* save config wavelet jz

* first try wavelet local contrast Jz

* Add tooltips

* Simplify code wavelet local contrast

* take into account edge wavelet performance in Wavelet Jz

* Fixed overflow jz when usig botth contradt and wavelt local jz contrast

* Adapt size winGdiHandles in filepanel to avoid crash in Windows multieditor

* First GUI part Clarity wavelet Jz

* First try wavelet Jz Cz clarity

* Added tooltips

* Small change to enable wavelet jz

* Disabled (commented) all Zcam code

* Improve behavior when SH local-contrast and Clarity are use both

* Change limit PQremap jz

* Clean and optimize code

* Reenable mjjz

* Change settings guidedfilter wavelet Jz

* Fixed crash when revory based on lum mask negative

* Change tooltip

* Fixed ad behavior auto mean and absolute luminance

* Remove warning in console

* Fixed bad behavior auto Log encoding - bad behavior curves L(H) Jz

* Fixed another bad behavior - reenable curves color and light L(H) C(H)

* first transposition Lab Jz for curves H

* Change mask boundary for Jz

* Various improvment to H curves Jz

* Add amountchrom to Hcurve Color and Light

* Improve gray boundary curves behavior

* reenable Jz curve H(H) - soft radius

* Improve guidefilter Jz H curve

* Threshold chroma Jz(Hz)

* Enable guidedfilter chroma curve H

* improve GUI curves Hz

* Checkbutton chroma for curve Jz(Hz)

* Change event selectspot

* Clean and small optimization code

* Another clean code

* Change calculation Hz references for curves Hz

* Clean code

* Various changes to GF and GUI

* Another change to Chroma for Jz(H)

* Change GUI sensitive Jz100 adapdjzcie

* Improve code for Jz100

* Change default value skin-protection to 0 instead of 50

* Clean code

* Remove BENCHFUN for ciecam

* small correction to huejz_to_huehsv2 conversion

* Added missing plum parameter for jch2xyz_ciecam02float

* another small change to huejz_to_huehsv2

* Improvment to huelab_to_huehsv2 and some double functions

* Fixed warning hide parameters in lgtm-com

* Fixed ? Missing retuen statement in lgtm-com

* Change behavior Log encoding whith PQ Cam16

* Small improvment to Jz PU adaptation

* Added forgoten to_one for Cz slider

* Replace 0.707... by RT_SQRT1_2 - change some settings chroma

* Improvment to getAutoLogloc

* Fixed crash with array in getAutoLogloc

* First try Jz Log encoding

* Forgotten Cz

* Various improvment GUI setlogscale - Jz log encoding

* Change labels tooltips Jz log

* Change wrong clipcz value

* Change tooltip auto scene conditions

* Fixed bad behavior blackevjz whiteevjz

* Small improvment to LA Log encoding std

* Avoid bad behavior Jz log when enable Relative luminance

* Change sourcegray jz calculation

* Revert last change

* Clean and comment code

* Review tooltips thanks to Wayne - harmonize response La log encoding and Jz Log encoding

* Always force Dynamic Range evaluation in full frame mode for Jz log encoding

* Remove unused code

* Small optimizations sigmoid Cam16 and Jz

* Comment code

* Change parameters deltaE for HDR

* Various improvment to Jz - La - sigmoid - log encoding

* Basic support for Sony ILCE-7M4 in camconst.json

* German translation Spot Removal (#6388)

* Filmnegative German translation (#6389)

* (Temporarily) disable `ftree-loop-vectorize` for GCC 11 because of #6384

* Added BlacEv WhiteEv to sigmoidJz

* Improve GUI for BlackEv WhiteEv

* Change location SigmoidJz in Iplocallab

* Improvment GUI and sensitivity sliders strength sigmoid

* Change labels

Co-authored-by: Thanatomanic <6567747+Thanatomanic@users.noreply.github.com>
Co-authored-by: Anna <simonanna@gmx.net>
This commit is contained in:
Desmis 2021-12-21 07:43:59 +01:00 committed by GitHub
parent 4b8481f1c9
commit 1e4f41bc05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 9425 additions and 784 deletions

View File

@ -1297,6 +1297,118 @@ HISTORY_MSG_1047;Local - SH and Tone Equalizer strength
HISTORY_MSG_1048;Local - DR and Exposure strength
HISTORY_MSG_1049;Local - TM strength
HISTORY_MSG_1050;Local - Log encoding chroma
HISTORY_MSG_1051;Local - Residual wavelet gamma
HISTORY_MSG_1052;Local - Residual wavelet slope
HISTORY_MSG_1053;Local - Denoise gamma
HISTORY_MSG_1054;Local - Wavelet gamma
HISTORY_MSG_1055;Local - Color and Light gamma
HISTORY_MSG_1056;Local - DR and Exposure gamma
HISTORY_MSG_1057;Local - CIECAM Enabled
HISTORY_MSG_1058;Local - CIECAM Overall strength
HISTORY_MSG_1059;Local - CIECAM Autogray
HISTORY_MSG_1060;Local - CIECAM Mean luminance source
HISTORY_MSG_1061;Local - CIECAM Source absolute
HISTORY_MSG_1062;Local - CIECAM Surround Source
HISTORY_MSG_1063;Local - CIECAM Saturation
HISTORY_MSG_1064;Local - CIECAM Chroma
HISTORY_MSG_1062;Local - CIECAM Lightness
HISTORY_MSG_1063;Local - CIECAM Brightness
HISTORY_MSG_1064;Local - CIECAM threshold
HISTORY_MSG_1065;Local - CIECAM lightness J
HISTORY_MSG_1066;Local - CIECAM brightness
HISTORY_MSG_1067;Local - CIECAM Contrast J
HISTORY_MSG_1068;Local - CIECAM threshold
HISTORY_MSG_1069;Local - CIECAM contrast Q
HISTORY_MSG_1070;Local - CIECAM colorfullness
HISTORY_MSG_1071;Local - CIECAM Absolute luminance
HISTORY_MSG_1072;Local - CIECAM Mean luminance
HISTORY_MSG_1073;Local - CIECAM Cat16
HISTORY_MSG_1074;Local - CIECAM Local contrast
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_1082;Local - CIECAM Sigmoid Q J
HISTORY_MSG_1083;Local - CIECAM Hue
HISTORY_MSG_1084;Local - Uses Black Ev - White Ev
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_1092;Local - Jz adaptation
HISTORY_MSG_1093;Local - CAM model
HISTORY_MSG_1094;Local - Jz highligths
HISTORY_MSG_1095;Local - Jz highligths thr
HISTORY_MSG_1096;Local - Jz shadows
HISTORY_MSG_1097;Local - Jz shadows thr
HISTORY_MSG_1098;Local - Jz radius SH
//HISTORY_MSG_1099;Local - Hz(Hz) Curve
HISTORY_MSG_1099;Local - Cz(Hz) Curve
HISTORY_MSG_1100;Local - Jz reference 100
HISTORY_MSG_1101;Local - Jz PQ remap
HISTORY_MSG_1102;Local - Jz(Hz) Curve
HISTORY_MSG_1103;Local - Vibrance gamma
HISTORY_MSG_1104;Local - Sharp gamma
HISTORY_MSG_1105;Local - CIECAM Tone method
HISTORY_MSG_1106;Local - CIECAM Tone curve
HISTORY_MSG_1107;Local - CIECAM Color method
HISTORY_MSG_1108;Local - CIECAM Color curve
HISTORY_MSG_1109;Local - Jz(Jz) curve
HISTORY_MSG_1110;Local - Cz(Cz) curve
HISTORY_MSG_1111;Local - Cz(Jz) curve
HISTORY_MSG_1112;Local - forcejz
/*
HISTORY_MSG_1114;Local - ZCAM lightness
HISTORY_MSG_1115;Local - ZCAM brightness
HISTORY_MSG_1116;Local - ZCAM contrast J
HISTORY_MSG_1117;Local - ZCAM contrast Q
HISTORY_MSG_1118;Local - ZCAM contrast threshold
HISTORY_MSG_1119;Local - ZCAM colorfullness
HISTORY_MSG_1120;Local - ZCAM saturation
HISTORY_MSG_1121;Local - ZCAM chroma
*/
HISTORY_MSG_1113;Local - HDR PQ
HISTORY_MSG_1114;Local - Cie mask enable
HISTORY_MSG_1115;Local - Cie mask curve C
HISTORY_MSG_1116;Local - Cie mask curve L
HISTORY_MSG_1117;Local - Cie mask curve H
HISTORY_MSG_1118;Local - Cie mask blend
HISTORY_MSG_1119;Local - Cie mask radius
HISTORY_MSG_1120;Local - Cie mask chroma
HISTORY_MSG_1121;Local - Cie mask contrast curve
HISTORY_MSG_1122;Local - Cie mask recovery threshold
HISTORY_MSG_1123;Local - Cie mask recovery dark
HISTORY_MSG_1124;Local - Cie mask recovery light
HISTORY_MSG_1125;Local - Cie mask recovery decay
HISTORY_MSG_1126;Local - Cie mask laplacian
HISTORY_MSG_1127;Local - Cie mask gamma
HISTORY_MSG_1128;Local - Cie mask slope
HISTORY_MSG_1129;Local - Cie Relative luminance
HISTORY_MSG_1130;Local - Cie Saturation Jz
HISTORY_MSG_1131;Local - Mask denoise chroma
HISTORY_MSG_1132;Local - Cie Wav sigma Jz
HISTORY_MSG_1133;Local - Cie Wav level Jz
HISTORY_MSG_1134;Local - Cie Wav local contrast Jz
HISTORY_MSG_1135;Local - Cie Wav clarity Jz
HISTORY_MSG_1136;Local - Cie Wav clarity Cz
HISTORY_MSG_1137;Local - Cie Wav clarity Soft
HISTORY_MSG_1138;Local - Local - Hz(Hz) Curve
HISTORY_MSG_1139;Local - Jz soft Curves H
HISTORY_MSG_1140;Local - Jz Threshold chroma
HISTORY_MSG_1141;Local - chroma curve Jz(Hz)
HISTORY_MSG_1142;Local - strength soft
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_1148;Local - Jz Sigmoid
HISTORY_MSG_BLSHAPE;Blur by level
HISTORY_MSG_BLURCWAV;Blur chroma
HISTORY_MSG_BLURWAV;Blur luminance
@ -2172,8 +2284,8 @@ TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final i
TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Absolute luminance of the viewing environment\n(usually 16 cd/m²).
TP_COLORAPP_WBCAM;WB [RT+CAT02/16] + [output]
TP_COLORAPP_WBRT;WB [RT] + [output]
TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. A gray at 18% corresponds to a background luminance expressed in CIE L of 50%.\nThis data must take into account the average luminance of the image
TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. A gray at 18% corresponds to a background luminance expressed in CIE L of 50%.\nThis data is calculated from the average luminance of the image
TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image
TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image
TP_COLORTONING_AB;o C/L
TP_COLORTONING_AUTOSAT;Automatic
TP_COLORTONING_BALANCE;Balance
@ -2578,9 +2690,13 @@ TP_LOCALLAB_AMOUNT;Amount
TP_LOCALLAB_ARTIF;Shape detection
TP_LOCALLAB_ARTIF_TOOLTIP;ΔE scope threshold increases the range of deltaE scope. High values are for very wide gamut images.\nIncreasing deltaE decay can improve shape detection, but can also reduce the scope.
TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%)
TP_LOCALLAB_AUTOGRAYCIE;Auto
TP_LOCALLAB_AUTOGRAYCIE_TOOLTIP;Automatically calculates the “Mean luminance” and “Absolute luminance”.\nFor Jz Cz Hz: automatically calculates "PU adaptation", "Black Ev" and "White Ev".
TP_LOCALLAB_AVOID;Avoid color shift
TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used.
TP_LOCALLAB_AVOIDRAD;Soft radius
TP_LOCALLAB_AVOIDMUN;Munsell correction only
TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used
TP_LOCALLAB_BALAN;ab-L balance (ΔE)
TP_LOCALLAB_BALANEXP;Laplacian balance
TP_LOCALLAB_BALANH;C-H balance (ΔE)
@ -2623,6 +2739,15 @@ TP_LOCALLAB_BUTTON_DEL;Delete
TP_LOCALLAB_BUTTON_DUPL;Duplicate
TP_LOCALLAB_BUTTON_REN;Rename
TP_LOCALLAB_BUTTON_VIS;Show/Hide
TP_LOCALLAB_BWFORCE;Uses Black Ev & White Ev
TP_LOCALLAB_CAM16_FRA;Cam16 Image Adjustments
TP_LOCALLAB_CAM16PQREMAP;HDR PQ (Peak Luminance)
TP_LOCALLAB_CAM16PQREMAP_TOOLTIP;PQ (Perceptual Quantizer) adapted to CAM16. 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.
TP_LOCALLAB_CAMMODE;CAM model
TP_LOCALLAB_CAMMODE_ALL;CAM 16 + Jz Cz Hz
TP_LOCALLAB_CAMMODE_CAM16;CAM 16
TP_LOCALLAB_CAMMODE_ZCAM;ZCAM only
TP_LOCALLAB_CAMMODE_JZ;Jz Cz Hz
TP_LOCALLAB_CATAD;Chromatic adaptation/Cat16
TP_LOCALLAB_CBDL;Contrast by Detail Levels
TP_LOCALLAB_CBDLCLARI_TOOLTIP;Enhances local contrast of the midtones.
@ -2642,19 +2767,36 @@ 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_TOOLNAME;Color appearance (Cam16 & JzCzHz)
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_CIEMODE;Change tool position
TP_LOCALLAB_CIEMODE_COM;Default
TP_LOCALLAB_CIEMODE_DR;Dynamic Range
TP_LOCALLAB_CIEMODE_TM;Tone-Mapping
TP_LOCALLAB_CIEMODE_WAV;Wavelet
TP_LOCALLAB_CIEMODE_LOG;Log Encoding
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_CIETOOLEXP;Curves
TP_LOCALLAB_CIECOLORFRA;Color
TP_LOCALLAB_CIECONTFRA;Contrast
TP_LOCALLAB_CIELIGHTFRA;Lighting
TP_LOCALLAB_CIELIGHTCONTFRA;Lighting & Contrast
TP_LOCALLAB_CIRCRADIUS;Spot size
TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-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
TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images
TP_LOCALLAB_CLARILRES;Merge luma
TP_LOCALLAB_CLARISOFT;Soft radius
TP_LOCALLAB_CLARISOFT_TOOLTIP;The Soft radius slider (guided filter algorithm) reduces halos and irregularities for both Clarity and Sharp Mask and for all pyramid wavelet processes. To deactivate, set slider to zero.
TP_LOCALLAB_CLARISOFT_TOOLTIP;The Soft radius slider (guided filter algorithm) reduces halos and irregularities for Clarity, Sharp Mask and all wavelet pyramid processes. To deactivate, set slider to zero.
TP_LOCALLAB_CLARISOFTJZ_TOOLTIP;The Soft radius slider (guided filter algorithm) reduces halos and irregularities for Clarity, Sharp Mask and Local contrast wavelets Jz.
TP_LOCALLAB_CLARITYML;Clarity
TP_LOCALLAB_CLARI_TOOLTIP;Levels 0 to 4 (included): Sharp mask is enabled\nLevels 5 and above: 'Clarity' is enabled.\nUseful if you use 'Wavelet level tone mapping'
TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): Sharp mask is enabled\nLevels 5 and above: 'Clarity' is enabled.
TP_LOCALLAB_CLIPTM;Clip restored data (gain)
TP_LOCALLAB_COFR;Color & Light
TP_LOCALLAB_COLOR_CIE;Color curve
TP_LOCALLAB_COLORDE;ΔE preview color - intensity
TP_LOCALLAB_COLORDEPREV_TOOLTIP;Preview ΔE button will only work if you have activated one (and only one) of the tools in Add tool to current spot menu.\nTo be able to preview ΔE with several tools enabled, use Mask and modifications - Preview ΔE.
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.
@ -2694,6 +2836,7 @@ TP_LOCALLAB_CURVENH;Super
TP_LOCALLAB_CURVENHSU;Combined HueChroma (experimental)
TP_LOCALLAB_CURVENSOB2;Combined HueChroma + Contrast threshold (experimental)
TP_LOCALLAB_CURVNONE;Disable curves
TP_LOCALLAB_CURVES_CIE;Tone curve
TP_LOCALLAB_DARKRETI;Darkness
TP_LOCALLAB_DEHAFRA;Dehaze
TP_LOCALLAB_DEHAZ;Strength
@ -2710,6 +2853,8 @@ TP_LOCALLAB_DENOIEQUAL_TOOLTIP;Allows you to carry out more or less noise reduct
TP_LOCALLAB_DENOI1_EXP;Denoise based on luminance mask
TP_LOCALLAB_DENOI2_EXP;Recovery based on luminance mask
TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP;Allows you to recover luminance detail by progressively applying a Fourier transform (DCT).
TP_LOCALLAB_DENOIMASK;Denoise chroma mask
TP_LOCALLAB_DENOIMASK_TOOLTIP;For all tools, allows you to control the chromatic noise level of the mask.\nUseful for better control of chrominance and to avoid artifacts when using the LC(h) curve.
TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. Aggressive mode removes low frequency detail.\nConservative and Aggressive modes use wavelets and DCT and can be used in conjunction with Non-local Means Luminance.
TP_LOCALLAB_DENOIS;Denoise
TP_LOCALLAB_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas.
@ -2754,7 +2899,7 @@ TP_LOCALLAB_EXPCOLOR_TOOLTIP;Adjust color, lightness, contrast and correct small
TP_LOCALLAB_EXPCOMP;Exposure compensation ƒ
TP_LOCALLAB_EXPCOMPINV;Exposure compensation
TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change Shape detection in "Settings":\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)
TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Locallab version: more tools and more possibilities for working on individual detail levels.\ne.g. Wavelet-level tone mapping.
TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\ne.g. Wavelet-level tone mapping.
TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low Transition value and high Transition decay and Scope to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts.
TP_LOCALLAB_EXPCURV;Curves
TP_LOCALLAB_EXPGRAD;Graduated Filter
@ -2792,6 +2937,10 @@ TP_LOCALLAB_FFTWBLUR;ƒ - Always Use Fast Fourier Transform
TP_LOCALLAB_FULLIMAGE;Black-Ev and White-Ev for whole image
TP_LOCALLAB_FULLIMAGELOG_TOOLTIP;Calculates the Ev levels for the whole image.
TP_LOCALLAB_GAM;Gamma
TP_LOCALLAB_GAMW;Gamma (wavelet pyramids)
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_GAMM;Gamma
TP_LOCALLAB_GAMMASKCOL;Gamma
@ -2827,6 +2976,8 @@ TP_LOCALLAB_GUIDSTRBL_TOOLTIP;Intensity of the guided filter
TP_LOCALLAB_HHMASK_TOOLTIP;Fine hue adjustments for example for the skin.
TP_LOCALLAB_HIGHMASKCOL;Highlights
TP_LOCALLAB_HLH;H
TP_LOCALLAB_HLHZ;Hz
TP_LOCALLAB_HUECIE;Hue
TP_LOCALLAB_IND;Independent (mouse)
TP_LOCALLAB_INDSL;Independent (mouse + sliders)
TP_LOCALLAB_INVBL;Inverse
@ -2835,6 +2986,40 @@ TP_LOCALLAB_INVERS;Inverse
TP_LOCALLAB_INVERS_TOOLTIP;Fewer possibilities if selected (Inverse).\n\nAlternative: use two spots\nFirst Spot:\n Full Image\n \nSecond spot: Excluding spot
TP_LOCALLAB_INVMASK;Inverse algorithm
TP_LOCALLAB_ISOGR;Distribution (ISO)
TP_LOCALLAB_JAB;Uses Black Ev & White Ev
TP_LOCALLAB_JABADAP_TOOLTIP;Perceptual Uniform adaptation.\nAutomatically adjusts the relationship between Jz and saturation taking into account "Absolute luminance".
TP_LOCALLAB_JZ100;Jz reference 100cd/m2
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_JZCLARILRES;Merge Jz
TP_LOCALLAB_JZCLARICRES;Merge chroma Cz
TP_LOCALLAB_JZFORCE;Force max Jz to 1
TP_LOCALLAB_JZFORCE_TOOLTIP;Allows you to force the maximum Jz value to 1 for better slider and curve response
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_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_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_JZFRA;Jz Cz Hz Image Adjustments
TP_LOCALLAB_JZLIGHT;Brightness
TP_LOCALLAB_JZCONT;Contrast
TP_LOCALLAB_JZCH;Chroma
TP_LOCALLAB_JZCHROM;Chroma
TP_LOCALLAB_JZHFRA;Curves Hz
TP_LOCALLAB_JZHJZFRA;Curve Jz(Hz)
TP_LOCALLAB_JZHUECIE;Hue Rotation
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_JZSAT;Saturation
TP_LOCALLAB_JZSHFRA;Shadows/Highlights Jz
TP_LOCALLAB_JZSOFTCIE;Soft radius (GuidedFilter)
TP_LOCALLAB_JZTARGET_EV;Viewing Mean luminance (Yb%)
TP_LOCALLAB_JZSTRSOFTCIE;Strength GuidedFilter
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.
TP_LOCALLAB_JZTHRHCIE;Threshold Chroma for Jz(Hz)
TP_LOCALLAB_JZWAVEXP;Wavelet Jz
TP_LOCALLAB_JZLOG;Log encoding Jz
TP_LOCALLAB_LABBLURM;Blur Mask
TP_LOCALLAB_LABEL;Local Adjustments
TP_LOCALLAB_LABGRID;Color correction grid
@ -2846,8 +3031,8 @@ TP_LOCALLAB_LAPLACE;Laplacian threshold ΔE
TP_LOCALLAB_LAPLACEXP;Laplacian threshold
TP_LOCALLAB_LAPMASKCOL;Laplacian threshold
TP_LOCALLAB_LAPRAD1_TOOLTIP;Increases the contrast of the mask by increasing the luminance values of the lighter areas. Can be used in conjunction with the L(L) and LC(H) curves.
TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition
TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition
TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition.
TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition.
TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear.
TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10.
TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets
@ -2871,14 +3056,14 @@ TP_LOCALLAB_LOC_CONTRASTPYR2LAB; Contrast by level/TM/Directional contrast
TP_LOCALLAB_LOC_CONTRASTPYRLAB; Graduated Filter/Edge Sharpness/Blur
TP_LOCALLAB_LOC_RESIDPYR;Residual image (Main)
TP_LOCALLAB_LOG;Log Encoding
TP_LOCALLAB_LOG1FRA;Image Adjustments
TP_LOCALLAB_LOG1FRA;CAM16 Image Adjustments
TP_LOCALLAB_LOG2FRA;Viewing Conditions
TP_LOCALLAB_LOGAUTO;Automatic
TP_LOCALLAB_LOGAUTOGRAY_TOOLTIP;Automatically calculates the 'Mean luminance' for the scene conditions when the Automatic button in Relative Exposure Levels is pressed.
TP_LOCALLAB_LOGAUTO_TOOLTIP;Pressing this button will calculate the dynamic range and 'Mean luminance' for the scene conditions if the "Auto mean luminance (Yb%)” is checked).\nAlso calculates the absolute luminance at the time of shooting.\nPress the button again to adjust the automatically calculated values.
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_LOGBLACKWHEV_TOOLTIP;Estimated values of dynamic range i.e. Black Ev and White Ev
TP_LOCALLAB_LOGCATAD_TOOLTIP;The 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_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_LOGCOLORFL;Colorfulness (M)
TP_LOCALLAB_LOGCOLORF_TOOLTIP;Perceived amount of hue in relation to gray.\nIndicator that a stimulus appears more or less colored.
TP_LOCALLAB_LOGCONQL;Contrast (Q)
@ -2888,25 +3073,25 @@ TP_LOCALLAB_LOGCONTL_TOOLTIP;Contrast (J) in CIECAM16 takes into account the inc
TP_LOCALLAB_LOGCONTQ_TOOLTIP;Contrast (Q) in CIECAM16 takes into account the increase in perceived coloration with brightness.
TP_LOCALLAB_LOGCONTTHRES_TOOLTIP;Adjusts the mid-tone contrast range (J & Q).\nPositive values progressively reduce the effect of the Contrast sliders (J & Q). Negative values progressively increase the effect of the Contrast sliders.
TP_LOCALLAB_LOGDETAIL_TOOLTIP;Acts mainly on high frequencies.
TP_LOCALLAB_LOGENCOD_TOOLTIP;Tone Mapping with Logarithmic encoding (ACES).\nUseful for underexposed images or images with high dynamic range.\n\nTwo-step process : 1) Dynamic Range calculation 2) Manual adjustment
TP_LOCALLAB_LOGENCOD_TOOLTIP;Tone Mapping with Logarithmic encoding (ACES).\nUseful for underexposed images or images with high dynamic range.\n\nTwo-step process: 1) Dynamic Range calculation 2) Manual adjustment
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.\nTakes into account exposure compensation in the main-menu Exposure tab.\nAlso calculates the absolute luminance at the time of shooting.
TP_LOCALLAB_LOGIMAGE_TOOLTIP;Takes into account corresponding Ciecam variables (mainly Contrast 'J' and Saturation 's', and also Contrast (Q) , Brightness (Q), Lightness (J), Colorfulness (M) in Advanced mode).
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_LOGLIGHTL;Lightness (J)
TP_LOCALLAB_LOGLIGHTL_TOOLTIP;Close to lightness (L*a*b*), takes into account the increase in perceived coloration.
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_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_LOGSATURL_TOOLTIP;Saturation (s) in CIECAM16 corresponds to the color of a stimulus in relation to its own brightness.\nActs mainly on medium and highlights tones
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_LOGSRCGREY_TOOLTIP;Estimated gray point value of the image.
TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\n<b>Average</b>: Average light environment (standard). The image will not change.\n\n<b>Dim</b>: Dim environment. The image will become slightly brighter.\n\n<b>Dark</b>: Dark environment. The image will become more bright.
TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\n<b>Average</b>: Average light conditions (standard). The image will not change.\n\n<b>Dim</b>: Dim conditions. The image will become slightly brighter.\n\n<b>Dark</b>: Dark conditions. The image will become more bright.
TP_LOCALLAB_LOGTARGGREY_TOOLTIP;You can adjust this value to suit.
TP_LOCALLAB_LOGVIEWING_TOOLTIP;Corresponds to the medium on which the final image will be viewed (monitor, TV, projector, printer,..), as well as its environment.
TP_LOCALLAB_LOGVIEWING_TOOLTIP;Corresponds to the medium on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as the surrounding conditions..
TP_LOCALLAB_LOG_TOOLNAME;Log Encoding
TP_LOCALLAB_LUM;LL - CC
TP_LOCALLAB_LUMADARKEST;Darkest
@ -2972,7 +3157,7 @@ TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise
TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications)
TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications)
TP_LOCALLAB_MASKRECOTHRES;Recovery threshold
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 RT-spot and place it close to the first spot. The small variations in the spot references allows you to make fine adjustments.
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 RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments.
TP_LOCALLAB_MED;Medium
TP_LOCALLAB_MEDIAN;Median Low
TP_LOCALLAB_MEDIANITER_TOOLTIP;The number of successive iterations carried out by the median filter.
@ -3030,7 +3215,7 @@ TP_LOCALLAB_NEIGH;Radius
TP_LOCALLAB_NLDENOISE_TOOLTIP;“Detail recovery” acts on a Laplacian transform to target uniform areas rather than areas with detail.
TP_LOCALLAB_NLDENOISENLPAT_TOOLTIP;Use this slider to adapt the amount of denoise to the size of the objects to be processed.
TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time.
TP_LOCALLAB_NLDENOISENLGAM_TOOLTIP;Lower values preserve details and texture, higher values increase denoise.
TP_LOCALLAB_NLDENOISENLGAM_TOOLTIP;Lower values preserve details and texture, higher values increase denoise.\nIf gamma = 3.0 Luminance "linear" is used.
TP_LOCALLAB_NLFRA;Non-local Means - Luminance
TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own.
TP_LOCALLAB_NLLUM;Strength
@ -3043,6 +3228,8 @@ TP_LOCALLAB_NOISECHROC_TOOLTIP;If superior to zero, high quality algorithm is en
TP_LOCALLAB_NOISECHRODETAIL;Chroma detail recovery
TP_LOCALLAB_NOISECHROFINE;Fine chroma (Wav)
TP_LOCALLAB_NOISEDETAIL_TOOLTIP;Disabled if slider = 100
TP_LOCALLAB_NOISEGAM;Gamma
TP_LOCALLAB_NOISEGAM_TOOLTIP;If gamma = 1 Luminance "Lab" is used. If gamma = 3.0 Luminance "linear" is used.\nLower values preserve details and texture, higher values increase denoise.
TP_LOCALLAB_NOISELEQUAL;Equalizer white-black
TP_LOCALLAB_NOISELUMCOARSE;Luminance coarse (Wav)
TP_LOCALLAB_NOISELUMDETAIL;Luma detail recovery
@ -3077,6 +3264,7 @@ TP_LOCALLAB_RADIUS;Radius
TP_LOCALLAB_RADIUS_TOOLTIP;Uses a Fast Fourier Transform for radius > 30
TP_LOCALLAB_RADMASKCOL;Smooth radius
TP_LOCALLAB_RECT;Rectangle
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_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.
TP_LOCALLAB_REFLABEL;Ref. (0..1) Chroma=%1 Luma=%2 Hue=%3
@ -3115,6 +3303,7 @@ TP_LOCALLAB_RGB;RGB Tone Curve
TP_LOCALLAB_RGBCURVE_TOOLTIP;In RGB mode you have 4 choices : Standard, Weighted standard, Luminance & Film-like.
TP_LOCALLAB_ROW_NVIS;Not visible
TP_LOCALLAB_ROW_VIS;Visible
TP_LOCALLAB_RSTPROTECT_TOOLTIP;Red and skin-tone protection affects the Saturation, Chroma and Colorfulness sliders.
TP_LOCALLAB_SATUR;Saturation
TP_LOCALLAB_SATURV;Saturation (s)
TP_LOCALLAB_SAVREST;Save - Restore Current Image
@ -3180,10 +3369,17 @@ 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_SHRESFRA;Shadows/Highlights
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_SIGMAWAV;Attenuation response
TP_LOCALLAB_SIGFRA;Sigmoid J & Q
TP_LOCALLAB_SIGJZFRA;Sigmoid Jz
TP_LOCALLAB_SIGMOIDLAMBDA;Contrast
TP_LOCALLAB_SIGMOIDTH;Threshold (Gray point)
TP_LOCALLAB_SIGMOIDBL;Blend
TP_LOCALLAB_SIGMOIDQJ;Use Q instead of J
TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a Tone-mapping appearance using both the'Ciecam' and 'Sigmoid' function.\nThree sliders: a) Strength acts on the shape of the sigmoid curve and consequently on the strength; b) Threshold distributes the action according to the luminance; c)Blend acts on the final aspect of the image, contrast and luminance.
TP_LOCALLAB_SIM;Simple
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.
@ -3268,20 +3464,22 @@ TP_LOCALLAB_WAT_BALTHRES_TOOLTIP;Balances the action within each level.
TP_LOCALLAB_WAT_BLURLC_TOOLTIP;The default blur setting affects all 3 L*a* b* components (luminance and colour).\nWhen checked, only luminance is blurred.
TP_LOCALLAB_WAT_CLARIC_TOOLTIP;“Merge chroma” is used to select the intensity of the desired effect on chrominance.
TP_LOCALLAB_WAT_CLARIL_TOOLTIP;“Merge luma” is used to select the intensity of the desired effect on luminance.
TP_LOCALLAB_WAT_CLARICJZ_TOOLTIP;“Merge chroma” is used to select the intensity of the desired effect on chrominance.\nOnly the maximum value of wavelet levels (bottom-right) is taken into account.
TP_LOCALLAB_WAT_CLARILJZ_TOOLTIP;“Merge luma” is used to select the intensity of the desired effect on luminance.\nOnly the maximum value of wavelet levels (bottom-right) is taken into account.
TP_LOCALLAB_WAT_CONTCHROMALEV_TOOLTIP;Chroma levels: adjusts the “a” and “b” components of Lab* as a proportion of the luminance value.
TP_LOCALLAB_WAT_CONTOFFSET_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_LOCALLAB_WAT_DELTABAL_TOOLTIP;By moving the slider to the left, the lower levels are accentuated. To the right, the lower levels are reduced and the higher levels accentuated.
TP_LOCALLAB_WAT_EXPRESID_TOOLTIP;The residual image behaves in the same way as the main image when making adjustments to contrast, chroma etc.
TP_LOCALLAB_WAT_GRADW_TOOLTIP;The more you move the slider to the right, the more effective the detection algorithm will be and the less noticeable the effects of local contrast.
TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP;Low to high local contrast from left to right on the x-axis.\nIncrease or decrease local contrast on the y-axis.
TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP;Low to high local contrast from left to right on the x-axis.\nIncreases or decreases local contrast on the y-axis.
TP_LOCALLAB_WAT_LOCCONTRASTEDG_TOOLTIP;You can adjust the distribution of local contrast by wavelet level based on the initial intensity of the contrast. This will modify the effects of perspective and relief in the image, and/or reduce the contrast values for very low initial contrast levels.
TP_LOCALLAB_WAT_ORIGLC_TOOLTIP;Merge only with original image, prevents the Wavelet Pyramid settings from interfering with Clarity and Sharp mask.
TP_LOCALLAB_WAT_RESIDBLUR_TOOLTIP;Blurs the residual image, independent of the levels.
TP_LOCALLAB_WAT_RESIDCOMP_TOOLTIP;Compresses the residual image to increase or reduce contrast.
TP_LOCALLAB_WAT_SIGMALC_TOOLTIP;The effect of the local contrast adjustment is stronger for medium-contrast details, and weaker for high and low-contrast details.\n This slider controls how quickly the effect dampens towards the extreme contrasts.\nThe higher the value of the slider, the wider the range of contrasts that will receive the full effect of the local contrast adjustment, and the higher the risk of generating artifacts.\nThe lower the value, the more the effect will be pinpointed towards a narrow range of contrast values.
TP_LOCALLAB_WAT_SIGMALC_TOOLTIP;The effect of the local contrast adjustment is stronger for medium-contrast details and weaker for high and low-contrast details.\n This slider controls how quickly the effect dampens towards the extreme contrasts.\nThe higher the value of the slider, the wider the range of contrasts that will receive the full effect of the local contrast adjustment and the higher the risk of generating artifacts.\nThe lower the value, the more the effect will be pinpointed towards a narrow range of contrast values.
TP_LOCALLAB_WAT_STRENGTHW_TOOLTIP;Intensity of edge-effect detection.
TP_LOCALLAB_WAT_STRWAV_TOOLTIP;Allows the local contrast to be varied according to a chosen gradient and angle. The variation of the luminance signal is taken into account and not the luminance.
TP_LOCALLAB_WAT_THRESHOLDWAV_TOOLTIP;Range of wavelet levels used throughout the Wavelets module.
TP_LOCALLAB_WAT_THRESHOLDWAV_TOOLTIP;Range of wavelet levels used throughout the Wavelets module.
TP_LOCALLAB_WAT_WAVBLURCURV_TOOLTIP;Allows you to blur each level of decomposition.\nThe finest to coarsest levels of decomposition are from left to right.
TP_LOCALLAB_WAT_WAVCBDL_TOOLTIP;Similar to Contrast By Detail Levels. Fine to coarse detail levels from left to right on the x-axis.
TP_LOCALLAB_WAT_WAVDELTABAL_TOOLTIP;Acts on the balance of the three directions (horizontal, vertical and diagonal) based on the luminance of the image.\nBy default the shadows or highlights are reduced to avoid artifacts.
@ -3313,6 +3511,8 @@ TP_LOCALLAB_WAVMASK_TOOLTIP;Uses wavelets to modify the local contrast of the ma
TP_LOCALLAB_WAVMED;Wavelet normal
TP_LOCALLAB_WEDIANHI;Median Hi
TP_LOCALLAB_WHITE_EV;White Ev
TP_LOCALLAB_ZCAMFRA;ZCAM Image Adjustments
TP_LOCALLAB_ZCAMTHRES;Retrieve high datas
TP_LOCAL_HEIGHT;Bottom
TP_LOCAL_HEIGHT_T;Top
TP_LOCAL_WIDTH;Right

View File

@ -25,6 +25,19 @@
#undef CLIPD
#define CLIPD(a) ((a)>0.f?((a)<1.f?(a):1.f):0.f)
#define MAXR(a,b) ((a) > (b) ? (a) : (b))
#define Jzazbz_b 1.15
#define Jzazbz_g 0.66
#define Jzazbz_c1 (3424/4096.0)
#define Jzazbz_c2 (2413/128.0)
#define Jzazbz_c3 (2392/128.0)
#define Jzazbz_n (2610/16384.0)
#define Jzazbz_p (1.7*2523/32.0)
#define Jzazbz_d (-0.56)
#define Jzazbz_d0 (1.6295499532821566e-11)
#define Jzazbz_ni (16384.0/2610.0)
#define Jzazbz_pi (32.0/4289.1) //4289.1 = 2523 * 1.7
namespace rtengine
{
@ -67,10 +80,12 @@ void Ciecam02::curveJfloat (float br, float contr, float thr, const LUTu & histo
brightcurvePoints[5] = 0.7f; // shoulder point
brightcurvePoints[6] = min (1.0f, 0.7f + br / 300.0f); //value at shoulder point
} else {
brightcurvePoints[3] = 0.1f - br / 150.0f; // toe point
brightcurvePoints[3] = max(0.0, 0.1 - (double) br / 150.0); // toe point
// brightcurvePoints[3] = 0.1f - br / 150.0f; // toe point
brightcurvePoints[4] = 0.1f; // value at toe point
brightcurvePoints[5] = min (1.0f, 0.7f - br / 300.0f); // shoulder point
// brightcurvePoints[5] = min (1.0f, 0.7f - br / 300.0f); // shoulder point
brightcurvePoints[5] = 0.7f - br / 300.0f; // shoulder point
brightcurvePoints[6] = 0.7f; // value at shoulder point
}
@ -109,6 +124,7 @@ void Ciecam02::curveJfloat (float br, float contr, float thr, const LUTu & histo
}
avg /= sum;
// printf("avg=%f \n", (double) avg);
float thrmin = (thr - contr / 250.0f);
float thrmax = (thr + contr / 250.0f);
@ -184,14 +200,14 @@ float Ciecam02::calculate_fl_from_la_ciecam02float ( float la )
return (0.2f * k * la5) + (0.1f * (1.0f - k) * (1.0f - k) * std::cbrt (la5));
}
float Ciecam02::achromatic_response_to_whitefloat ( float x, float y, float z, float d, float fl, float nbb, int c16)
float Ciecam02::achromatic_response_to_whitefloat ( float x, float y, float z, float d, float fl, float nbb, int c16, float plum)
{
float r, g, b;
float rc, gc, bc;
float rp, gp, bp;
float rpa, gpa, bpa;
// gamu = 1;
xyz_to_cat02float ( r, g, b, x, y, z, c16);
xyz_to_cat02float ( r, g, b, x, y, z, c16, plum);
rc = r * (((y * d) / r) + (1.0f - d));
gc = g * (((y * d) / g) + (1.0f - d));
@ -216,71 +232,253 @@ float Ciecam02::achromatic_response_to_whitefloat ( float x, float y, float z, f
return ((2.0f * rpa) + gpa + ((1.0f / 20.0f) * bpa) - 0.305f) * nbb;
}
void Ciecam02::xyz_to_cat02float ( float &r, float &g, float &b, float x, float y, float z, int c16)
{
void Ciecam02::xyz_to_cat02float ( float &r, float &g, float &b, float x, float y, float z, int c16, float plum)
{ //I use isnan() because I have tested others solutions with std::max(xxx,0) and in some cases crash
//original cat02
//r = ( 0.7328 * x) + (0.4296 * y) - (0.1624 * z);
//g = (-0.7036 * x) + (1.6975 * y) + (0.0061 * z);
//b = ( 0.0000 * x) + (0.0000 * y) + (1.0000 * z);
float peakLum = 1.f/ plum;
if(c16 == 1) {//cat02
r = ( 1.007245f * x) + (0.011136f * y) - (0.018381f * z); //Changjun Li
g = (-0.318061f * x) + (1.314589f * y) + (0.003471f * z);
b = ( 0.0000f * x) + (0.0000f * y) + (1.0000f * z);
} else {//cat16
} else if (c16 == 16) {//cat16
r = ( 0.401288f * x) + (0.650173f * y) - (0.051461f * z); //cat16
g = (-0.250268f * x) + (1.204414f * y) + (0.045854f * z);
b = ( -0.002079f * x) + (0.048952f * y) + (0.953127f * z);
} else if (c16 == 21) {//cam16 PQ
float rp = ( 0.401288f * x) + (0.650173f * y) - (0.051461f * z); //cat16
float gp = (-0.250268f * x) + (1.204414f * y) + (0.045854f * z);
float bp = ( -0.002079f * x) + (0.048952f * y) + (0.953127f * z);
rp *= 0.01f;
gp *= 0.01f;
bp *= 0.01f;
float tmp = pow_F(rp * peakLum, Jzazbz_n);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.f;
}
r = 100.f * pow((Jzazbz_c1 + Jzazbz_c2 * tmp) / (1. + Jzazbz_c3 * tmp), Jzazbz_p);
if(std::isnan(r) || r < 0.f) {
r = 0.f;
}
tmp = pow_F(gp * peakLum, Jzazbz_n);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.f;
}
g = 100.f * pow((Jzazbz_c1 + Jzazbz_c2 * tmp) / (1. + Jzazbz_c3 * tmp), Jzazbz_p);
if(std::isnan(g) || g < 0.f) {
g = 0.f;
}
tmp = pow_F(bp * peakLum, Jzazbz_n);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.f;
}
b = 100.f * pow((Jzazbz_c1 + Jzazbz_c2 * tmp) / (1. + Jzazbz_c3 * tmp), Jzazbz_p);
if(std::isnan(b) || b < 0.f) {
b = 0.f;
}
}
}
#ifdef __SSE2__
void Ciecam02::xyz_to_cat02float ( vfloat &r, vfloat &g, vfloat &b, vfloat x, vfloat y, vfloat z, int c16)
{
void Ciecam02::xyz_to_cat02float ( vfloat &r, vfloat &g, vfloat &b, vfloat x, vfloat y, vfloat z, int c16, vfloat plum)
{ //I use isnan() because I have tested others solutions with std::max(xxx,0) and in some cases crash
//gamut correction M.H.Brill S.Susstrunk
if(c16 == 1) {
r = ( F2V (1.007245f) * x) + (F2V (0.011136f) * y) - (F2V (0.018381f) * z); //Changjun Li
g = (F2V (-0.318061f) * x) + (F2V (1.314589f) * y) + (F2V (0.003471f) * z);
b = z;
} else {
} else if (c16 == 16) {
//cat16
r = ( F2V (0.401288f) * x) + (F2V (0.650173f) * y) - (F2V (0.051461f) * z); //Changjun Li
r = ( F2V (0.401288f) * x) + (F2V (0.650173f) * y) - (F2V (0.051461f) * z);
g = -(F2V (0.250268f) * x) + (F2V (1.204414f) * y) + (F2V (0.045854f) * z);
b = -(F2V(0.002079f) * x) + (F2V(0.048952f) * y) + (F2V(0.953127f) * z);
} else if (c16 == 21) {
vfloat rp = ( F2V (0.401288f) * x) + (F2V (0.650173f) * y) - (F2V (0.051461f) * z);
vfloat gp = -(F2V (0.250268f) * x) + (F2V (1.204414f) * y) + (F2V (0.045854f) * z);
vfloat bp = -(F2V(0.002079f) * x) + (F2V(0.048952f) * y) + (F2V(0.953127f) * z);
vfloat Jzazbz_c1v = F2V(Jzazbz_c1);
vfloat Jzazbz_c2v = F2V(Jzazbz_c2);
vfloat Jzazbz_nv = F2V(Jzazbz_n);
vfloat Jzazbz_c3v = F2V(Jzazbz_c3);
vfloat Jzazbz_pv = F2V(Jzazbz_p);
vfloat mulone = F2V(0.01f);
vfloat mulhund = F2V(100.f);
float RR, GG, BB;
vfloat one = F2V(1.);
vfloat peakLumv = one / plum;
rp *= mulone;
gp *= mulone;
bp *= mulone;
vfloat tmp = pow_F(rp * peakLumv, Jzazbz_nv );
STVF(RR, tmp);
if(std::isnan(RR)) {//to avoid crash
tmp = F2V(0.f);;
}
r = mulhund * pow_F((Jzazbz_c1v + Jzazbz_c2v * tmp) / (one + Jzazbz_c3v * tmp), Jzazbz_pv);
STVF(RR, r);
if(std::isnan(RR) || RR < 0.f) {//to avoid crash
r = F2V(0.f);;
}
tmp = pow_F(gp * peakLumv, Jzazbz_nv );
STVF(RR, tmp);
if(std::isnan(RR)) {//to avoid crash
tmp = F2V(0.f);;
}
g = mulhund * pow_F((Jzazbz_c1v + Jzazbz_c2v * tmp) / (one + Jzazbz_c3v * tmp), Jzazbz_pv);
STVF(GG, g);
if(std::isnan(GG) || GG < 0.f) {//to avoid crash
g = F2V(0.f);;
}
tmp = pow_F(bp * peakLumv, Jzazbz_nv );
STVF(RR, tmp);
if(std::isnan(RR)) {//to avoid crash
tmp = F2V(0.f);;
}
b = mulhund * pow_F((Jzazbz_c1v + Jzazbz_c2v * tmp) / (one + Jzazbz_c3v * tmp), Jzazbz_pv);
STVF(BB, b);
if(std::isnan(BB) || BB < 0.f) {//to avoid crash
b = F2V(0.f);;
}
}
}
#endif
void Ciecam02::cat02_to_xyzfloat ( float &x, float &y, float &z, float r, float g, float b, int c16)
{
void Ciecam02::cat02_to_xyzfloat ( float &x, float &y, float &z, float r, float g, float b, int c16, float plum)
{ //I use isnan() because I have tested others solutions with std::max(xxx,0) and in some cases crash
//original cat02
//x = ( 1.0978566 * r) - (0.277843 * g) + (0.179987 * b);
//y = ( 0.455053 * r) + (0.473938 * g) + (0.0710096* b);
//z = ( 0.000000 * r) - (0.000000 * g) + (1.000000 * b);
float pl = plum;
if(c16 == 1) {
x = ( 0.99015849f * r) - (0.00838772f * g) + (0.018229217f * b); //Changjun Li
y = ( 0.239565979f * r) + (0.758664642f * g) + (0.001770137f * b);
z = ( 0.000000f * r) - (0.000000f * g) + (1.000000f * b);
} else {//cat16
} else if(c16 == 16){//cat16
x = ( 1.86206786f * r) - (1.01125463f * g) + (0.14918677f * b); //Cat16
y = ( 0.38752654f * r) + (0.62144744f * g) + (-0.00897398f * b);
z = ( -0.0158415f * r) - (0.03412294f * g) + (1.04996444f * b);
}else if(c16 == 21){//cam16 PQ
float lp = ( 1.86206786f * r) - (1.01125463f * g) + (0.14918677f * b); //Cat16
float mp = ( 0.38752654f * r) + (0.62144744f * g) + (-0.00897398f * b);
float sp = ( -0.0158415f * r) - (0.03412294f * g) + (1.04996444f * b);
lp *= 0.01f;
float tmp = pow_F(lp, Jzazbz_pi);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.f;
}
float prov = (Jzazbz_c1 - tmp) / ((Jzazbz_c3 * tmp) - Jzazbz_c2);
x = pl * pow_F(prov, Jzazbz_ni);
if(std::isnan(x)) {//to avoid crash
x = 0.f;
}
x *= 100.f;
mp *= 0.01f;
tmp = pow_F(mp, Jzazbz_pi);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.f;
}
prov = (Jzazbz_c1 - tmp) / ((Jzazbz_c3 * tmp) - Jzazbz_c2);
y = pl * pow_F(prov, Jzazbz_ni);
if(std::isnan(y)) {
y = 0.f;
}
y *= 100.f;
sp *= 0.01f;
tmp = pow_F(sp, Jzazbz_pi);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.f;
}
prov = (Jzazbz_c1 - tmp) / ((Jzazbz_c3 * tmp) - Jzazbz_c2);
z = pl * pow_F(prov, Jzazbz_ni);
if(std::isnan(z)) {
z = 0.;
}
z *= 100.f;
}
}
#ifdef __SSE2__
void Ciecam02::cat02_to_xyzfloat ( vfloat &x, vfloat &y, vfloat &z, vfloat r, vfloat g, vfloat b, int c16 )
{
void Ciecam02::cat02_to_xyzfloat ( vfloat &x, vfloat &y, vfloat &z, vfloat r, vfloat g, vfloat b, int c16, vfloat plum )
{ //I use isnan() because I have tested others solutions with std::max(xxx,0) and in some cases crash
vfloat plv = plum;
//gamut correction M.H.Brill S.Susstrunk
if(c16 == 1) {//cat02
x = ( F2V (0.99015849f) * r) - (F2V (0.00838772f) * g) + (F2V (0.018229217f) * b); //Changjun Li
y = ( F2V (0.239565979f) * r) + (F2V (0.758664642f) * g) + (F2V (0.001770137f) * b);
z = b;
} else {
} else if(c16 == 16) {
//cat16
x = ( F2V (1.86206786f) * r) - (F2V (1.01125463f) * g) + (F2V (0.14918677f) * b);
y = ( F2V (0.38752654f) * r) + (F2V (0.621447744f) * g) - (F2V (0.00897398f) * b);
z = -(F2V(0.0158415f) * r) - (F2V(0.03412294f) * g) + (F2V(1.04996444f) * b);
}else if(c16 == 21){//cam16 PQ
vfloat lp = ( F2V (1.86206786f) * r) - (F2V (1.01125463f) * g) + (F2V (0.14918677f) * b);
vfloat mp = ( F2V (0.38752654f) * r) + (F2V (0.621447744f) * g) - (F2V (0.00897398f) * b);
vfloat sp = -(F2V(0.0158415f) * r) - (F2V(0.03412294f) * g) + (F2V(1.04996444f) * b);
float XX,YY,ZZ;
vfloat Jzazbz_c1v = F2V(Jzazbz_c1);
vfloat Jzazbz_c2v = F2V(Jzazbz_c2);
vfloat Jzazbz_c3v = F2V(Jzazbz_c3);
vfloat Jzazbz_piv = F2V(Jzazbz_pi);
vfloat Jzazbz_niv = F2V(Jzazbz_ni);
vfloat mulone = F2V(0.01f);
vfloat mulhund = F2V(100.f);
lp *= mulone;
float pro;
vfloat tmp = pow_F(lp, Jzazbz_piv);
STVF(XX, tmp);
if(std::isnan(XX)) {//to avoid crash
tmp = F2V(0.f);;
}
vfloat prov = (Jzazbz_c1v - tmp) / ((Jzazbz_c3v * tmp) - Jzazbz_c2v);
x = plv * pow_F(prov, Jzazbz_niv);
STVF(XX, x);
if(std::isnan(XX)) {//to avoid crash
x = F2V(0.f);;
}
x *= mulhund;
mp *= mulone;
tmp = pow_F(mp, Jzazbz_piv);
STVF(YY, tmp);
if(std::isnan(YY)) {//to avoid crash
tmp = F2V(0.f);;
}
prov = (Jzazbz_c1v - tmp) / ((Jzazbz_c3v * tmp) - Jzazbz_c2v);
y = plv * pow_F(prov, Jzazbz_niv);
STVF(YY, y);
if(std::isnan(YY)) {//to avoid crash
y = F2V(0.f);;
}
y *= mulhund;
sp *= mulone;
tmp = pow_F(sp, Jzazbz_piv);
STVF(ZZ, tmp);
if(std::isnan(ZZ)) {//to avoid crash
tmp = F2V(0.f);;
}
prov = (Jzazbz_c1v - tmp) / ((Jzazbz_c3v * tmp) - Jzazbz_c2v);
STVF(pro, prov);
z = plv * pow_F(prov, Jzazbz_niv);
STVF(ZZ, z);
if(std::isnan(ZZ)) {//to avoid crash
z = F2V(0.f);;
}
z *= mulhund;
}
}
#endif
@ -429,7 +627,7 @@ void Ciecam02::calculate_abfloat ( vfloat &aa, vfloat &bb, vfloat h, vfloat e, v
#endif
void Ciecam02::initcam1float (float yb, float pilotd, float f, float la, float xw, float yw, float zw, float &n, float &d, float &nbb, float &ncb,
float &cz, float &aw, float &wh, float &pfl, float &fl, float c, int c16)
float &cz, float &aw, float &wh, float &pfl, float &fl, float c, int c16, float plum)
{
n = yb / yw;
@ -442,13 +640,13 @@ void Ciecam02::initcam1float (float yb, float pilotd, float f, float la, float x
fl = calculate_fl_from_la_ciecam02float ( la );
nbb = ncb = 0.725f * pow_F ( 1.0f / n, 0.2f );
cz = 1.48f + sqrt ( n );
aw = achromatic_response_to_whitefloat ( xw, yw, zw, d, fl, nbb, c16);
aw = achromatic_response_to_whitefloat ( xw, yw, zw, d, fl, nbb, c16, plum);
wh = ( 4.0f / c ) * ( aw + 4.0f ) * pow_F ( fl, 0.25f );
pfl = pow_F ( fl, 0.25f );
}
void Ciecam02::initcam2float (float yb, float pilotd, float f, float la, float xw, float yw, float zw, float &n, float &d, float &nbb, float &ncb,
float &cz, float &aw, float &fl, int c16)
float &cz, float &aw, float &fl, int c16, float plum)
{
n = yb / yw;
@ -462,12 +660,135 @@ void Ciecam02::initcam2float (float yb, float pilotd, float f, float la, float x
fl = calculate_fl_from_la_ciecam02float ( la );
nbb = ncb = 0.725f * pow_F ( 1.0f / n, 0.2f );
cz = 1.48f + sqrt ( n );
aw = achromatic_response_to_whitefloat ( xw, yw, zw, d, fl, nbb, c16);
aw = achromatic_response_to_whitefloat ( xw, yw, zw, d, fl, nbb, c16, plum);
}
void Ciecam02::xyz2jzczhz ( double &Jz, double &az, double &bz, double x, double y, double z, double pl, double &Lp, double &Mp, double &Sp, bool zcam)
{ //from various web
double Xp, Yp, Zp, L, M, S, Iz;
double peakLum = 1. / pl;
//I change 10000 for peaklum function of la (absolute luminance)- default 10000
Xp = Jzazbz_b * x - ((Jzazbz_b - 1.) * z);
Yp = Jzazbz_g * y - ((Jzazbz_g - 1.) * x);
Zp = z;
L = 0.41478972 * Xp + 0.579999 * Yp + 0.0146480 * Zp;
M = -0.2015100 * Xp + 1.120649 * Yp + 0.0531008 * Zp;
S = -0.0166008 * Xp + 0.264800 * Yp + 0.6684799 * Zp;
//I use isnan() because I have tested others solutions with std::max(xxx,0) and in some cases crash
// Lp = pow((Jzazbz_c1 + Jzazbz_c2 * pow(std::max((L * peakLum), 0.), Jzazbz_n)) / (1. + Jzazbz_c3 * pow((L * peakLum), Jzazbz_n)), Jzazbz_p);
// Mp = pow((Jzazbz_c1 + Jzazbz_c2 * pow(std::max((M * peakLum),0.), Jzazbz_n)) / (1. + Jzazbz_c3 * pow((M * peakLum), Jzazbz_n)), Jzazbz_p);
// Sp = pow((Jzazbz_c1 + Jzazbz_c2 * pow(std::max((S * peakLum), 0.), Jzazbz_n)) / (1. + Jzazbz_c3 * pow((S * peakLum), Jzazbz_n)), Jzazbz_p);
double temp = pow(L * peakLum, Jzazbz_n);
if(std::isnan(temp)) {//to avoid crash
temp = 0.;
}
Lp = pow((Jzazbz_c1 + Jzazbz_c2 * temp) / (1. + Jzazbz_c3 * temp), Jzazbz_p);
if(std::isnan(Lp)) {//to avoid crash
Lp = 0.;
}
temp = pow(M * peakLum, Jzazbz_n);
if(std::isnan(temp)) {//to avoid crash
temp = 0.;
}
Mp = pow((Jzazbz_c1 + Jzazbz_c2 * temp) / (1. + Jzazbz_c3 * temp), Jzazbz_p);
if(std::isnan(Mp)) {//to avoid crash
Mp = 0.;
}
temp = pow(S * peakLum, Jzazbz_n);
if(std::isnan(temp)) {//to avoid crash
temp = 0.;
}
Sp = pow((Jzazbz_c1 + Jzazbz_c2 * temp) / (1. + Jzazbz_c3 * temp), Jzazbz_p);
if(std::isnan(Sp)) {//to avoid crash
Sp = 0.;
}
Iz = 0.5 * Lp + 0.5 * Mp;
az = 3.524000 * Lp - 4.066708 * Mp + 0.542708 * Sp;
bz = 0.199076 * Lp + 1.096799 * Mp - 1.295875 * Sp;
if(!zcam) {
Jz = (((1. + Jzazbz_d) * Iz) / (1. + Jzazbz_d * Iz)) - Jzazbz_d0;
// Jz = std::max((((1. + Jzazbz_d) * Iz) / (1. + Jzazbz_d * Iz)) - Jzazbz_d0, 0.);
} else {
//or if we use ZCAM Jz = Mp - Jzazbz_d0
Jz = Mp - Jzazbz_d0;
}
}
void Ciecam02::jzczhzxyz (double &x, double &y, double &z, double jz, double az, double bz, double pl, double &L, double &M, double &S, bool zcam)
{ //from various web
//I use isnan() because I have tested others solutions with std::max(xxx,0) and in some cases crash
double Xp, Yp, Zp, Lp, Mp, Sp, Iz, tmp;
if(!zcam) {
// Iz = std::max((jz + Jzazbz_d0) / (1. + Jzazbz_d - Jzazbz_d * (jz + Jzazbz_d0)), 0.);
Iz = (jz + Jzazbz_d0) / (1. + Jzazbz_d - Jzazbz_d * (jz + Jzazbz_d0));
} else {
//or if we use ZCAM Iz = Jz + Jzazbz_d0
Iz = jz + Jzazbz_d0;
}
Lp = Iz + 0.138605043271539 * az + 0.0580473161561189 * bz;
Mp = Iz - 0.138605043271539 * az - 0.0580473161561189 * bz;
Sp = Iz - 0.0960192420263189 * az - 0.811891896056039 * bz;
//I change optionnaly 10000 for pl function of la(absolute luminance) default 10000
tmp = pow(Lp, Jzazbz_pi);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.;
}
L = pl * pow((Jzazbz_c1 - tmp) / ((Jzazbz_c3 * tmp) - Jzazbz_c2), Jzazbz_ni);
if(std::isnan(L)) {//to avoid crash
L = 0.;
}
tmp = pow(Mp, Jzazbz_pi);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.;
}
M = pl * pow((Jzazbz_c1 - tmp) / ((Jzazbz_c3 * tmp) - Jzazbz_c2), Jzazbz_ni);
if(std::isnan(M)) {//to avoid crash
M = 0.;
}
tmp = pow(Sp, Jzazbz_pi);
if(std::isnan(tmp)) {//to avoid crash
tmp = 0.;
}
S = pl * pow((Jzazbz_c1 - tmp) / ((Jzazbz_c3 * tmp) - Jzazbz_c2), Jzazbz_ni);
if(std::isnan(S)) {//to avoid crash
S = 0.;
}
Xp = 1.9242264357876067 * L - 1.0047923125953657 * M + 0.0376514040306180 * S;
Yp = 0.3503167620949991 * L + 0.7264811939316552 * M - 0.0653844229480850 * S;
Zp = -0.0909828109828475 * L - 0.3127282905230739 * M + 1.5227665613052603 * S;
x = (Xp + (Jzazbz_b - 1.) * Zp) / Jzazbz_b;
if(std::isnan(x)) {//to avoid crash
x = 0.;
}
y = (Yp + (Jzazbz_g - 1.) * x) / Jzazbz_g;
if(std::isnan(y)) {
y = 0.;
}
z = Zp;
if(std::isnan(z)) {
z = 0.;
}
}
void Ciecam02::xyz2jchqms_ciecam02float ( float &J, float &C, float &h, float &Q, float &M, float &s, float aw, float fl, float wh,
float x, float y, float z, float xw, float yw, float zw,
float c, float nc, float pow1, float nbb, float ncb, float pfl, float cz, float d, int c16)
float c, float nc, float pow1, float nbb, float ncb, float pfl, float cz, float d, int c16, float plum)
{
float r, g, b;
@ -478,8 +799,8 @@ void Ciecam02::xyz2jchqms_ciecam02float ( float &J, float &C, float &h, float &Q
float a, ca, cb;
float e, t;
float myh;
xyz_to_cat02float ( r, g, b, x, y, z, c16);
xyz_to_cat02float ( rw, gw, bw, xw, yw, zw, c16);
xyz_to_cat02float ( r, g, b, x, y, z, c16, plum);
xyz_to_cat02float ( rw, gw, bw, xw, yw, zw, c16, plum);
rc = r * (((yw * d) / rw) + (1.f - d));
gc = g * (((yw * d) / gw) + (1.f - d));
bc = b * (((yw * d) / bw) + (1.f - d));
@ -530,7 +851,7 @@ void Ciecam02::xyz2jchqms_ciecam02float ( float &J, float &C, float &h, float &Q
#ifdef __SSE2__
void Ciecam02::xyz2jchqms_ciecam02float ( vfloat &J, vfloat &C, vfloat &h, vfloat &Q, vfloat &M, vfloat &s, vfloat aw, vfloat fl, vfloat wh,
vfloat x, vfloat y, vfloat z, vfloat xw, vfloat yw, vfloat zw,
vfloat c, vfloat nc, vfloat pow1, vfloat nbb, vfloat ncb, vfloat pfl, vfloat cz, vfloat d, int c16)
vfloat c, vfloat nc, vfloat pow1, vfloat nbb, vfloat ncb, vfloat pfl, vfloat cz, vfloat d, int c16, vfloat plum)
{
vfloat r, g, b;
@ -541,8 +862,8 @@ void Ciecam02::xyz2jchqms_ciecam02float ( vfloat &J, vfloat &C, vfloat &h, vfloa
vfloat a, ca, cb;
vfloat e, t;
xyz_to_cat02float ( r, g, b, x, y, z, c16);
xyz_to_cat02float ( rw, gw, bw, xw, yw, zw, c16);
xyz_to_cat02float ( r, g, b, x, y, z, c16, plum);
xyz_to_cat02float ( rw, gw, bw, xw, yw, zw, c16, plum);
vfloat onev = F2V (1.f);
rc = r * (((yw * d) / rw) + (onev - d));
gc = g * (((yw * d) / gw) + (onev - d));
@ -595,7 +916,7 @@ void Ciecam02::xyz2jchqms_ciecam02float ( vfloat &J, vfloat &C, vfloat &h, vfloa
void Ciecam02::xyz2jch_ciecam02float ( float &J, float &C, float &h, float aw, float fl,
float x, float y, float z, float xw, float yw, float zw,
float c, float nc, float pow1, float nbb, float ncb, float cz, float d, int c16)
float c, float nc, float pow1, float nbb, float ncb, float cz, float d, int c16, float plum)
{
float r, g, b;
@ -606,8 +927,8 @@ void Ciecam02::xyz2jch_ciecam02float ( float &J, float &C, float &h, float aw, f
float a, ca, cb;
float e, t;
float myh;
xyz_to_cat02float ( r, g, b, x, y, z, c16);
xyz_to_cat02float ( rw, gw, bw, xw, yw, zw, c16);
xyz_to_cat02float ( r, g, b, x, y, z, c16, plum);
xyz_to_cat02float ( rw, gw, bw, xw, yw, zw, c16, plum);
rc = r * (((yw * d) / rw) + (1.f - d));
gc = g * (((yw * d) / gw) + (1.f - d));
bc = b * (((yw * d) / bw) + (1.f - d));
@ -664,7 +985,7 @@ void Ciecam02::xyz2jch_ciecam02float ( float &J, float &C, float &h, float aw, f
void Ciecam02::jch2xyz_ciecam02float ( float &x, float &y, float &z, float J, float C, float h,
float xw, float yw, float zw,
float c, float nc, float pow1, float nbb, float ncb, float fl, float cz, float d, float aw, int c16)
float c, float nc, float pow1, float nbb, float ncb, float fl, float cz, float d, float aw, int c16, float plum)
{
float r, g, b;
float rc, gc, bc;
@ -673,7 +994,7 @@ void Ciecam02::jch2xyz_ciecam02float ( float &x, float &y, float &z, float J, fl
float rw, gw, bw;
float a, ca, cb;
float e, t;
xyz_to_cat02float(rw, gw, bw, xw, yw, zw, c16);
xyz_to_cat02float(rw, gw, bw, xw, yw, zw, c16, plum);
e = ((961.53846f) * nc * ncb) * (xcosf(h * rtengine::RT_PI_F_180 + 2.0f) + 3.8f);
#ifdef __SSE2__
@ -705,7 +1026,7 @@ void Ciecam02::jch2xyz_ciecam02float ( float &x, float &y, float &z, float J, fl
if(c16 == 1) {//cat02
hpe_to_xyzfloat(x, y, z, rp, gp, bp, c16);
xyz_to_cat02float(rc, gc, bc, x, y, z, c16);
xyz_to_cat02float(rc, gc, bc, x, y, z, c16, plum);
r = rc / (((yw * d) / rw) + (1.0f - d));
g = gc / (((yw * d) / gw) + (1.0f - d));
@ -716,13 +1037,13 @@ void Ciecam02::jch2xyz_ciecam02float ( float &x, float &y, float &z, float J, fl
b = bp / (((yw * d) / bw) + (1.0f - d));
}
cat02_to_xyzfloat(x, y, z, r, g, b, c16);
cat02_to_xyzfloat(x, y, z, r, g, b, c16, plum);
}
#ifdef __SSE2__
void Ciecam02::jch2xyz_ciecam02float ( vfloat &x, vfloat &y, vfloat &z, vfloat J, vfloat C, vfloat h,
vfloat xw, vfloat yw, vfloat zw,
vfloat nc, vfloat pow1, vfloat nbb, vfloat ncb, vfloat fl, vfloat d, vfloat aw, vfloat reccmcz, int c16)
vfloat nc, vfloat pow1, vfloat nbb, vfloat ncb, vfloat fl, vfloat d, vfloat aw, vfloat reccmcz, int c16, vfloat plum)
{
vfloat r, g, b;
vfloat rc, gc, bc;
@ -731,7 +1052,7 @@ void Ciecam02::jch2xyz_ciecam02float ( vfloat &x, vfloat &y, vfloat &z, vfloat J
vfloat rw, gw, bw;
vfloat a, ca, cb;
vfloat e, t;
xyz_to_cat02float ( rw, gw, bw, xw, yw, zw, c16);
xyz_to_cat02float ( rw, gw, bw, xw, yw, zw, c16, plum);
e = ((F2V (961.53846f)) * nc * ncb) * (xcosf ( ((h * F2V (rtengine::RT_PI)) / F2V (180.0f)) + F2V (2.0f) ) + F2V (3.8f));
a = pow_F ( J / F2V (100.0f), reccmcz ) * aw;
t = pow_F ( F2V (10.f) * C / (vsqrtf ( J ) * pow1), F2V (1.1111111f) );
@ -745,7 +1066,7 @@ void Ciecam02::jch2xyz_ciecam02float ( vfloat &x, vfloat &y, vfloat &z, vfloat J
if(c16 == 1) {//cat02
hpe_to_xyzfloat ( x, y, z, rp, gp, bp, c16);
xyz_to_cat02float ( rc, gc, bc, x, y, z, c16 );
xyz_to_cat02float ( rc, gc, bc, x, y, z, c16, plum );
r = rc / (((yw * d) / rw) + (F2V (1.0f) - d));
g = gc / (((yw * d) / gw) + (F2V (1.0f) - d));
@ -756,7 +1077,7 @@ void Ciecam02::jch2xyz_ciecam02float ( vfloat &x, vfloat &y, vfloat &z, vfloat J
b = bp / (((yw * d) / bw) + (F2V (1.0f) - d));
}
cat02_to_xyzfloat ( x, y, z, r, g, b, c16 );
cat02_to_xyzfloat ( x, y, z, r, g, b, c16, plum );
}
#endif

View File

@ -37,12 +37,12 @@ class Ciecam02
private:
static float d_factorfloat ( float f, float la );
static float calculate_fl_from_la_ciecam02float ( float la );
static float achromatic_response_to_whitefloat ( float x, float y, float z, float d, float fl, float nbb, int c16);
static void xyz_to_cat02float ( float &r, float &g, float &b, float x, float y, float z, int c16);
static float achromatic_response_to_whitefloat ( float x, float y, float z, float d, float fl, float nbb, int c16, float plum);
static void xyz_to_cat02float ( float &r, float &g, float &b, float x, float y, float z, int c16, float plum);
static void cat02_to_hpefloat ( float &rh, float &gh, float &bh, float r, float g, float b, int c16);
#ifdef __SSE2__
static void xyz_to_cat02float ( vfloat &r, vfloat &g, vfloat &b, vfloat x, vfloat y, vfloat z, int c16);
static void xyz_to_cat02float ( vfloat &r, vfloat &g, vfloat &b, vfloat x, vfloat y, vfloat z, int c16, vfloat plum);
static void cat02_to_hpefloat ( vfloat &rh, vfloat &gh, vfloat &bh, vfloat r, vfloat g, vfloat b, int c16);
static vfloat nonlinear_adaptationfloat ( vfloat c, vfloat fl );
#endif
@ -53,13 +53,13 @@ private:
static void calculate_abfloat ( float &aa, float &bb, float h, float e, float t, float nbb, float a );
static void Aab_to_rgbfloat ( float &r, float &g, float &b, float A, float aa, float bb, float nbb );
static void hpe_to_xyzfloat ( float &x, float &y, float &z, float r, float g, float b, int c16);
static void cat02_to_xyzfloat ( float &x, float &y, float &z, float r, float g, float b, int c16);
static void cat02_to_xyzfloat ( float &x, float &y, float &z, float r, float g, float b, int c16, float plum);
#ifdef __SSE2__
static vfloat inverse_nonlinear_adaptationfloat ( vfloat c, vfloat fl );
static void calculate_abfloat ( vfloat &aa, vfloat &bb, vfloat h, vfloat e, vfloat t, vfloat nbb, vfloat a );
static void Aab_to_rgbfloat ( vfloat &r, vfloat &g, vfloat &b, vfloat A, vfloat aa, vfloat bb, vfloat nbb );
static void hpe_to_xyzfloat ( vfloat &x, vfloat &y, vfloat &z, vfloat r, vfloat g, vfloat b, int c16);
static void cat02_to_xyzfloat ( vfloat &x, vfloat &y, vfloat &z, vfloat r, vfloat g, vfloat b, int c16);
static void cat02_to_xyzfloat ( vfloat &x, vfloat &y, vfloat &z, vfloat r, vfloat g, vfloat b, int c16, vfloat plum);
#endif
public:
@ -67,46 +67,52 @@ public:
static void curvecolorfloat (float satind, float satval, float &sres, float parsat);
static void curveJfloat (float br, float contr, float thr, const LUTu & histogram, LUTf & outCurve ) ;
static void xyz2jzczhz (double &Jz, double &az, double &bz, double x, double y, double z, double pl, double &Lp, double &Mp, double &Sp, bool zcam);
static void jzczhzxyz (double &x, double &y, double &z, double Jz, double az, double bz, double pl, double &L, double &M, double &S, bool zcam);
/**
* Inverse transform from CIECAM02 JCh to XYZ.
*/
static void jch2xyz_ciecam02float ( float &x, float &y, float &z,
float J, float C, float h,
float xw, float yw, float zw,
float c, float nc, float n, float nbb, float ncb, float fl, float cz, float d, float aw, int c16);
float c, float nc, float n, float nbb, float ncb, float fl, float cz, float d, float aw, int c16, float plum);
#ifdef __SSE2__
static void jch2xyz_ciecam02float ( vfloat &x, vfloat &y, vfloat &z,
vfloat J, vfloat C, vfloat h,
vfloat xw, vfloat yw, vfloat zw,
vfloat nc, vfloat n, vfloat nbb, vfloat ncb, vfloat fl, vfloat d, vfloat aw, vfloat reccmcz, int c16 );
vfloat nc, vfloat n, vfloat nbb, vfloat ncb, vfloat fl, vfloat d, vfloat aw, vfloat reccmcz, int c16, vfloat plum );
#endif
/**
* Forward transform from XYZ to CIECAM02 JCh.
*/
static void initcam1float (float yb, float pilotd, float f, float la, float xw, float yw, float zw, float &n, float &d, float &nbb, float &ncb,
float &cz, float &aw, float &wh, float &pfl, float &fl, float c, int c16);
float &cz, float &aw, float &wh, float &pfl, float &fl, float c, int c16, float plum);
static void initcam2float (float yb, float pilotd, float f, float la, float xw, float yw, float zw, float &n, float &d, float &nbb, float &ncb,
float &cz, float &aw, float &fl, int c16);
float &cz, float &aw, float &fl, int c16, float plum);
static void xyz2jch_ciecam02float ( float &J, float &C, float &h,
float aw, float fl,
float x, float y, float z,
float xw, float yw, float zw,
float c, float nc, float n, float nbb, float ncb, float cz, float d, int c16);
float c, float nc, float n, float nbb, float ncb, float cz, float d, int c16, float plum);
static void xyz2jchqms_ciecam02float ( float &J, float &C, float &h,
float &Q, float &M, float &s, float aw, float fl, float wh,
float x, float y, float z,
float xw, float yw, float zw,
float c, float nc, float n, float nbb, float ncb, float pfl, float cz, float d, int c16);
float c, float nc, float n, float nbb, float ncb, float pfl, float cz, float d, int c16, float plum);
#ifdef __SSE2__
static void xyz2jchqms_ciecam02float ( vfloat &J, vfloat &C, vfloat &h,
vfloat &Q, vfloat &M, vfloat &s, vfloat aw, vfloat fl, vfloat wh,
vfloat x, vfloat y, vfloat z,
vfloat xw, vfloat yw, vfloat zw,
vfloat c, vfloat nc, vfloat n, vfloat nbb, vfloat ncb, vfloat pfl, vfloat cz, vfloat d, int c16);
vfloat c, vfloat nc, vfloat n, vfloat nbb, vfloat ncb, vfloat pfl, vfloat cz, vfloat d, int c16, vfloat plum);
#endif

View File

@ -1889,6 +1889,59 @@ static inline void Lab2XYZ(vfloat L, vfloat a, vfloat b, vfloat &x, vfloat &y, v
return (hr);
}
static inline double huejz_to_huehsv2 (float HH)
{
//hr=translate Hue Jz value (-Pi +Pi) in approximative hr (hsv values) (0 1)
// with multi linear correspondences (I expect another time with Jz there is no error !!)
double hr = 0.0;
//always put h between 0 and 1
// make with my chart 468 colors...
// HH ==> Hz value ; hr HSv value
if (HH >= 0.2f && HH < 0.75f) {
hr = 0.12727273 * double(HH) + 0.90454551;//hr 0.93 1.00 full red
} else if (HH >= 0.75f && HH < 1.35f) {
hr = 0.15 * double(HH) - 0.1125;//hr 0.00 0.09 red yellow orange
} else if (HH >= 1.35f && HH < 1.85f) {
hr = 0.32 * double(HH) - 0.342; //hr 0.09 0.25 orange yellow
} else if (HH >= 1.85f && HH < 2.46f) {
hr = 0.23442623 * double(HH) -0.18368853;//hr 0.25 0.393 yellow green green
} else if (HH >= 2.46f && HH < 3.14159f) {
hr = 0.177526 * double(HH) -0.043714;//hr 0.393 0.51315 green ==> 0.42 Lab
} else if (HH >= -3.14159f && HH < -2.89f) {
hr = 0.3009078 * double(HH) + 1.459329;//hr 0.51315 0.5897 green cyan ==> -2.30 Lab
} else if (HH >= -2.89f && HH < -2.7f) {
hr = 0.204542 * double(HH) + 1.1808264;//hr 0.5897 0.628563 cyan
} else if (HH >= -2.7f && HH < -2.17f) {
hr = 0.121547 * double(HH) + 0.956399;//hr 0.628563 0.692642 blue blue-sky
} else if (HH >= -2.17f && HH < -0.9f) {
hr = 0.044882 * double(HH) + 0.789901;//hr 0.692642 0.749563 blue blue-sky
} else if (HH >= -0.9f && HH < -0.1f) {
hr = 0.2125 * double(HH) + 0.940813;//hr 0.749563 0.919563 purple magenta
} else if (HH >= -0.1f && HH < 0.2f) {
hr = 0.03479 * double(HH) + 0.923042;//hr 0.919563 0.93 red
}
// in case of !
if (hr < 0.0) {
hr += 1.0;
} else if(hr > 1.0) {
hr -= 1.0;
}
return (hr);
}
// HSV 0.93 1.0 red - Lab 0.0 0.6 Jz 0.20 0.75
// HSV 0.00 0.9 red orange - Lab 0.6 1.4 Jz 0.50 1.35
// HSV 0.09 0.25 oran - yellow - Lab 1.4 2.0 Jz 1.35 1.85
// HSV 0.25 0.39 yellow - gree - Lab 2.0 3.0 Jz 1.85 2.40
// HSV 0.39 0.50 green - cyan Lab 3.0 -2.8 Jz 2.40 3.10
// HSV 0.50 0.58 cyan Lab-2.8 -2.3 Jz 3.10 -2.90
// HSV 0.58 0.69 blue - sky Lab-2.3 -1.3 Jz -2.90 -2.17
// HSV 0.69 0.75 blue - Lab-1.3 -0.9 Jz -2.17 -0.90
// HSV 0.75 0.92 purple - Lab-0.9 -0.1 Jz -0.9 -0.10
// HSV 0.92 0.93 magenta Lab-0.1 0.0 Jz -0.1 0.20
static inline void RGB2Y(const float* R, const float* G, const float* B, float* Y1, float * Y2, int W) {
int i = 0;
#ifdef __SSE2__

View File

@ -3460,12 +3460,13 @@ void PerceptualToneCurve::BatchApply(const size_t start, const size_t end, float
Color::Prophotoxyz(r, g, b, x, y, z);
float J, C, h;
int c16 = 1;
int c16 = 1;//always Cat02....to reserve compatibility
float plum = 100.f;
Ciecam02::xyz2jch_ciecam02float(J, C, h,
aw, fl,
x * 0.0015259022f, y * 0.0015259022f, z * 0.0015259022f,
xw, yw, zw,
c, nc, pow1, nbb, ncb, cz, d, c16);
c, nc, pow1, nbb, ncb, cz, d, c16, plum);
if (!isfinite(J) || !isfinite(C) || !isfinite(h)) {
@ -3583,7 +3584,7 @@ void PerceptualToneCurve::BatchApply(const size_t start, const size_t end, float
Ciecam02::jch2xyz_ciecam02float(x, y, z,
J, C, h,
xw, yw, zw,
c, nc, pow1, nbb, ncb, fl, cz, d, aw, c16);
c, nc, pow1, nbb, ncb, fl, cz, d, aw, c16, plum);
if (!isfinite(x) || !isfinite(y) || !isfinite(z)) {
// can happen for colours on the rim of being outside gamut, that worked without chroma scaling but not with. Then we return only the curve's result.
@ -3699,8 +3700,9 @@ void PerceptualToneCurve::init()
c = 0.69f;
nc = 1.00f;
int c16 = 1;//with cat02 for compatibility
float plum = 100.f;
Ciecam02::initcam1float(yb, 1.f, f, la, xw, yw, zw, n, d, nbb, ncb,
cz, aw, wh, pfl, fl, c, c16);
cz, aw, wh, pfl, fl, c, c16, plum);
pow1 = pow_F(1.64f - pow_F(0.29f, n), 0.73f);
{

View File

@ -872,6 +872,12 @@ void Crop::update(int todo)
auto& lmaskbllocalcurve2 = parent->lmaskbllocalcurve;
auto& lmasklclocalcurve2 = parent->lmasklclocalcurve;
auto& lmaskloglocalcurve2 = parent->lmaskloglocalcurve;
auto& lmaskcielocalcurve2 = parent->lmaskcielocalcurve;
auto& cielocalcurve2 = parent->cielocalcurve;
auto& cielocalcurve22 = parent->cielocalcurve2;
auto& jzlocalcurve2 = parent->jzlocalcurve;
auto& czlocalcurve2 = parent->czlocalcurve;
auto& czjzlocalcurve2 = parent->czjzlocalcurve;
auto& hltonecurveloc2 = parent->hltonecurveloc;
auto& shtonecurveloc2 = parent->shtonecurveloc;
auto& tonecurveloc2 = parent->tonecurveloc;
@ -881,6 +887,9 @@ void Crop::update(int todo)
auto& loclhCurve = parent->loclhCurve;
auto& lochhCurve = parent->lochhCurve;
auto& locchCurve = parent->locchCurve;
auto& lochhCurvejz = parent->lochhCurvejz;
auto& locchCurvejz = parent->locchCurvejz;
auto& loclhCurvejz = parent->loclhCurvejz;
auto& locccmasCurve = parent->locccmasCurve;
auto& locllmasCurve = parent->locllmasCurve;
auto& lochhmasCurve = parent->lochhmasCurve;
@ -912,12 +921,16 @@ void Crop::update(int todo)
auto& locccmaslogCurve = parent->locccmaslogCurve;
auto& locllmaslogCurve = parent->locllmaslogCurve;
auto& lochhmaslogCurve = parent->lochhmaslogCurve;
auto& locccmascieCurve = parent->locccmascieCurve;
auto& locllmascieCurve = parent->locllmascieCurve;
auto& lochhmascieCurve = parent->lochhmascieCurve;
auto& locccmas_Curve = parent->locccmas_Curve;
auto& locllmas_Curve = parent->locllmas_Curve;
auto& lochhmas_Curve = parent->lochhmas_Curve;
auto& lochhhmas_Curve = parent->lochhhmas_Curve;
auto& locwavCurve = parent->locwavCurve;
auto& locwavCurvejz = parent->locwavCurvejz;
auto& loclmasCurveblwav = parent->loclmasCurveblwav;
auto& loclmasCurvecolwav = parent->loclmasCurvecolwav;
auto& loclevwavCurve = parent->loclevwavCurve;
@ -929,13 +942,25 @@ void Crop::update(int todo)
auto& locwavCurveden = parent->locwavCurveden;
auto& lmasklocal_curve2 = parent->lmasklocal_curve;
auto& loclmasCurve_wav = parent->loclmasCurve_wav;
// const int sizespot = (int)params.locallab.spots.size();
/* float *huerefp = nullptr;
huerefp = new float[sizespot];
float *chromarefp = nullptr;
chromarefp = new float[sizespot];
float *lumarefp = nullptr;
lumarefp = new float[sizespot];
float *fabrefp = nullptr;
fabrefp = new float[sizespot];
*/
for (int sp = 0; sp < (int)params.locallab.spots.size(); sp++) {
locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve);
locRETtransCurve.Set(params.locallab.spots.at(sp).localTtranscurve);
const bool LHutili = loclhCurve.Set(params.locallab.spots.at(sp).LHcurve);
const bool HHutili = lochhCurve.Set(params.locallab.spots.at(sp).HHcurve);
const bool CHutili = locchCurve.Set(params.locallab.spots.at(sp).CHcurve);
const bool HHutilijz = lochhCurvejz.Set(params.locallab.spots.at(sp).HHcurvejz);
const bool CHutilijz = locchCurvejz.Set(params.locallab.spots.at(sp).CHcurvejz);
const bool LHutilijz = loclhCurvejz.Set(params.locallab.spots.at(sp).LHcurvejz);
const bool lcmasutili = locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve);
const bool llmasutili = locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve);
const bool lhmasutili = lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve);
@ -964,6 +989,9 @@ void Crop::update(int todo)
const bool lcmaslogutili = locccmaslogCurve.Set(params.locallab.spots.at(sp).CCmaskcurveL);
const bool llmaslogutili = locllmaslogCurve.Set(params.locallab.spots.at(sp).LLmaskcurveL);
const bool lhmaslogutili = lochhmaslogCurve.Set(params.locallab.spots.at(sp).HHmaskcurveL);
const bool lcmascieutili = locccmascieCurve.Set(params.locallab.spots.at(sp).CCmaskciecurve);
const bool llmascieutili = locllmascieCurve.Set(params.locallab.spots.at(sp).LLmaskciecurve);
const bool lhmascieutili = lochhmascieCurve.Set(params.locallab.spots.at(sp).HHmaskciecurve);
const bool lcmas_utili = locccmas_Curve.Set(params.locallab.spots.at(sp).CCmask_curve);
const bool llmas_utili = locllmas_Curve.Set(params.locallab.spots.at(sp).LLmask_curve);
@ -976,6 +1004,7 @@ void Crop::update(int todo)
const bool llmaslcutili = locllmaslcCurve.Set(params.locallab.spots.at(sp).LLmasklccurve);
const bool lhmaslcutili = lochhmaslcCurve.Set(params.locallab.spots.at(sp).HHmasklccurve);
const bool locwavutili = locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve);
const bool locwavutilijz = locwavCurvejz.Set(params.locallab.spots.at(sp).locwavcurvejz);
const bool locwavhueutili = locwavCurvehue.Set(params.locallab.spots.at(sp).locwavcurvehue);
const bool locwavdenutili = locwavCurveden.Set(params.locallab.spots.at(sp).locwavcurveden);
const bool loclevwavutili = loclevwavCurve.Set(params.locallab.spots.at(sp).loclevwavcurve);
@ -1000,6 +1029,12 @@ void Crop::update(int todo)
const bool localmaskblutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve2, skip);
const bool localmasklogutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).LmaskcurveL, lmaskloglocalcurve2, skip);
const bool localmask_utili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).Lmask_curve, lmasklocal_curve2, skip);
const bool localmaskcieutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).Lmaskciecurve, lmaskcielocalcurve2, skip);
const bool localcieutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).ciecurve, cielocalcurve2, skip);
const bool localcieutili2 = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).ciecurve2, cielocalcurve22, skip);
const bool localjzutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).jzcurve, jzlocalcurve2, skip);
const bool localczutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).czcurve, czlocalcurve2, skip);
const bool localczjzutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).czjzcurve, czjzlocalcurve2, skip);
double ecomp = params.locallab.spots.at(sp).expcomp;
double black = params.locallab.spots.at(sp).black;
@ -1025,7 +1060,7 @@ void Crop::update(int todo)
float stdtme = parent->stdtms[sp];
float meanretie = parent->meanretis[sp];
float stdretie = parent->stdretis[sp];
float fab = 1.f;
float minCD;
float maxCD;
float mini;
@ -1035,6 +1070,11 @@ void Crop::update(int todo)
float Tmin;
float Tmax;
int lastsav;
/* huerefp[sp] = huere;
chromarefp[sp] = chromare;
lumarefp[sp] = lumare;
*/
CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumare,
hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, avge,
skip);
@ -1049,6 +1089,8 @@ void Crop::update(int todo)
cllocalcurve2, localclutili,
lclocalcurve2, locallcutili,
loclhCurve, lochhCurve, locchCurve,
lochhCurvejz, locchCurvejz, loclhCurvejz,
lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili,
lmaskSHlocalcurve2, localmaskSHutili,
@ -1060,6 +1102,12 @@ void Crop::update(int todo)
lmasklclocalcurve2, localmasklcutili,
lmaskloglocalcurve2, localmasklogutili,
lmasklocal_curve2, localmask_utili,
lmaskcielocalcurve2, localmaskcieutili,
cielocalcurve2,localcieutili,
cielocalcurve22,localcieutili2,
jzlocalcurve2,localjzutili,
czlocalcurve2,localczutili,
czjzlocalcurve2,localczjzutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
@ -1072,10 +1120,13 @@ void Crop::update(int todo)
locccmaslogCurve, lcmaslogutili, locllmaslogCurve, llmaslogutili, lochhmaslogCurve, lhmaslogutili,
locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili,
locccmascieCurve, lcmascieutili, locllmascieCurve, llmasSHutili, lochhmascieCurve, lhmascieutili,
lochhhmas_Curve, lhhmas_utili,
loclmasCurveblwav,lmasutiliblwav,
loclmasCurvecolwav,lmasutilicolwav,
locwavCurve, locwavutili,
locwavCurvejz, locwavutilijz,
loclevwavCurve, loclevwavutili,
locconwavCurve, locconwavutili,
loccompwavCurve, loccompwavutili,
@ -1084,12 +1135,14 @@ void Crop::update(int todo)
locwavCurveden, locwavdenutili,
locedgwavCurve, locedgwavutili,
loclmasCurve_wav,lmasutili_wav,
LHutili, HHutili, CHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav,
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, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
meantme, stdtme, meanretie, stdretie);
if (parent->previewDeltaE || parent->locallColorMask == 5 || parent->locallvibMask == 4 || parent->locallExpMask == 5 || parent->locallSHMask == 4 || parent->localllcMask == 4 || parent->localltmMask == 4 || parent->localllogMask == 4 || parent->locallsoftMask == 6 || parent->localllcMask == 4) {
parent->localllogMask, parent->locall_Mask, parent->locallcieMask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
meantme, stdtme, meanretie, stdretie, fab);
// fabrefp[sp] = fab;
if (parent->previewDeltaE || parent->locallColorMask == 5 || parent->locallvibMask == 4 || parent->locallExpMask == 5 || parent->locallSHMask == 4 || parent->localllcMask == 4 || parent->localltmMask == 4 || parent->localllogMask == 4 || parent->locallsoftMask == 6 || parent->localllcMask == 4 || parent->locallcieMask == 4) {
params.blackwhite.enabled = false;
params.colorToning.enabled = false;
params.rgbCurves.enabled = false;
@ -1112,12 +1165,20 @@ void Crop::update(int todo)
params.epd.enabled = false;
params.softlight.enabled = false;
}
/*
if (parent->locallListener) {
parent->locallListener->refChanged2(huerefp, chromarefp, lumarefp, fabrefp, params.locallab.selspot);
}
*/
} else {
parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), savenormtmCrop.get(), savenormretiCrop.get(), lastorigCrop.get(), fw, fh, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
lllocalcurve2,locallutili,
cllocalcurve2, localclutili,
lclocalcurve2, locallcutili,
loclhCurve, lochhCurve, locchCurve,
lochhCurvejz, locchCurvejz, loclhCurvejz,
lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili,
lmaskSHlocalcurve2, localmaskSHutili,
@ -1129,6 +1190,12 @@ void Crop::update(int todo)
lmasklclocalcurve2, localmasklcutili,
lmaskloglocalcurve2, localmasklogutili,
lmasklocal_curve2, localmask_utili,
lmaskcielocalcurve2, localmaskcieutili,
cielocalcurve2,localcieutili,
cielocalcurve22,localcieutili2,
jzlocalcurve2,localjzutili,
czlocalcurve2,localczutili,
czjzlocalcurve2,localczjzutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili,lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
@ -1141,11 +1208,13 @@ void Crop::update(int todo)
locccmaslogCurve, lcmaslogutili, locllmaslogCurve, llmaslogutili, lochhmaslogCurve, lhmaslogutili,
locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili,
locccmascieCurve, lcmascieutili, locllmascieCurve, llmascieutili, lochhmascieCurve, lhmascieutili,
lochhhmas_Curve, lhhmas_utili,
loclmasCurveblwav,lmasutiliblwav,
loclmasCurvecolwav,lmasutilicolwav,
locwavCurve, locwavutili,
locwavCurvejz, locwavutilijz,
loclevwavCurve, loclevwavutili,
locconwavCurve, locconwavutili,
loccompwavCurve, loccompwavutili,
@ -1154,10 +1223,10 @@ void Crop::update(int todo)
locwavCurveden, locwavdenutili,
locedgwavCurve, locedgwavutili,
loclmasCurve_wav,lmasutili_wav,
LHutili, HHutili, CHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
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,
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
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);
meantme, stdtme, meanretie, stdretie, fab);
}
if (sp + 1u < params.locallab.spots.size()) {
// do not copy for last spot as it is not needed anymore
@ -1168,6 +1237,13 @@ void Crop::update(int todo)
Glib::usleep(settings->cropsleep); //wait to avoid crash when crop 100% and move window
}
}
/*
delete [] huerefp;
delete [] chromarefp;
delete [] lumarefp;
delete [] fabrefp;
*/
parent->ipf.lab2rgb(*labnCrop, *baseCrop, params.icm.workingProfile);
}
@ -1548,8 +1624,9 @@ void Crop::update(int todo)
adap = 2000.;
} else {
double E_V = fcomp + log2(double ((fnum * fnum) / fspeed / (fiso / 100.f)));
E_V += params.toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV
E_V += log2(params.raw.expos); // exposure raw white point ; log2 ==> linear to EV
double kexp = 0.;
E_V += kexp * params.toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV
E_V += 0.5 * log2(params.raw.expos); // exposure raw white point ; log2 ==> linear to EV
adap = pow(2., E_V - 3.); // cd / m2
// end calculation adaptation scene luminosity
}

View File

@ -216,6 +216,12 @@ ImProcCoordinator::ImProcCoordinator() :
lmasklclocalcurve(65536, LUT_CLIP_OFF),
lmaskloglocalcurve(65536, LUT_CLIP_OFF),
lmasklocal_curve(65536, LUT_CLIP_OFF),
lmaskcielocalcurve(65536, LUT_CLIP_OFF),
cielocalcurve(65536, LUT_CLIP_OFF),
cielocalcurve2(65536, LUT_CLIP_OFF),
jzlocalcurve(65536, LUT_CLIP_OFF),
czlocalcurve(65536, LUT_CLIP_OFF),
czjzlocalcurve(65536, LUT_CLIP_OFF),
lastspotdup(false),
previewDeltaE(false),
locallColorMask(0),
@ -234,6 +240,7 @@ ImProcCoordinator::ImProcCoordinator() :
locallsharMask(0),
localllogMask(0),
locall_Mask(0),
locallcieMask(0),
retistrsav(nullptr)
{
}
@ -785,6 +792,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
// Encoding log with locallab
if (params->locallab.enabled && !params->locallab.spots.empty()) {
const int sizespot = (int)params->locallab.spots.size();
const LocallabParams::LocallabSpot defSpot;
float *sourceg = nullptr;
sourceg = new float[sizespot];
@ -794,6 +802,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
targetg = new float[sizespot];
bool *log = nullptr;
log = new bool[sizespot];
bool *cie = nullptr;
cie = new bool[sizespot];
bool *autocomput = nullptr;
autocomput = new bool[sizespot];
float *blackev = nullptr;
@ -802,6 +812,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
whiteev = new float[sizespot];
bool *Autogr = nullptr;
Autogr = new bool[sizespot];
bool *autocie = nullptr;
autocie = new bool[sizespot];
float *locx = nullptr;
locx = new float[sizespot];
@ -818,7 +831,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
for (int sp = 0; sp < sizespot; sp++) {
log[sp] = params->locallab.spots.at(sp).explog;
cie[sp] = params->locallab.spots.at(sp).expcie;
autocomput[sp] = params->locallab.spots.at(sp).autocompute;
autocie[sp] = params->locallab.spots.at(sp).Autograycie;
blackev[sp] = params->locallab.spots.at(sp).blackEv;
whiteev[sp] = params->locallab.spots.at(sp).whiteEv;
sourceg[sp] = params->locallab.spots.at(sp).sourceGray;
@ -832,9 +847,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
centx[sp] = params->locallab.spots.at(sp).centerX / 2000.0 + 0.5;
centy[sp] = params->locallab.spots.at(sp).centerY / 2000.0 + 0.5;
const bool fullim = params->locallab.spots.at(sp).fullimage;
const bool fullimstd = params->locallab.spots.at(sp).fullimage;//for log encoding standard
const bool fullimjz = true;//always force fullimage in log encoding Jz - always possible to put a checkbox if need
if (log[sp] && autocomput[sp]) {
if ((log[sp] && autocomput[sp]) || (cie[sp] && autocie[sp])) {
constexpr int SCALE = 10;
int fw, fh, tr = TR_NONE;
imgsrc->getFullSize(fw, fh, tr);
@ -845,7 +861,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
float xsta = std::max(static_cast<float>(centx[sp] - locxL[sp]), 0.f);
float xend = std::min(static_cast<float>(centx[sp] + locx[sp]), 1.f);
if (fullim) {
if (fullimstd && (log[sp] && autocomput[sp])) {
ysta = 0.f;
yend = 1.f;
xsta = 0.f;
xend = 1.f;
}
if (fullimjz && (cie[sp] && autocie[sp])) {
ysta = 0.f;
yend = 1.f;
xsta = 0.f;
@ -853,14 +876,18 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
}
ipf.getAutoLogloc(sp, imgsrc, sourceg, blackev, whiteev, Autogr, sourceab, fw, fh, xsta, xend, ysta, yend, SCALE);
//printf("sg=%f sab=%f\n", sourceg[sp], sourceab[sp]);
// printf("sp=%i sg=%f sab=%f\n", sp, sourceg[sp], sourceab[sp]);
params->locallab.spots.at(sp).blackEv = blackev[sp];
params->locallab.spots.at(sp).whiteEv = whiteev[sp];
params->locallab.spots.at(sp).blackEvjz = blackev[sp];
params->locallab.spots.at(sp).whiteEvjz = whiteev[sp];
params->locallab.spots.at(sp).sourceGray = sourceg[sp];
params->locallab.spots.at(sp).sourceabs = sourceab[sp];
params->locallab.spots.at(sp).sourceGraycie = sourceg[sp];
params->locallab.spots.at(sp).sourceabscie = sourceab[sp];
float jz1 = defSpot.jz100;
if (locallListener) {
locallListener->logencodChanged(blackev[sp], whiteev[sp], sourceg[sp], sourceab[sp], targetg[sp]);
locallListener->logencodChanged(blackev[sp], whiteev[sp], sourceg[sp], sourceab[sp], targetg[sp], autocomput[sp], autocie[sp], jz1);
}
}
}
@ -872,12 +899,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
delete [] centx;
delete [] centy;
delete [] autocie;
delete [] Autogr;
delete [] whiteev;
delete [] blackev;
delete [] targetg;
delete [] sourceab;
delete [] sourceg;
delete [] cie;
delete [] log;
delete [] autocomput;
}
@ -923,7 +952,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
int sca = 1;
double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre;
float avge, meantme, stdtme, meanretie, stdretie;
std::vector<LocallabListener::locallabRef> locallref;
//std::vector<LocallabListener::locallabRef> locallref;
std::vector<LocallabListener::locallabRetiMinMax> locallretiminmax;
huerefs.resize(params->locallab.spots.size());
huerefblurs.resize(params->locallab.spots.size());
@ -937,6 +966,16 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
stdtms.resize(params->locallab.spots.size());
meanretis.resize(params->locallab.spots.size());
stdretis.resize(params->locallab.spots.size());
const int sizespot = (int)params->locallab.spots.size();
float *huerefp = nullptr;
huerefp = new float[sizespot];
float *chromarefp = nullptr;
chromarefp = new float[sizespot];
float *lumarefp = nullptr;
lumarefp = new float[sizespot];
float *fabrefp = nullptr;
fabrefp = new float[sizespot];
for (int sp = 0; sp < (int)params->locallab.spots.size(); sp++) {
@ -953,6 +992,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
const bool LHutili = loclhCurve.Set(params->locallab.spots.at(sp).LHcurve);
const bool HHutili = lochhCurve.Set(params->locallab.spots.at(sp).HHcurve);
const bool CHutili = locchCurve.Set(params->locallab.spots.at(sp).CHcurve);
const bool HHutilijz = lochhCurvejz.Set(params->locallab.spots.at(sp).HHcurvejz);
const bool CHutilijz = locchCurvejz.Set(params->locallab.spots.at(sp).CHcurvejz);
const bool LHutilijz = loclhCurvejz.Set(params->locallab.spots.at(sp).LHcurvejz);
const bool lcmasutili = locccmasCurve.Set(params->locallab.spots.at(sp).CCmaskcurve);
const bool llmasutili = locllmasCurve.Set(params->locallab.spots.at(sp).LLmaskcurve);
const bool lhmasutili = lochhmasCurve.Set(params->locallab.spots.at(sp).HHmaskcurve);
@ -984,6 +1026,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
const bool llmaslogutili = locllmaslogCurve.Set(params->locallab.spots.at(sp).LLmaskcurveL);
const bool lcmaslogutili = locccmaslogCurve.Set(params->locallab.spots.at(sp).CCmaskcurveL);
const bool lhmaslogutili = lochhmaslogCurve.Set(params->locallab.spots.at(sp).HHmaskcurveL);
const bool llmascieutili = locllmascieCurve.Set(params->locallab.spots.at(sp).LLmaskciecurve);
const bool lcmascieutili = locccmascieCurve.Set(params->locallab.spots.at(sp).CCmaskciecurve);
const bool lhmascieutili = lochhmascieCurve.Set(params->locallab.spots.at(sp).HHmaskciecurve);
const bool lcmas_utili = locccmas_Curve.Set(params->locallab.spots.at(sp).CCmask_curve);
const bool llmas_utili = locllmas_Curve.Set(params->locallab.spots.at(sp).LLmask_curve);
@ -992,6 +1037,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
const bool lmasutiliblwav = loclmasCurveblwav.Set(params->locallab.spots.at(sp).LLmaskblcurvewav);
const bool lmasutilicolwav = loclmasCurvecolwav.Set(params->locallab.spots.at(sp).LLmaskcolcurvewav);
const bool locwavutili = locwavCurve.Set(params->locallab.spots.at(sp).locwavcurve);
const bool locwavutilijz = locwavCurvejz.Set(params->locallab.spots.at(sp).locwavcurvejz);
const bool loclevwavutili = loclevwavCurve.Set(params->locallab.spots.at(sp).loclevwavcurve);
const bool locconwavutili = locconwavCurve.Set(params->locallab.spots.at(sp).locconwavcurve);
const bool loccompwavutili = loccompwavCurve.Set(params->locallab.spots.at(sp).loccompwavcurve);
@ -1017,6 +1063,12 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
const bool localmasklcutili = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).Lmasklccurve, lmasklclocalcurve, sca);
const bool localmasklogutili = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).LmaskcurveL, lmaskloglocalcurve, sca);
const bool localmask_utili = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).Lmask_curve, lmasklocal_curve, sca);
const bool localmaskcieutili = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).Lmaskciecurve, lmaskcielocalcurve, sca);
const bool localcieutili = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).ciecurve, cielocalcurve, sca);
const bool localcieutili2 = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).ciecurve2, cielocalcurve2, sca);
const bool localjzutili = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).jzcurve, jzlocalcurve, sca);
const bool localczutili = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).czcurve, czlocalcurve, sca);
const bool localczjzutili = CurveFactory::diagonalCurve2Lut(params->locallab.spots.at(sp).czjzcurve, czjzlocalcurve, sca);
double ecomp = params->locallab.spots.at(sp).expcomp;
double black = params->locallab.spots.at(sp).black;
double hlcompr = params->locallab.spots.at(sp).hlcompr;
@ -1040,7 +1092,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
stdtme = 0.f;
meanretie = 0.f;
stdretie = 0.f;
float fab = 1.f;
bool istm = params->locallab.spots.at(sp).equiltm && params->locallab.spots.at(sp).exptonemap;
bool isreti = params->locallab.spots.at(sp).equilret && params->locallab.spots.at(sp).expreti;
//preparation for mean and sigma on current RT-spot
@ -1094,16 +1146,23 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
float meanreti = meanretis[sp] = meanretie;
float stdreti = stdretis[sp] = stdretie;
huerefp[sp] = huer;
chromarefp[sp] = chromar;
lumarefp[sp] = lumar;
CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumar,
hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg,
sca);
// Save Locallab mask curve references for current spot
/*
LocallabListener::locallabRef spotref;
spotref.huer = huer;
spotref.lumar = lumar;
spotref.chromar = chromar;
spotref.fab = 1.f;
locallref.push_back(spotref);
*/
// Locallab tools computation
/* Notes:
* - shbuffer is used as nullptr
@ -1125,6 +1184,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
cllocalcurve, localclutili,
lclocalcurve, locallcutili,
loclhCurve, lochhCurve, locchCurve,
lochhCurvejz, locchCurvejz, loclhCurvejz,
lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili,
@ -1136,6 +1196,12 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasklclocalcurve, localmasklcutili,
lmaskloglocalcurve, localmasklogutili,
lmasklocal_curve, localmask_utili,
lmaskcielocalcurve, localmaskcieutili,
cielocalcurve, localcieutili,
cielocalcurve2, localcieutili2,
jzlocalcurve, localjzutili,
czlocalcurve, localczutili,
czjzlocalcurve, localczjzutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
@ -1148,10 +1214,13 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
locccmaslogCurve, lcmaslogutili, locllmaslogCurve, llmaslogutili, lochhmaslogCurve, lhmaslogutili,
locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili,
locccmascieCurve, lcmascieutili, locllmascieCurve, llmascieutili, lochhmascieCurve, lhmascieutili,
lochhhmas_Curve, lhhmas_utili,
loclmasCurveblwav, lmasutiliblwav,
loclmasCurvecolwav, lmasutilicolwav,
locwavCurve, locwavutili,
locwavCurvejz, locwavutilijz,
loclevwavCurve, loclevwavutili,
locconwavCurve, locconwavutili,
loccompwavCurve, loccompwavutili,
@ -1160,13 +1229,13 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
locwavCurveden, locwavdenutili,
locedgwavCurve, locedgwavutili,
loclmasCurve_wav, lmasutili_wav,
LHutili, HHutili, CHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
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,
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
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);
meantm, stdtm, meanreti, stdreti, fab);
fabrefp[sp] = fab;
if (istm) { //calculate mean and sigma on full image for use by normalize_mean_dt
float meanf = 0.f;
float stdf = 0.f;
@ -1212,17 +1281,44 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
}
// Update Locallab reference values according to recurs parameter
if (params->locallab.spots.at(sp).recurs) {
/*
spotref.huer = huer;
spotref.lumar = lumar;
spotref.chromar = chromar;
spotref.fab = fab;
locallref.at(sp).chromar = chromar;
locallref.at(sp).lumar = lumar;
locallref.at(sp).huer = huer;
locallref.at(sp).fab = fab;
*/
huerefp[sp] = huer;
chromarefp[sp] = chromar;
lumarefp[sp] = lumar;
fabrefp[sp] = fab;
}
// spotref.fab = fab;
// locallref.at(sp).fab = fab;
// locallref.push_back(spotref);
if (locallListener) {
// locallListener->refChanged(locallref, params->locallab.selspot);
locallListener->refChanged2(huerefp, chromarefp, lumarefp, fabrefp, params->locallab.selspot);
locallListener->minmaxChanged(locallretiminmax, params->locallab.selspot);
}
}
delete [] huerefp;
delete [] chromarefp;
delete [] lumarefp;
delete [] fabrefp;
// Transmit Locallab reference values and Locallab Retinex min/max to LocallabListener
/*
if (locallListener) {
locallListener->refChanged(locallref, params->locallab.selspot);
locallListener->minmaxChanged(locallretiminmax, params->locallab.selspot);
}
*/
ipf.lab2rgb(*nprevl, *oprevi, params->icm.workingProfile);
//*************************************************************
// end locallab
@ -1802,8 +1898,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
adap = 2000.;
} else {
double E_V = fcomp + log2(double ((fnum * fnum) / fspeed / (fiso / 100.f)));
E_V += params->toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV
E_V += log2(params->raw.expos); // exposure raw white point ; log2 ==> linear to EV
double kexp = 0.;
E_V += kexp * params->toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV
E_V += 0.5 * log2(params->raw.expos); // exposure raw white point ; log2 ==> linear to EV
adap = pow(2.0, E_V - 3.0); // cd / m2
// end calculation adaptation scene luminosity
}

View File

@ -284,6 +284,12 @@ protected:
LUTf lmasklclocalcurve;
LUTf lmaskloglocalcurve;
LUTf lmasklocal_curve;
LUTf lmaskcielocalcurve;
LUTf cielocalcurve;
LUTf cielocalcurve2;
LUTf jzlocalcurve;
LUTf czlocalcurve;
LUTf czjzlocalcurve;
LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve;
@ -291,6 +297,9 @@ protected:
LocLHCurve loclhCurve;
LocHHCurve lochhCurve;
LocCHCurve locchCurve;
LocHHCurve lochhCurvejz;
LocCHCurve locchCurvejz;
LocLHCurve loclhCurvejz;
LocCCmaskCurve locccmasCurve;
LocLLmaskCurve locllmasCurve;
LocHHmaskCurve lochhmasCurve;
@ -326,6 +335,9 @@ protected:
LocCCmaskCurve locccmaslogCurve;
LocLLmaskCurve locllmaslogCurve;
LocHHmaskCurve lochhmaslogCurve;
LocCCmaskCurve locccmascieCurve;
LocLLmaskCurve locllmascieCurve;
LocHHmaskCurve lochhmascieCurve;
LocwavCurve locwavCurve;
LocwavCurve loclmasCurveblwav;
@ -338,6 +350,7 @@ protected:
LocwavCurve locedgwavCurve;
LocwavCurve loclmasCurve_wav;
LocwavCurve locwavCurvehue;
LocwavCurve locwavCurvejz;
std::vector<float> huerefs;
std::vector<float> huerefblurs;
@ -369,6 +382,7 @@ protected:
int locallsharMask;
int localllogMask;
int locall_Mask;
int locallcieMask;
public:
@ -440,7 +454,7 @@ public:
updaterThreadStart.unlock();
}
void setLocallabMaskVisibility(bool previewDeltaE, int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallsoftMask, int locallblMask, int localltmMask, int locallretiMask, int locallsharMask, int localllcMask, int locallcbMask, int localllogMask, int locall_Mask) override
void setLocallabMaskVisibility(bool previewDeltaE, int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallsoftMask, int locallblMask, int localltmMask, int locallretiMask, int locallsharMask, int localllcMask, int locallcbMask, int localllogMask, int locall_Mask, int locallcieMask) override
{
this->previewDeltaE = previewDeltaE;
this->locallColorMask = locallColorMask;
@ -459,6 +473,7 @@ public:
this->locallcbMask = locallcbMask;
this->localllogMask = localllogMask;
this->locall_Mask = locall_Mask;
this->locallcieMask = locallcieMask;
}
void setProgressListener (ProgressListener* pl) override

View File

@ -960,14 +960,14 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
c16 = 1;
}else if (params->colorappearance.modelmethod == "16") {
c16 = 16;
}
Ciecam02::initcam1float (yb, pilot, f, la, xw, yw, zw, n, d, nbb, ncb, cz, aw, wh, pfl, fl, c, c16);
} //I don't use PQ here...hence no 21
float plum = 100.f;
Ciecam02::initcam1float (yb, pilot, f, la, xw, yw, zw, n, d, nbb, ncb, cz, aw, wh, pfl, fl, c, c16, plum);
//printf ("wh=%f \n", wh);
const float pow1 = pow_F(1.64f - pow_F(0.29f, n), 0.73f);
float nj, nbbj, ncbj, czj, awj, flj;
Ciecam02::initcam2float (yb2, pilotout, f2, la2, xw2, yw2, zw2, nj, dj, nbbj, ncbj, czj, awj, flj, c16);
Ciecam02::initcam2float (yb2, pilotout, f2, la2, xw2, yw2, zw2, nj, dj, nbbj, ncbj, czj, awj, flj, c16, plum);
#ifdef __SSE2__
const float reccmcz = 1.f / (c2 * czj);
#endif
@ -1054,11 +1054,13 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
x = x / c655d35;
y = y / c655d35;
z = z / c655d35;
float plum = 100.f;
vfloat plumv = F2V(plum);
Ciecam02::xyz2jchqms_ciecam02float(J, C, h,
Q, M, s, F2V(aw), F2V(fl), F2V(wh),
x, y, z,
F2V(xw1), F2V(yw1), F2V(zw1),
F2V(c), F2V(nc), F2V(pow1), F2V(nbb), F2V(ncb), F2V(pfl), F2V(cz), F2V(d), c16);
F2V(c), F2V(nc), F2V(pow1), F2V(nbb), F2V(ncb), F2V(pfl), F2V(cz), F2V(d), c16, plumv);
STVF(Jbuffer[k], J);
STVF(Cbuffer[k], C);
STVF(hbuffer[k], h);
@ -1082,7 +1084,7 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
Q, M, s, aw, fl, wh,
x, y, z,
xw1, yw1, zw1,
c, nc, pow1, nbb, ncb, pfl, cz, d, c16);
c, nc, pow1, nbb, ncb, pfl, cz, d, c16, plum);
Jbuffer[k] = J;
Cbuffer[k] = C;
hbuffer[k] = h;
@ -1120,7 +1122,7 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
Q, M, s, aw, fl, wh,
x, y, z,
xw1, yw1, zw1,
c, nc, pow1, nbb, ncb, pfl, cz, d, c16);
c, nc, pow1, nbb, ncb, pfl, cz, d, c16, plum);
#endif
float Jpro, Cpro, hpro, Qpro, Mpro, spro;
Jpro = J;
@ -1458,7 +1460,7 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
Ciecam02::jch2xyz_ciecam02float(xx, yy, zz,
J, C, h,
xw2, yw2, zw2,
c2, nc2, pow1n, nbbj, ncbj, flj, czj, dj, awj, c16);
c2, nc2, pow1n, nbbj, ncbj, flj, czj, dj, awj, c16, plum);
float x, y, z;
x = xx * 655.35f;
y = yy * 655.35f;
@ -1510,7 +1512,7 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
Ciecam02::jch2xyz_ciecam02float(x, y, z,
LVF(Jbuffer[k]), LVF(Cbuffer[k]), LVF(hbuffer[k]),
F2V(xw2), F2V(yw2), F2V(zw2),
F2V(nc2), F2V(pow1n), F2V(nbbj), F2V(ncbj), F2V(flj), F2V(dj), F2V(awj), F2V(reccmcz), c16);
F2V(nc2), F2V(pow1n), F2V(nbbj), F2V(ncbj), F2V(flj), F2V(dj), F2V(awj), F2V(reccmcz), c16, F2V(plum));
STVF(xbuffer[k], x * c655d35);
STVF(ybuffer[k], y * c655d35);
STVF(zbuffer[k], z * c655d35);
@ -1767,7 +1769,7 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
Ciecam02::jch2xyz_ciecam02float(xx, yy, zz,
ncie->J_p[i][j], ncie_C_p, ncie->h_p[i][j],
xw2, yw2, zw2,
c2, nc2, pow1n, nbbj, ncbj, flj, czj, dj, awj, c16);
c2, nc2, pow1n, nbbj, ncbj, flj, czj, dj, awj, c16, plum);
float x = (float)xx * 655.35f;
float y = (float)yy * 655.35f;
float z = (float)zz * 655.35f;
@ -1815,7 +1817,7 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
Ciecam02::jch2xyz_ciecam02float(x, y, z,
LVF(Jbuffer[k]), LVF(Cbuffer[k]), LVF(hbuffer[k]),
F2V(xw2), F2V(yw2), F2V(zw2),
F2V(nc2), F2V(pow1n), F2V(nbbj), F2V(ncbj), F2V(flj), F2V(dj), F2V(awj), F2V(reccmcz), c16);
F2V(nc2), F2V(pow1n), F2V(nbbj), F2V(ncbj), F2V(flj), F2V(dj), F2V(awj), F2V(reccmcz), c16, F2V(plum));
x *= c655d35;
y *= c655d35;
z *= c655d35;

View File

@ -191,12 +191,14 @@ enum class BlurType {
void moyeqt(Imagefloat* working, float &moyS, float &eqty);
void luminanceCurve(LabImage* lold, LabImage* lnew, const LUTf &curve);
void ciecamloc_02float(int sp, LabImage* lab, int call);
void ciecamloc_02float(const struct local_params& lp, int sp, LabImage* lab, int bfw, int bfh, int call, int sk, const LUTf& cielocalcurve, bool localcieutili, const LUTf& cielocalcurve2, bool localcieutili2, const LUTf& jzlocalcurve, bool localjzutili, const LUTf& czlocalcurve, bool localczutili, const LUTf& czjzlocalcurve, bool localczjzutili, const LocCHCurve& locchCurvejz, const LocHHCurve& lochhCurve, const LocLHCurve& loclhCurve, bool HHcurvejz, bool CHcurvejz, bool LHcurvejz, const LocwavCurve& locwavCurvejz, bool locwavutilijz);
void ciecam_02float(CieImage* ncie, float adap, int pW, int pwb, LabImage* lab, const procparams::ProcParams* params,
const ColorAppearance & customColCurve1, const ColorAppearance & customColCurve, const ColorAppearance & customColCurve3,
LUTu &histLCAM, LUTu &histCCAM, LUTf & CAMBrightCurveJ, LUTf & CAMBrightCurveQ, float &mean, int Iterates, int scale, bool execsharp, float &d, float &dj, float &yb, int rtt,
bool showSharpMask = false);
void clarimerge(const struct local_params& lp, float &mL, float &mC, bool &exec, LabImage *tmpresid, int wavelet_level, int sk, int numThreads);
void chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, LabImage* lold, LabImage* lnew, const LUTf& acurve, const LUTf& bcurve, const LUTf& satcurve, const LUTf& satclcurve, const LUTf& clcurve, LUTf &curve, bool utili, bool autili, bool butili, bool ccutili, bool cclutili, bool clcutili, LUTu &histCCurve, LUTu &histLurve);
void vibrance(LabImage* lab, const procparams::VibranceParams &vibranceParams, bool highlight, const Glib::ustring &workingProfile); //Jacques' vibrance
void softprocess(const LabImage* bufcolorig, array2D<float> &buflight, /* float ** bufchro, float ** buf_a, float ** buf_b, */ float rad, int bfh, int bfw, double epsilmax, double epsilmin, float thres, int sk, bool multiThread);
@ -253,7 +255,7 @@ enum class BlurType {
const LUTf& lmasklocalcurve, bool localmaskutili,
const LocwavCurve & loclmasCurvecolwav, bool lmasutilicolwav, int level_bl, int level_hl, int level_br, int level_hr,
int shortcu, bool delt, const float hueref, const float chromaref, const float lumaref,
float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, bool fftt, float blu_ma, float cont_ma, int indic);
float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, bool fftt, float blu_ma, float cont_ma, int indic, float &fab);
void avoidcolshi(const struct local_params& lp, int sp, LabImage * original, LabImage *transformed, int cy, int cx, int sk);
@ -263,6 +265,7 @@ enum class BlurType {
void laplacian(const array2D<float> &src, array2D<float> &dst, int bfw, int bfh, float threshold, float ceiling, float factor, bool multiThread);
void detail_mask(const array2D<float> &src, array2D<float> &mask, int bfw, int bfh, float scaling, float threshold, float ceiling, float factor, BlurType blur_type, float blur, bool multithread);
void NLMeans(float **img, int strength, int detail_thresh, int patch, int radius, float gam, int bfw, int bfh, float scale, bool multithread);
void loccont(int bfw, int bfh, LabImage* tmp1, float rad, float stren, int sk);
void rex_poisson_dct(float * data, size_t nx, size_t ny, double m);
void mean_dt(const float * data, size_t size, double& mean_p, double& dt_p);
@ -307,6 +310,7 @@ enum class BlurType {
const LUTf& cllocalcurve, bool localclutili,
const LUTf& lclocalcurve, bool locallcutili,
const LocLHCurve& loclhCurve, const LocHHCurve& lochhCurve, const LocCHCurve& locchCurve,
const LocHHCurve& lochhCurvejz, const LocCHCurve& locchCurvejz, const LocLHCurve& loclhCurvejz,
const LUTf& lmasklocalcurve, bool localmaskutili,
const LUTf& lmaskexplocalcurve, bool localmaskexputili,
const LUTf& lmaskSHlocalcurve, bool localmaskSHutili,
@ -318,6 +322,12 @@ enum class BlurType {
const LUTf& lmasklclocalcurve, bool localmasklcutili,
const LUTf& lmaskloglocalcurve, bool localmasklogutili,
const LUTf& lmasklocal_curve, bool localmask_utili,
const LUTf& lmaskcielocalcurve, bool localmaskcieutili,
const LUTf& cielocalcurve, bool localcieutili,
const LUTf& cielocalcurve2, bool localcieutili2,
const LUTf& jzlocalcurve, bool localjzutili,
const LUTf& czlocalcurve, bool localczutili,
const LUTf& czjzlocalcurve, bool localczjzutili,
const LocCCmaskCurve& locccmasCurve, bool lcmasutili, const LocLLmaskCurve& locllmasCurve, bool llmasutili, const LocHHmaskCurve& lochhmasCurve, bool lhmasutili, const LocHHmaskCurve& llochhhmasCurve, bool lhhmasutili,
const LocCCmaskCurve& locccmasexpCurve, bool lcmasexputili, const LocLLmaskCurve& locllmasexpCurve, bool llmasexputili, const LocHHmaskCurve& lochhmasexpCurve, bool lhmasexputili,
@ -330,11 +340,14 @@ enum class BlurType {
const LocCCmaskCurve& locccmaslcCurve, bool lcmaslcutili, const LocLLmaskCurve& locllmaslcCurve, bool llmaslcutili, const LocHHmaskCurve& lochhmaslcCurve, bool lhmaslcutili,
const LocCCmaskCurve& locccmaslogCurve, bool lcmaslogutili, const LocLLmaskCurve& locllmaslogCurve, bool llmaslogutili, const LocHHmaskCurve& lochhmaslogCurve, bool lhmaslogutili,
const LocCCmaskCurve& locccmas_Curve, bool lcmas_utili, const LocLLmaskCurve& locllmas_Curve, bool llmas_utili, const LocHHmaskCurve& lochhmas_Curve, bool lhmas_utili,
const LocCCmaskCurve& locccmascieCurve, bool lcmascieutili, const LocLLmaskCurve& locllmascieCurve, bool llmascieutili, const LocHHmaskCurve& lochhmascieCurve, bool lhmascieutili,
const LocHHmaskCurve& lochhhmas_Curve, bool lhhmas_utili,
const LocwavCurve& loclmasCurveblwav, bool lmasutiliblwav,
const LocwavCurve& loclmasCurvecolwav, bool lmasutilicolwav,
const LocwavCurve& locwavCurve, bool locwavutili,
const LocwavCurve& locwavCurvejz, bool locwavutilijz,
const LocwavCurve& loclevwavCurve, bool loclevwavutili,
const LocwavCurve& locconwavCurve, bool locconwavutili,
const LocwavCurve& loccompwavCurve, bool loccompwavutili,
@ -343,11 +356,11 @@ enum class BlurType {
const LocwavCurve& locwavCurveden, bool locwavdenutili,
const LocwavCurve& locedgwavCurve, bool locedgwavutili,
const LocwavCurve& loclmasCurve_wav, bool lmasutili_wav,
bool LHutili, bool HHutili, bool CHutili, const LUTf& cclocalcurve, bool localcutili, const LUTf& rgblocalcurve, bool localrgbutili, bool localexutili, const LUTf& exlocalcurve, const LUTf& hltonecurveloc, const LUTf& shtonecurveloc, const LUTf& tonecurveloc, const LUTf& lightCurveloc,
bool LHutili, bool HHutili, bool CHutili, bool HHutilijz, bool CHutilijz, bool LHutilijz, const LUTf& cclocalcurve, bool localcutili, const LUTf& rgblocalcurve, bool localrgbutili, bool localexutili, const LUTf& exlocalcurve, const LUTf& hltonecurveloc, const LUTf& shtonecurveloc, const LUTf& tonecurveloc, const LUTf& lightCurveloc,
double& huerefblur, double &chromarefblur, double& lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav,
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,
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& meantm, float& stdtm, float& meanreti, float& stdreti, float &fab);
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);
@ -371,6 +384,8 @@ 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 wavcbd(wavelet_decomposition &wdspot, int level_bl, int maxlvl,
const LocwavCurve& locconwavCurve, bool locconwavutili, float sigm, float offs, float chromalev, int sk);

File diff suppressed because it is too large Load Diff

View File

@ -1073,9 +1073,119 @@ enum ProcEventCode {
Evlocallabreparexp = 1047,
Evlocallabrepartm = 1048,
Evlocallabchroml = 1049,
Evlocallabresidgam = 1050,
Evlocallabresidslop = 1051,
Evlocallabnoisegam = 1052,
Evlocallabgamlc = 1053,
Evlocallabgamc = 1054,
Evlocallabgamex = 1055,
EvLocenacie = 1056,
Evlocallabreparcie = 1057,
EvlocallabAutograycie = 1058,
EvlocallabsourceGraycie = 1059,
Evlocallabsourceabscie = 1060,
Evlocallabsursourcie = 1061,
Evlocallabsaturlcie = 1062,
Evlocallabchromlcie = 1063,
Evlocallablightlcie = 1064,
Evlocallablightqcie = 1065,
Evlocallabcontlcie = 1066,
Evlocallabcontthrescie = 1067,
Evlocallabcontqcie = 1068,
Evlocallabcolorflcie = 1069,
Evlocallabtargabscie = 1070,
EvlocallabtargetGraycie = 1071,
Evlocallabcatadcie = 1072,
Evlocallabdetailcie = 1073,
Evlocallabsurroundcie = 1074,
Evlocallabsensicie = 1075,
Evlocallabmodecie = 1076,
Evlocallabrstprotectcie = 1077,
Evlocallabsigmoidldacie = 1078,
Evlocallabsigmoidthcie = 1079,
Evlocallabsigmoidblcie = 1080,
Evlocallabsigmoidqjcie = 1081,
Evlocallabhuecie = 1082,
Evlocallabjabcie = 1083,
Evlocallablightjzcie = 1084,
Evlocallabcontjzcie = 1085,
Evlocallabchromjzcie = 1086,
Evlocallabhuejzcie = 1087,
Evlocallabsigmoidldajzcie = 1088,
Evlocallabsigmoidthjzcie = 1089,
Evlocallabsigmoidbljzcie = 1090,
Evlocallabadapjzcie = 1091,
Evlocallabmodecam = 1092,
Evlocallabhljzcie = 1093,
Evlocallabhlthjzcie = 1094,
Evlocallabshjzcie = 1095,
Evlocallabshthjzcie = 1096,
Evlocallabradjzcie = 1097,
// EvlocallabHHshapejz = 1098,
EvlocallabCHshapejz = 1098,
Evlocallabjz100 = 1099,
Evlocallabpqremap = 1100,
EvlocallabLHshapejz = 1101,
Evlocallabshargam = 1102,
Evlocallabvibgam = 1103,
EvLocallabtoneMethodcie = 1104,
Evlocallabshapecie = 1105,
EvLocallabtoneMethodcie2 = 1106,
Evlocallabshapecie2 = 1107,
Evlocallabshapejz = 1108,
Evlocallabshapecz = 1109,
Evlocallabshapeczjz = 1110,
Evlocallabforcejz = 1111,
//Evlocallablightlzcam = 1113,
//Evlocallablightqzcam = 1114,
//Evlocallabcontlzcam = 1115,
//Evlocallabcontqzcam = 1116,
//Evlocallabcontthreszcam = 1117,
//Evlocallabcolorflzcam = 1118,
//Evlocallabsaturzcam = 1119,
//Evlocallabchromzcam = 1120,
Evlocallabpqremapcam16 = 1112,
EvLocallabEnacieMask = 1113,
EvlocallabCCmaskcieshape = 1114,
EvlocallabLLmaskcieshape = 1115,
EvlocallabHHmaskcieshape = 1116,
Evlocallabblendmaskcie = 1117,
Evlocallabradmaskcie = 1118,
Evlocallabchromaskcie = 1119,
EvlocallabLmaskcieshape = 1120,
Evlocallabrecothrescie = 1121,
Evlocallablowthrescie = 1122,
Evlocallabhigthrescie = 1123,
Evlocallabdecaycie = 1124,
Evlocallablapmaskcie = 1125,
Evlocallabgammaskcie = 1126,
Evlocallabslomaskcie = 1127,
Evlocallabqtoj = 1128,
Evlocallabsaturjzcie = 1129,
EvLocallabSpotdenoichmask = 1130,
Evlocallabsigmalcjz = 1131,
EvlocallabcsThresholdjz = 1132,
EvlocallabwavCurvejz = 1133,
Evlocallabclarilresjz = 1134,
Evlocallabclaricresjz = 1135,
Evlocallabclarisoftjz = 1136,
EvlocallabHHshapejz = 1137,
Evlocallabsoftjzcie = 1138,
Evlocallabthrhjzcie = 1139,
Evlocallabchjzcie = 1140,
Evlocallabstrsoftjzcie = 1141,
EvlocallabblackEvjz = 1142,
EvlocallabwhiteEvjz = 1143,
Evlocallablogjz = 1144,
Evlocallabtargetjz = 1145,
Evlocallabforcebw = 1146,
Evlocallabsigjz = 1147,
NUMOFEVENTS
};
class ProcEvent
{
public:

View File

@ -2876,6 +2876,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
shortc(false),
savrest(false),
scopemask(60),
denoichmask(0.),
lumask(10),
// Color & Light
visicolor(false),
@ -2884,6 +2885,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
curvactiv(false),
lightness(0),
reparcol(100.),
gamc(1.),
contrast(0),
chroma(0),
labgridALow(0.0),
@ -3131,7 +3133,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
expexpose(false),
complexexpose(0),
expcomp(0.0),
hlcompr(20),
hlcompr(0),
hlcomprthresh(0),
black(0),
shadex(0),
@ -3140,6 +3142,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
sensiex(60),
structexp(0),
blurexpde(5),
gamex(1.),
strexp(0.),
angexp(0.),
excurve{
@ -3319,6 +3322,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
complexvibrance(0),
saturated(0),
pastels(0),
vibgam(1.0),
warm(0),
psthreshold({0, 75, false}),
protectskins(false),
@ -3445,6 +3449,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
noiselumc(0.),
noiselumdetail(50.),
noiselequal(7),
noisegam(1.),
noisechrof(0.),
noisechroc(0.),
noisechrodetail(50.),
@ -3785,6 +3790,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
shardamping(0),
shariter(30),
sharblur(0.2),
shargam(1.0),
sensisha(40),
inverssha(false),
// Local Contrast
@ -3802,6 +3808,9 @@ LocallabParams::LocallabSpot::LocallabSpot() :
residshathr(30.0),
residhi(0.0),
residhithr(70.0),
gamlc(1.0),
residgam(2.40),
residslop(12.94),
residblur(0.0),
levelblur(0.0),
sigmabl(1.0),
@ -4261,7 +4270,276 @@ LocallabParams::LocallabSpot::LocallabSpot() :
0.35,
0.35
},
csthresholdmask(0, 0, 6, 5, false)
csthresholdmask(0, 0, 6, 5, false),
// ciecam
visicie(false),
expcie(false),
complexcie(0),
reparcie(100.),
sensicie(60),
Autograycie(true),
forcejz(true),
forcebw(true),
qtoj(false),
jabcie(true),
sigmoidqjcie(false),
logjz(false),
sigjz(false),
chjzcie(true),
sourceGraycie(18.),
sourceabscie(2000.),
sursourcie("Average"),
modecie("com"),
modecam("cam16"),
saturlcie(0.),
rstprotectcie(0.),
chromlcie(0.),
huecie(0.),
toneMethodcie("one"),
ciecurve{
static_cast<double>(DCT_NURBS),
0.0,
0.0,
1.0,
1.0
},
toneMethodcie2("onec"),
ciecurve2{
static_cast<double>(DCT_NURBS),
0.0,
0.0,
1.0,
1.0
},
chromjzcie(0.),
saturjzcie(0.),
huejzcie(0.),
softjzcie(0.),
strsoftjzcie(100.),
thrhjzcie(60.),
jzcurve{
static_cast<double>(DCT_NURBS),
0.0,
0.0,
1.0,
1.0
},
czcurve{
static_cast<double>(DCT_NURBS),
0.0,
0.0,
1.0,
1.0
},
czjzcurve{
static_cast<double>(DCT_NURBS),
0.0,
0.0,
1.0,
1.0
},
HHcurvejz{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
0.50,
0.35,
0.35,
0.166,
0.50,
0.35,
0.35,
0.333,
0.50,
0.35,
0.35,
0.50,
0.50,
0.35,
0.35,
0.666,
0.50,
0.35,
0.35,
0.833,
0.50,
0.35,
0.35
},
CHcurvejz{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
0.50,
0.35,
0.35,
0.166,
0.50,
0.35,
0.35,
0.333,
0.50,
0.35,
0.35,
0.50,
0.50,
0.35,
0.35,
0.666,
0.50,
0.35,
0.35,
0.833,
0.50,
0.35,
0.35
},
LHcurvejz{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
0.50,
0.35,
0.35,
0.166,
0.50,
0.35,
0.35,
0.333,
0.50,
0.35,
0.35,
0.50,
0.50,
0.35,
0.35,
0.666,
0.50,
0.35,
0.35,
0.833,
0.50,
0.35,
0.35
},
lightlcie(0.),
lightjzcie(0.),
lightqcie(0.),
contlcie(0.),
contjzcie(0.),
adapjzcie(4.0),
jz100(0.25),
pqremap(120.),
pqremapcam16(100.),
hljzcie(0.0),
hlthjzcie(70.0),
shjzcie(0.0),
shthjzcie(40.0),
radjzcie(40.0),
sigmalcjz(1.),
clarilresjz(0.),
claricresjz(0.),
clarisoftjz(0.),
locwavcurvejz{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
0.5,
0.35,
0.35,
1.,
0.5,
0.35,
0.35
},
csthresholdjz(0, 0, 7, 4, false),
contthrescie(0.),
blackEvjz(-5.0),
whiteEvjz(10.0),
targetjz(18.0),
sigmoidldacie(0.),
sigmoidthcie(1.),
sigmoidblcie(1.),
sigmoidldajzcie(0.5),
sigmoidthjzcie(1.),
sigmoidbljzcie(1.),
contqcie(0.),
colorflcie(0.),
/*
lightlzcam(0.),
lightqzcam(0.),
contlzcam(0.),
contqzcam(0.),
contthreszcam(0.),
colorflzcam(0.),
saturzcam(0.),
chromzcam(0.),
*/
targabscie(16.),
targetGraycie(18.),
catadcie(0.),
detailcie(0.),
surroundcie("Average"),
enacieMask(false),
CCmaskciecurve{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
1.0,
0.35,
0.35,
0.50,
1.0,
0.35,
0.35,
1.0,
1.0,
0.35,
0.35
},
LLmaskciecurve{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
1.0,
0.35,
0.35,
0.50,
1.0,
0.35,
0.35,
1.0,
1.0,
0.35,
0.35
},
HHmaskciecurve{
static_cast<double>(FCT_MinMaxCPoints),
0.0,
1.0,
0.35,
0.35,
0.50,
1.0,
0.35,
0.35,
1.0,
1.0,
0.35,
0.35
},
blendmaskcie(0),
radmaskcie(0.0),
chromaskcie(0.0),
lapmaskcie(0.0),
gammaskcie(1.0),
slomaskcie(0.0),
Lmaskciecurve{
static_cast<double>(DCT_NURBS),
0.0,
0.0,
1.0,
1.0
},
recothrescie(1.),
lowthrescie(12.),
higthrescie(85.),
decaycie(2.)
{
}
@ -4308,6 +4586,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& shortc == other.shortc
&& savrest == other.savrest
&& scopemask == other.scopemask
&& denoichmask == other.denoichmask
&& lumask == other.lumask
// Color & Light
&& visicolor == other.visicolor
@ -4316,6 +4595,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& curvactiv == other.curvactiv
&& lightness == other.lightness
&& reparcol == other.reparcol
&& gamc == other.gamc
&& contrast == other.contrast
&& chroma == other.chroma
&& labgridALow == other.labgridALow
@ -4392,6 +4672,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& sensiex == other.sensiex
&& structexp == other.structexp
&& blurexpde == other.blurexpde
&& gamex == other.gamex
&& strexp == other.strexp
&& angexp == other.angexp
&& excurve == other.excurve
@ -4478,6 +4759,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& complexvibrance == other.complexvibrance
&& saturated == other.saturated
&& pastels == other.pastels
&& vibgam == other.vibgam
&& warm == other.warm
&& psthreshold == other.psthreshold
&& protectskins == other.protectskins
@ -4554,6 +4836,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& noiselumc == other.noiselumc
&& noiselumdetail == other.noiselumdetail
&& noiselequal == other.noiselequal
&& noisegam == other.noisegam
&& noisechrof == other.noisechrof
&& noisechroc == other.noisechroc
&& noisechrodetail == other.noisechrodetail
@ -4672,6 +4955,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& shardamping == other.shardamping
&& shariter == other.shariter
&& sharblur == other.sharblur
&& shargam == other.shargam
&& sensisha == other.sensisha
&& inverssha == other.inverssha
// Local contrast
@ -4689,6 +4973,9 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& residshathr == other.residshathr
&& residhi == other.residhi
&& residhithr == other.residhithr
&& gamlc == other.gamlc
&& residgam == other.residgam
&& residslop == other.residslop
&& residblur == other.residblur
&& levelblur == other.levelblur
&& sigmabl == other.sigmabl
@ -4859,7 +5146,109 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& HHhmask_curve == other.HHhmask_curve
&& Lmask_curve == other.Lmask_curve
&& LLmask_curvewav == other.LLmask_curvewav
&& csthresholdmask == other.csthresholdmask;
&& csthresholdmask == other.csthresholdmask
//ciecam
&& visicie == other.visicie
&& expcie == other.expcie
&& complexcie == other.complexcie
&& reparcie == other.reparcie
&& sensicie == other.sensicie
&& Autograycie == other.Autograycie
&& forcejz == other.forcejz
&& forcebw == other.forcebw
&& qtoj == other.qtoj
&& jabcie == other.jabcie
&& sigmoidqjcie == other.sigmoidqjcie
&& logjz == other.logjz
&& sigjz == other.sigjz
&& chjzcie == other.chjzcie
&& sourceGraycie == other.sourceGraycie
&& sourceabscie == other.sourceabscie
&& sursourcie == other.sursourcie
&& modecie == other.modecie
&& modecam == other.modecam
&& saturlcie == other.saturlcie
&& rstprotectcie == other.rstprotectcie
&& chromlcie == other.chromlcie
&& huecie == other.huecie
&& toneMethodcie == other.toneMethodcie
&& ciecurve == other.ciecurve
&& toneMethodcie2 == other.toneMethodcie2
&& ciecurve2 == other.ciecurve2
&& chromjzcie == other.chromjzcie
&& saturjzcie == other.saturjzcie
&& huejzcie == other.huejzcie
&& softjzcie == other.softjzcie
&& strsoftjzcie == other.strsoftjzcie
&& thrhjzcie == other.thrhjzcie
&& jzcurve == other.jzcurve
&& czcurve == other.czcurve
&& czjzcurve == other.czjzcurve
&& HHcurvejz == other.HHcurvejz
&& CHcurvejz == other.CHcurvejz
&& LHcurvejz == other.LHcurvejz
&& lightlcie == other.lightlcie
&& lightjzcie == other.lightjzcie
&& lightqcie == other.lightqcie
&& contlcie == other.contlcie
&& contjzcie == other.contjzcie
&& adapjzcie == other.adapjzcie
&& jz100 == other.jz100
&& pqremap == other.pqremap
&& pqremapcam16 == other.pqremapcam16
&& hljzcie == other.hljzcie
&& hlthjzcie == other.hlthjzcie
&& shjzcie == other.shjzcie
&& shthjzcie == other.shthjzcie
&& radjzcie == other.radjzcie
&& sigmalcjz == other.sigmalcjz
&& clarilresjz == other.clarilresjz
&& claricresjz == other.claricresjz
&& clarisoftjz == other.clarisoftjz
&& locwavcurvejz == other.locwavcurvejz
&& csthresholdjz == other.csthresholdjz
&& contthrescie == other.contthrescie
&& blackEvjz == other.blackEvjz
&& whiteEvjz == other.whiteEvjz
&& targetjz == other.targetjz
&& sigmoidldacie == other.sigmoidldacie
&& sigmoidthcie == other.sigmoidthcie
&& sigmoidblcie == other.sigmoidblcie
&& sigmoidldajzcie == other.sigmoidldajzcie
&& sigmoidthjzcie == other.sigmoidthjzcie
&& sigmoidbljzcie == other.sigmoidbljzcie
&& contqcie == other.contqcie
&& colorflcie == other.colorflcie
/* && lightlzcam == other.lightlzcam
&& lightqzcam == other.lightqzcam
&& contlzcam == other.contlzcam
&& contqzcam == other.contqzcam
&& contthreszcam == other.contthreszcam
&& colorflzcam == other.colorflzcam
&& saturzcam == other.saturzcam
&& chromzcam == other.chromzcam
*/
&& targabscie == other.targabscie
&& targetGraycie == other.targetGraycie
&& catadcie == other.catadcie
&& detailcie == other.detailcie
&& surroundcie == other.surroundcie
&& enacieMask == other.enacieMask
&& CCmaskciecurve == other.CCmaskciecurve
&& LLmaskciecurve == other.LLmaskciecurve
&& HHmaskciecurve == other.HHmaskciecurve
&& blendmaskcie == other.blendmaskcie
&& radmaskcie == other.radmaskcie
&& chromaskcie == other.chromaskcie
&& lapmaskcie == other.lapmaskcie
&& gammaskcie == other.gammaskcie
&& slomaskcie == other.slomaskcie
&& Lmaskciecurve == other.Lmaskciecurve
&& recothrescie == other.recothrescie
&& lowthrescie == other.lowthrescie
&& higthrescie == other.higthrescie
&& decaycie == other.decaycie;
}
@ -5981,6 +6370,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->shortc, "Locallab", "Shortc_" + index_str, spot.shortc, keyFile);
saveToKeyfile(!pedited || spot_edited->savrest, "Locallab", "Savrest_" + index_str, spot.savrest, keyFile);
saveToKeyfile(!pedited || spot_edited->scopemask, "Locallab", "Scopemask_" + index_str, spot.scopemask, keyFile);
saveToKeyfile(!pedited || spot_edited->denoichmask, "Locallab", "Denoichmask_" + index_str, spot.denoichmask, keyFile);
saveToKeyfile(!pedited || spot_edited->lumask, "Locallab", "Lumask_" + index_str, spot.lumask, keyFile);
// Color & Light
if ((!pedited || spot_edited->visicolor) && spot.visicolor) {
@ -5989,6 +6379,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->curvactiv, "Locallab", "Curvactiv_" + index_str, spot.curvactiv, keyFile);
saveToKeyfile(!pedited || spot_edited->lightness, "Locallab", "Lightness_" + index_str, spot.lightness, keyFile);
saveToKeyfile(!pedited || spot_edited->reparcol, "Locallab", "Reparcol_" + index_str, spot.reparcol, keyFile);
saveToKeyfile(!pedited || spot_edited->gamc, "Locallab", "Gamc_" + index_str, spot.gamc, keyFile);
saveToKeyfile(!pedited || spot_edited->contrast, "Locallab", "Contrast_" + index_str, spot.contrast, keyFile);
saveToKeyfile(!pedited || spot_edited->chroma, "Locallab", "Chroma_" + index_str, spot.chroma, keyFile);
saveToKeyfile(!pedited || spot_edited->labgridALow, "Locallab", "labgridALow_" + index_str, spot.labgridALow, keyFile);
@ -6066,6 +6457,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->sensiex, "Locallab", "Sensiex_" + index_str, spot.sensiex, keyFile);
saveToKeyfile(!pedited || spot_edited->structexp, "Locallab", "Structexp_" + index_str, spot.structexp, keyFile);
saveToKeyfile(!pedited || spot_edited->blurexpde, "Locallab", "Blurexpde_" + index_str, spot.blurexpde, keyFile);
saveToKeyfile(!pedited || spot_edited->gamex, "Locallab", "Gamex_" + index_str, spot.gamex, keyFile);
saveToKeyfile(!pedited || spot_edited->strexp, "Locallab", "Strexp_" + index_str, spot.strexp, keyFile);
saveToKeyfile(!pedited || spot_edited->angexp, "Locallab", "Angexp_" + index_str, spot.angexp, keyFile);
saveToKeyfile(!pedited || spot_edited->excurve, "Locallab", "ExCurve_" + index_str, spot.excurve, keyFile);
@ -6149,6 +6541,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->complexvibrance, "Locallab", "Complexvibrance_" + index_str, spot.complexvibrance, keyFile);
saveToKeyfile(!pedited || spot_edited->saturated, "Locallab", "Saturated_" + index_str, spot.saturated, keyFile);
saveToKeyfile(!pedited || spot_edited->pastels, "Locallab", "Pastels_" + index_str, spot.pastels, keyFile);
saveToKeyfile(!pedited || spot_edited->vibgam, "Locallab", "Vibgam_" + index_str, spot.vibgam, keyFile);
saveToKeyfile(!pedited || spot_edited->warm, "Locallab", "Warm_" + index_str, spot.warm, keyFile);
saveToKeyfile(!pedited || spot_edited->psthreshold, "Locallab", "PSThreshold_" + index_str, spot.psthreshold.toVector(), keyFile);
saveToKeyfile(!pedited || spot_edited->protectskins, "Locallab", "ProtectSkins_" + index_str, spot.protectskins, keyFile);
@ -6227,6 +6620,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->noiselumc, "Locallab", "noiselumc_" + index_str, spot.noiselumc, keyFile);
saveToKeyfile(!pedited || spot_edited->noiselumdetail, "Locallab", "noiselumdetail_" + index_str, spot.noiselumdetail, keyFile);
saveToKeyfile(!pedited || spot_edited->noiselequal, "Locallab", "noiselequal_" + index_str, spot.noiselequal, keyFile);
saveToKeyfile(!pedited || spot_edited->noisegam, "Locallab", "noisegam_" + index_str, spot.noisegam, keyFile);
saveToKeyfile(!pedited || spot_edited->noisechrof, "Locallab", "noisechrof_" + index_str, spot.noisechrof, keyFile);
saveToKeyfile(!pedited || spot_edited->noisechroc, "Locallab", "noisechroc_" + index_str, spot.noisechroc, keyFile);
saveToKeyfile(!pedited || spot_edited->noisechrodetail, "Locallab", "noisechrodetail_" + index_str, spot.noisechrodetail, keyFile);
@ -6348,6 +6742,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->shardamping, "Locallab", "Shardamping_" + index_str, spot.shardamping, keyFile);
saveToKeyfile(!pedited || spot_edited->shariter, "Locallab", "Shariter_" + index_str, spot.shariter, keyFile);
saveToKeyfile(!pedited || spot_edited->sharblur, "Locallab", "Sharblur_" + index_str, spot.sharblur, keyFile);
saveToKeyfile(!pedited || spot_edited->shargam, "Locallab", "Shargam_" + index_str, spot.shargam, keyFile);
saveToKeyfile(!pedited || spot_edited->sensisha, "Locallab", "Sensisha_" + index_str, spot.sensisha, keyFile);
saveToKeyfile(!pedited || spot_edited->inverssha, "Locallab", "Inverssha_" + index_str, spot.inverssha, keyFile);
}
@ -6366,6 +6761,9 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->residshathr, "Locallab", "Residshathr_" + index_str, spot.residshathr, keyFile);
saveToKeyfile(!pedited || spot_edited->residhi, "Locallab", "Residhi_" + index_str, spot.residhi, keyFile);
saveToKeyfile(!pedited || spot_edited->residhithr, "Locallab", "Residhithr_" + index_str, spot.residhithr, keyFile);
saveToKeyfile(!pedited || spot_edited->gamlc, "Locallab", "Gamlc_" + index_str, spot.gamlc, keyFile);
saveToKeyfile(!pedited || spot_edited->residgam, "Locallab", "Residgam_" + index_str, spot.residgam, keyFile);
saveToKeyfile(!pedited || spot_edited->residslop, "Locallab", "Residslop_" + index_str, spot.residslop, keyFile);
saveToKeyfile(!pedited || spot_edited->residblur, "Locallab", "Residblur_" + index_str, spot.residblur, keyFile);
saveToKeyfile(!pedited || spot_edited->levelblur, "Locallab", "Levelblur_" + index_str, spot.levelblur, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmabl, "Locallab", "Sigmabl_" + index_str, spot.sigmabl, keyFile);
@ -6472,7 +6870,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->targetGray, "Locallab", "TargetGray_" + index_str, spot.targetGray, keyFile);
saveToKeyfile(!pedited || spot_edited->catad, "Locallab", "Catad_" + index_str, spot.catad, keyFile);
saveToKeyfile(!pedited || spot_edited->saturl, "Locallab", "Saturl_" + index_str, spot.saturl, keyFile);
saveToKeyfile(!pedited || spot_edited->saturl, "Locallab", "Chroml_" + index_str, spot.chroml, keyFile);
saveToKeyfile(!pedited || spot_edited->chroml, "Locallab", "Chroml_" + index_str, spot.chroml, keyFile);
saveToKeyfile(!pedited || spot_edited->LcurveL, "Locallab", "LCurveL_" + index_str, spot.LcurveL, keyFile);
saveToKeyfile(!pedited || spot_edited->lightl, "Locallab", "Lightl_" + index_str, spot.lightl, keyFile);
saveToKeyfile(!pedited || spot_edited->lightq, "Locallab", "Brightq_" + index_str, spot.lightq, keyFile);
@ -6480,7 +6878,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->contthres, "Locallab", "Contthres_" + index_str, spot.contthres, keyFile);
saveToKeyfile(!pedited || spot_edited->contq, "Locallab", "Contq_" + index_str, spot.contq, keyFile);
saveToKeyfile(!pedited || spot_edited->colorfl, "Locallab", "Colorfl_" + index_str, spot.colorfl, keyFile);
saveToKeyfile(!pedited || spot_edited->Autogray, "Locallab", "Autogray_" + index_str, spot.Autogray, keyFile);
saveToKeyfile(!pedited || spot_edited->Autogray, "Locallab", "AutoGray_" + index_str, spot.Autogray, keyFile);
saveToKeyfile(!pedited || spot_edited->fullimage, "Locallab", "Fullimage_" + index_str, spot.fullimage, keyFile);
saveToKeyfile(!pedited || spot_edited->repar, "Locallab", "Repart_" + index_str, spot.repar, keyFile);
saveToKeyfile(!pedited || spot_edited->ciecam, "Locallab", "Ciecam_" + index_str, spot.ciecam, keyFile);
@ -6537,6 +6935,113 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->LLmask_curvewav, "Locallab", "LLmask_Curvewav_" + index_str, spot.LLmask_curvewav, keyFile);
saveToKeyfile(!pedited || spot_edited->csthresholdmask, "Locallab", "CSThresholdmask_" + index_str, spot.csthresholdmask.toVector(), keyFile);
}
//ciecam
if ((!pedited || spot_edited->visicie) && spot.visicie) {
saveToKeyfile(!pedited || spot_edited->expcie, "Locallab", "Expcie_" + index_str, spot.expcie, keyFile);
saveToKeyfile(!pedited || spot_edited->complexcie, "Locallab", "Complexcie_" + index_str, spot.complexcie, keyFile);
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->qtoj, "Locallab", "Qtoj_" + index_str, spot.qtoj, keyFile);
saveToKeyfile(!pedited || spot_edited->jabcie, "Locallab", "jabcie_" + index_str, spot.jabcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidqjcie, "Locallab", "sigmoidqjcie_" + index_str, spot.sigmoidqjcie, keyFile);
saveToKeyfile(!pedited || spot_edited->logjz, "Locallab", "Logjz_" + index_str, spot.logjz, keyFile);
saveToKeyfile(!pedited || spot_edited->sigjz, "Locallab", "Sigjz_" + index_str, spot.sigjz, 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);
saveToKeyfile(!pedited || spot_edited->sourceabscie, "Locallab", "Sourceabscie_" + index_str, spot.sourceabscie, keyFile);
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->saturlcie, "Locallab", "Saturlcie_" + index_str, spot.saturlcie, keyFile);
saveToKeyfile(!pedited || spot_edited->rstprotectcie, "Locallab", "Rstprotectcie_" + index_str, spot.rstprotectcie, keyFile);
saveToKeyfile(!pedited || spot_edited->chromlcie, "Locallab", "Chromlcie_" + index_str, spot.chromlcie, keyFile);
saveToKeyfile(!pedited || spot_edited->huecie, "Locallab", "Huecie_" + index_str, spot.huecie, keyFile);
saveToKeyfile(!pedited || spot_edited->toneMethodcie, "Locallab", "ToneMethodcie_" + index_str, spot.toneMethodcie, keyFile);
saveToKeyfile(!pedited || spot_edited->ciecurve, "Locallab", "Ciecurve_" + index_str, spot.ciecurve, keyFile);
saveToKeyfile(!pedited || spot_edited->toneMethodcie2, "Locallab", "ToneMethodcie2_" + index_str, spot.toneMethodcie2, keyFile);
saveToKeyfile(!pedited || spot_edited->ciecurve2, "Locallab", "Ciecurve2_" + index_str, spot.ciecurve2, keyFile);
saveToKeyfile(!pedited || spot_edited->chromjzcie, "Locallab", "Chromjzcie_" + index_str, spot.chromjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->saturjzcie, "Locallab", "Saturjzcie_" + index_str, spot.saturjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->huejzcie, "Locallab", "Huejzcie_" + index_str, spot.huejzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->softjzcie, "Locallab", "Softjzcie_" + index_str, spot.softjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->strsoftjzcie, "Locallab", "strSoftjzcie_" + index_str, spot.strsoftjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->thrhjzcie, "Locallab", "Thrhjzcie_" + index_str, spot.thrhjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->CHcurvejz, "Locallab", "JzCurve_" + index_str, spot.jzcurve, keyFile);
saveToKeyfile(!pedited || spot_edited->CHcurvejz, "Locallab", "CzCurve_" + index_str, spot.czcurve, keyFile);
saveToKeyfile(!pedited || spot_edited->CHcurvejz, "Locallab", "CzJzCurve_" + index_str, spot.czjzcurve, keyFile);
saveToKeyfile(!pedited || spot_edited->HHcurvejz, "Locallab", "HHCurvejz_" + index_str, spot.HHcurvejz, keyFile);
saveToKeyfile(!pedited || spot_edited->CHcurvejz, "Locallab", "CHCurvejz_" + index_str, spot.CHcurvejz, keyFile);
saveToKeyfile(!pedited || spot_edited->CHcurvejz, "Locallab", "LHCurvejz_" + index_str, spot.LHcurvejz, keyFile);
saveToKeyfile(!pedited || spot_edited->lightlcie, "Locallab", "Lightlcie_" + index_str, spot.lightlcie, keyFile);
saveToKeyfile(!pedited || spot_edited->lightjzcie, "Locallab", "Lightjzcie_" + index_str, spot.lightjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->lightqcie, "Locallab", "Brightqcie_" + index_str, spot.lightqcie, keyFile);
saveToKeyfile(!pedited || spot_edited->contlcie, "Locallab", "Contlcie_" + index_str, spot.contlcie, keyFile);
saveToKeyfile(!pedited || spot_edited->contjzcie, "Locallab", "Contjzcie_" + index_str, spot.contjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->adapjzcie, "Locallab", "Adapjzcie_" + index_str, spot.adapjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->jz100, "Locallab", "Jz100_" + index_str, spot.jz100, keyFile);
saveToKeyfile(!pedited || spot_edited->pqremap, "Locallab", "PQremap_" + index_str, spot.pqremap, keyFile);
saveToKeyfile(!pedited || spot_edited->pqremapcam16, "Locallab", "PQremapcam16_" + index_str, spot.pqremapcam16, keyFile);
saveToKeyfile(!pedited || spot_edited->hljzcie, "Locallab", "Hljzcie_" + index_str, spot.hljzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->hlthjzcie, "Locallab", "Hlthjzcie_" + index_str, spot.hlthjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->shjzcie, "Locallab", "Shjzcie_" + index_str, spot.shjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->shthjzcie, "Locallab", "Shthjzcie_" + index_str, spot.shthjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->radjzcie, "Locallab", "Radjzcie_" + index_str, spot.radjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmalcjz, "Locallab", "Sigmalcjz_" + index_str, spot.sigmalcjz, keyFile);
saveToKeyfile(!pedited || spot_edited->clarilresjz, "Locallab", "Clarilresjz_" + index_str, spot.clarilresjz, keyFile);
saveToKeyfile(!pedited || spot_edited->claricresjz, "Locallab", "Claricresjz_" + index_str, spot.claricresjz, keyFile);
saveToKeyfile(!pedited || spot_edited->clarisoftjz, "Locallab", "Clarisoftjz_" + index_str, spot.clarisoftjz, keyFile);
saveToKeyfile(!pedited || spot_edited->locwavcurvejz, "Locallab", "LocwavCurvejz_" + index_str, spot.locwavcurvejz, keyFile);
saveToKeyfile(!pedited || spot_edited->csthresholdjz, "Locallab", "CSThresholdjz_" + index_str, spot.csthresholdjz.toVector(), keyFile);
saveToKeyfile(!pedited || spot_edited->contthrescie, "Locallab", "Contthrescie_" + index_str, spot.contthrescie, keyFile);
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->sigmoidldacie, "Locallab", "Sigmoidldacie_" + index_str, spot.sigmoidldacie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidthcie, "Locallab", "Sigmoidthcie_" + index_str, spot.sigmoidthcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidblcie, "Locallab", "Sigmoidblcie_" + index_str, spot.sigmoidblcie, 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->colorflcie, "Locallab", "Colorflcie_" + index_str, spot.colorflcie, keyFile);
/*
saveToKeyfile(!pedited || spot_edited->lightlzcam, "Locallab", "Lightlzcam_" + index_str, spot.lightlzcam, keyFile);
saveToKeyfile(!pedited || spot_edited->lightqzcam, "Locallab", "Lightqzcam_" + index_str, spot.lightqzcam, keyFile);
saveToKeyfile(!pedited || spot_edited->contlzcam, "Locallab", "Contlzcam_" + index_str, spot.contlzcam, keyFile);
saveToKeyfile(!pedited || spot_edited->contqzcam, "Locallab", "Contqzcam_" + index_str, spot.contqzcam, keyFile);
saveToKeyfile(!pedited || spot_edited->contthreszcam, "Locallab", "Contthreszcam_" + index_str, spot.contthreszcam, keyFile);
saveToKeyfile(!pedited || spot_edited->colorflzcam, "Locallab", "Colorflzcam_" + index_str, spot.colorflzcam, keyFile);
saveToKeyfile(!pedited || spot_edited->saturzcam, "Locallab", "Saturzcam_" + index_str, spot.saturzcam, keyFile);
saveToKeyfile(!pedited || spot_edited->chromzcam, "Locallab", "Chromzcam_" + index_str, spot.chromzcam, keyFile);
*/
saveToKeyfile(!pedited || spot_edited->targabscie, "Locallab", "Targabscie_" + index_str, spot.targabscie, keyFile);
saveToKeyfile(!pedited || spot_edited->targetGraycie, "Locallab", "TargetGraycie_" + index_str, spot.targetGraycie, keyFile);
saveToKeyfile(!pedited || spot_edited->catadcie, "Locallab", "Catadcie_" + index_str, spot.catadcie, keyFile);
saveToKeyfile(!pedited || spot_edited->detailcie, "Locallab", "Detailcie_" + index_str, spot.detailcie, keyFile);
saveToKeyfile(!pedited || spot_edited->surroundcie, "Locallab", "Surroundcie_" + index_str, spot.surroundcie, keyFile);
saveToKeyfile(!pedited || spot_edited->enacieMask, "Locallab", "EnacieMask_" + index_str, spot.enacieMask, keyFile);
saveToKeyfile(!pedited || spot_edited->CCmaskciecurve, "Locallab", "CCmaskcieCurve_" + index_str, spot.CCmaskciecurve, keyFile);
saveToKeyfile(!pedited || spot_edited->LLmaskciecurve, "Locallab", "LLmaskcieCurve_" + index_str, spot.LLmaskciecurve, keyFile);
saveToKeyfile(!pedited || spot_edited->HHmaskciecurve, "Locallab", "HHmaskcieCurve_" + index_str, spot.HHmaskciecurve, keyFile);
saveToKeyfile(!pedited || spot_edited->blendmaskcie, "Locallab", "Blendmaskcie_" + index_str, spot.blendmaskcie, keyFile);
saveToKeyfile(!pedited || spot_edited->radmaskcie, "Locallab", "Radmaskcie_" + index_str, spot.radmaskcie, keyFile);
saveToKeyfile(!pedited || spot_edited->chromaskcie, "Locallab", "Chromaskcie_" + index_str, spot.chromaskcie, keyFile);
saveToKeyfile(!pedited || spot_edited->lapmaskcie, "Locallab", "Lapmaskcie_" + index_str, spot.lapmaskcie, keyFile);
saveToKeyfile(!pedited || spot_edited->gammaskcie, "Locallab", "Gammaskcie_" + index_str, spot.gammaskcie, keyFile);
saveToKeyfile(!pedited || spot_edited->slomaskcie, "Locallab", "Slomaskcie_" + index_str, spot.slomaskcie, keyFile);
saveToKeyfile(!pedited || spot_edited->Lmaskciecurve, "Locallab", "LmaskcieCurve_" + index_str, spot.Lmaskciecurve, keyFile);
saveToKeyfile(!pedited || spot_edited->recothrescie, "Locallab", "Recothrescie_" + index_str, spot.recothrescie, keyFile);
saveToKeyfile(!pedited || spot_edited->lowthrescie, "Locallab", "Lowthrescie_" + index_str, spot.lowthrescie, keyFile);
saveToKeyfile(!pedited || spot_edited->higthrescie, "Locallab", "Higthrescie_" + index_str, spot.higthrescie, keyFile);
saveToKeyfile(!pedited || spot_edited->decaycie, "Locallab", "Decaycie_" + index_str, spot.decaycie, keyFile);
}
}
}
@ -7938,6 +8443,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Shortc_" + index_str, pedited, spot.shortc, spotEdited.shortc);
assignFromKeyfile(keyFile, "Locallab", "Savrest_" + index_str, pedited, spot.savrest, spotEdited.savrest);
assignFromKeyfile(keyFile, "Locallab", "Scopemask_" + index_str, pedited, spot.scopemask, spotEdited.scopemask);
assignFromKeyfile(keyFile, "Locallab", "Denoichmask_" + index_str, pedited, spot.denoichmask, spotEdited.denoichmask);
assignFromKeyfile(keyFile, "Locallab", "Lumask_" + index_str, pedited, spot.lumask, spotEdited.lumask);
// Color & Light
spot.visicolor = assignFromKeyfile(keyFile, "Locallab", "Expcolor_" + index_str, pedited, spot.expcolor, spotEdited.expcolor);
@ -7950,6 +8456,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Curvactiv_" + index_str, pedited, spot.curvactiv, spotEdited.curvactiv);
assignFromKeyfile(keyFile, "Locallab", "Lightness_" + index_str, pedited, spot.lightness, spotEdited.lightness);
assignFromKeyfile(keyFile, "Locallab", "Reparcol_" + index_str, pedited, spot.reparcol, spotEdited.reparcol);
assignFromKeyfile(keyFile, "Locallab", "Gamc_" + index_str, pedited, spot.gamc, spotEdited.gamc);
assignFromKeyfile(keyFile, "Locallab", "Contrast_" + index_str, pedited, spot.contrast, spotEdited.contrast);
assignFromKeyfile(keyFile, "Locallab", "Chroma_" + index_str, pedited, spot.chroma, spotEdited.chroma);
assignFromKeyfile(keyFile, "Locallab", "labgridALow_" + index_str, pedited, spot.labgridALow, spotEdited.labgridALow);
@ -8040,6 +8547,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Sensiex_" + index_str, pedited, spot.sensiex, spotEdited.sensiex);
assignFromKeyfile(keyFile, "Locallab", "Structexp_" + index_str, pedited, spot.structexp, spotEdited.structexp);
assignFromKeyfile(keyFile, "Locallab", "Blurexpde_" + index_str, pedited, spot.blurexpde, spotEdited.blurexpde);
assignFromKeyfile(keyFile, "Locallab", "Gamex_" + index_str, pedited, spot.gamex, spotEdited.gamex);
assignFromKeyfile(keyFile, "Locallab", "Strexp_" + index_str, pedited, spot.strexp, spotEdited.strexp);
assignFromKeyfile(keyFile, "Locallab", "Angexp_" + index_str, pedited, spot.angexp, spotEdited.angexp);
assignFromKeyfile(keyFile, "Locallab", "ExCurve_" + index_str, pedited, spot.excurve, spotEdited.excurve);
@ -8131,6 +8639,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Complexvibrance_" + index_str, pedited, spot.complexvibrance, spotEdited.complexvibrance);
assignFromKeyfile(keyFile, "Locallab", "Saturated_" + index_str, pedited, spot.saturated, spotEdited.saturated);
assignFromKeyfile(keyFile, "Locallab", "Pastels_" + index_str, pedited, spot.pastels, spotEdited.pastels);
assignFromKeyfile(keyFile, "Locallab", "Vibgam_" + index_str, pedited, spot.vibgam, spotEdited.vibgam);
assignFromKeyfile(keyFile, "Locallab", "Warm_" + index_str, pedited, spot.warm, spotEdited.warm);
if (keyFile.has_key("Locallab", "PSThreshold_" + index_str)) {
@ -8225,6 +8734,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "noiselumc_" + index_str, pedited, spot.noiselumc, spotEdited.noiselumc);
assignFromKeyfile(keyFile, "Locallab", "noiselumdetail_" + index_str, pedited, spot.noiselumdetail, spotEdited.noiselumdetail);
assignFromKeyfile(keyFile, "Locallab", "noiselequal_" + index_str, pedited, spot.noiselequal, spotEdited.noiselequal);
assignFromKeyfile(keyFile, "Locallab", "noisegam_" + index_str, pedited, spot.noisegam, spotEdited.noisegam);
assignFromKeyfile(keyFile, "Locallab", "noisechrof_" + index_str, pedited, spot.noisechrof, spotEdited.noisechrof);
assignFromKeyfile(keyFile, "Locallab", "noisechroc_" + index_str, pedited, spot.noisechroc, spotEdited.noisechroc);
assignFromKeyfile(keyFile, "Locallab", "noisechrodetail_" + index_str, pedited, spot.noisechrodetail, spotEdited.noisechrodetail);
@ -8364,6 +8874,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Shardamping_" + index_str, pedited, spot.shardamping, spotEdited.shardamping);
assignFromKeyfile(keyFile, "Locallab", "Shariter_" + index_str, pedited, spot.shariter, spotEdited.shariter);
assignFromKeyfile(keyFile, "Locallab", "Sharblur_" + index_str, pedited, spot.sharblur, spotEdited.sharblur);
assignFromKeyfile(keyFile, "Locallab", "Shargam_" + index_str, pedited, spot.shargam, spotEdited.shargam);
assignFromKeyfile(keyFile, "Locallab", "Sensisha_" + index_str, pedited, spot.sensisha, spotEdited.sensisha);
assignFromKeyfile(keyFile, "Locallab", "Inverssha_" + index_str, pedited, spot.inverssha, spotEdited.inverssha);
// Local Contrast
@ -8384,7 +8895,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Residsha_" + index_str, pedited, spot.residsha, spotEdited.residsha);
assignFromKeyfile(keyFile, "Locallab", "Residshathr_" + index_str, pedited, spot.residshathr, spotEdited.residshathr);
assignFromKeyfile(keyFile, "Locallab", "Residhi_" + index_str, pedited, spot.residhi, spotEdited.residhi);
assignFromKeyfile(keyFile, "Locallab", "Gamlc_" + index_str, pedited, spot.gamlc, spotEdited.gamlc);
assignFromKeyfile(keyFile, "Locallab", "Residhithr_" + index_str, pedited, spot.residhithr, spotEdited.residhithr);
assignFromKeyfile(keyFile, "Locallab", "Residgam_" + index_str, pedited, spot.residgam, spotEdited.residgam);
assignFromKeyfile(keyFile, "Locallab", "Residslop_" + index_str, pedited, spot.residslop, spotEdited.residslop);
assignFromKeyfile(keyFile, "Locallab", "Residblur_" + index_str, pedited, spot.residblur, spotEdited.residblur);
assignFromKeyfile(keyFile, "Locallab", "Levelblur_" + index_str, pedited, spot.levelblur, spotEdited.levelblur);
assignFromKeyfile(keyFile, "Locallab", "Sigmabl_" + index_str, pedited, spot.sigmabl, spotEdited.sigmabl);
@ -8584,6 +9098,122 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
spotEdited.visimask = true;
}
// ciecam
spot.visicie = assignFromKeyfile(keyFile, "Locallab", "Expcie_" + index_str, pedited, spot.expcie, spotEdited.expcie);
if (spot.visicie) {
spotEdited.visicie = true;
}
assignFromKeyfile(keyFile, "Locallab", "Complexcie_" + index_str, pedited, spot.complexcie, spotEdited.complexcie);
assignFromKeyfile(keyFile, "Locallab", "Reparcie_" + index_str, pedited, spot.reparcie, spotEdited.reparcie);
assignFromKeyfile(keyFile, "Locallab", "Sensicie_" + index_str, pedited, spot.sensicie, spotEdited.sensicie);
assignFromKeyfile(keyFile, "Locallab", "AutoGraycie_" + index_str, pedited, spot.Autograycie, spotEdited.Autograycie);
assignFromKeyfile(keyFile, "Locallab", "Forcejz_" + index_str, pedited, spot.forcejz, spotEdited.forcejz);
assignFromKeyfile(keyFile, "Locallab", "Forcebw_" + index_str, pedited, spot.forcebw, spotEdited.forcebw);
assignFromKeyfile(keyFile, "Locallab", "Qtoj_" + index_str, pedited, spot.qtoj, spotEdited.qtoj);
assignFromKeyfile(keyFile, "Locallab", "jabcie_" + index_str, pedited, spot.jabcie, spotEdited.jabcie);
assignFromKeyfile(keyFile, "Locallab", "sigmoidqjcie_" + index_str, pedited, spot.sigmoidqjcie, spotEdited.sigmoidqjcie);
assignFromKeyfile(keyFile, "Locallab", "Logjz_" + index_str, pedited, spot.logjz, spotEdited.logjz);
assignFromKeyfile(keyFile, "Locallab", "Sigjz_" + index_str, pedited, spot.sigjz, spotEdited.sigjz);
assignFromKeyfile(keyFile, "Locallab", "chjzcie_" + index_str, pedited, spot.chjzcie, spotEdited.chjzcie);
assignFromKeyfile(keyFile, "Locallab", "SourceGraycie_" + index_str, pedited, spot.sourceGraycie, spotEdited.sourceGraycie);
assignFromKeyfile(keyFile, "Locallab", "Sourceabscie_" + index_str, pedited, spot.sourceabscie, spotEdited.sourceabscie);
assignFromKeyfile(keyFile, "Locallab", "Sursourcie_" + index_str, pedited, spot.sursourcie, spotEdited.sursourcie);
assignFromKeyfile(keyFile, "Locallab", "Modecie_" + index_str, pedited, spot.modecie, spotEdited.modecie);
assignFromKeyfile(keyFile, "Locallab", "Modecam_" + index_str, pedited, spot.modecam, spotEdited.modecam);
assignFromKeyfile(keyFile, "Locallab", "Saturlcie_" + index_str, pedited, spot.saturlcie, spotEdited.saturlcie);
assignFromKeyfile(keyFile, "Locallab", "Rstprotectcie_" + index_str, pedited, spot.rstprotectcie, spotEdited.rstprotectcie);
assignFromKeyfile(keyFile, "Locallab", "Chromlcie_" + index_str, pedited, spot.chromlcie, spotEdited.chromlcie);
assignFromKeyfile(keyFile, "Locallab", "Huecie_" + index_str, pedited, spot.huecie, spotEdited.huecie);
assignFromKeyfile(keyFile, "Locallab", "ToneMethodcie_" + index_str, pedited, spot.toneMethodcie, spotEdited.toneMethodcie);
assignFromKeyfile(keyFile, "Locallab", "Ciecurve_" + index_str, pedited, spot.ciecurve, spotEdited.ciecurve);
assignFromKeyfile(keyFile, "Locallab", "ToneMethodcie2_" + index_str, pedited, spot.toneMethodcie2, spotEdited.toneMethodcie2);
assignFromKeyfile(keyFile, "Locallab", "Ciecurve2_" + index_str, pedited, spot.ciecurve2, spotEdited.ciecurve2);
assignFromKeyfile(keyFile, "Locallab", "Chromjzcie_" + index_str, pedited, spot.chromjzcie, spotEdited.chromjzcie);
assignFromKeyfile(keyFile, "Locallab", "Saturjzcie_" + index_str, pedited, spot.saturjzcie, spotEdited.saturjzcie);
assignFromKeyfile(keyFile, "Locallab", "Huejzcie_" + index_str, pedited, spot.huejzcie, spotEdited.huejzcie);
assignFromKeyfile(keyFile, "Locallab", "Softjzcie_" + index_str, pedited, spot.softjzcie, spotEdited.softjzcie);
assignFromKeyfile(keyFile, "Locallab", "strSoftjzcie_" + index_str, pedited, spot.strsoftjzcie, spotEdited.strsoftjzcie);
assignFromKeyfile(keyFile, "Locallab", "Thrhjzcie_" + index_str, pedited, spot.thrhjzcie, spotEdited.thrhjzcie);
assignFromKeyfile(keyFile, "Locallab", "JzCurve_" + index_str, pedited, spot.jzcurve, spotEdited.jzcurve);
assignFromKeyfile(keyFile, "Locallab", "CzCurve_" + index_str, pedited, spot.czcurve, spotEdited.czcurve);
assignFromKeyfile(keyFile, "Locallab", "CzJzCurve_" + index_str, pedited, spot.czjzcurve, spotEdited.czjzcurve);
assignFromKeyfile(keyFile, "Locallab", "HHCurvejz_" + index_str, pedited, spot.HHcurvejz, spotEdited.HHcurvejz);
assignFromKeyfile(keyFile, "Locallab", "CHCurvejz_" + index_str, pedited, spot.CHcurvejz, spotEdited.CHcurvejz);
assignFromKeyfile(keyFile, "Locallab", "LHCurvejz_" + index_str, pedited, spot.LHcurvejz, spotEdited.LHcurvejz);
assignFromKeyfile(keyFile, "Locallab", "Lightlcie_" + index_str, pedited, spot.lightlcie, spotEdited.lightlcie);
assignFromKeyfile(keyFile, "Locallab", "Lightjzcie_" + index_str, pedited, spot.lightjzcie, spotEdited.lightjzcie);
assignFromKeyfile(keyFile, "Locallab", "Brightqcie_" + index_str, pedited, spot.lightqcie, spotEdited.lightqcie);
assignFromKeyfile(keyFile, "Locallab", "Contlcie_" + index_str, pedited, spot.contlcie, spotEdited.contlcie);
assignFromKeyfile(keyFile, "Locallab", "Contjzcie_" + index_str, pedited, spot.contjzcie, spotEdited.contjzcie);
assignFromKeyfile(keyFile, "Locallab", "Adapjzcie_" + index_str, pedited, spot.adapjzcie, spotEdited.adapjzcie);
assignFromKeyfile(keyFile, "Locallab", "Jz100_" + index_str, pedited, spot.jz100, spotEdited.jz100);
assignFromKeyfile(keyFile, "Locallab", "PQremap_" + index_str, pedited, spot.pqremap, spotEdited.pqremap);
assignFromKeyfile(keyFile, "Locallab", "PQremapcam16_" + index_str, pedited, spot.pqremapcam16, spotEdited.pqremapcam16);
assignFromKeyfile(keyFile, "Locallab", "Hljzcie_" + index_str, pedited, spot.hljzcie, spotEdited.hljzcie);
assignFromKeyfile(keyFile, "Locallab", "Hlthjzcie_" + index_str, pedited, spot.hlthjzcie, spotEdited.hlthjzcie);
assignFromKeyfile(keyFile, "Locallab", "Shjzcie_" + index_str, pedited, spot.shjzcie, spotEdited.shjzcie);
assignFromKeyfile(keyFile, "Locallab", "Shthjzcie_" + index_str, pedited, spot.shthjzcie, spotEdited.shthjzcie);
assignFromKeyfile(keyFile, "Locallab", "Radjzcie_" + index_str, pedited, spot.radjzcie, spotEdited.radjzcie);
if (keyFile.has_key("Locallab", "CSThresholdjz_" + index_str)) {
const std::vector<int> thresh = keyFile.get_integer_list("Locallab", "CSThresholdjz_" + index_str);
if (thresh.size() >= 4) {
spot.csthresholdjz.setValues(thresh[0], thresh[1], min(thresh[2], 10), min(thresh[3], 10));
}
spotEdited.csthresholdjz = true;
}
assignFromKeyfile(keyFile, "Locallab", "Sigmalcjz_" + index_str, pedited, spot.sigmalcjz, spotEdited.sigmalcjz);
assignFromKeyfile(keyFile, "Locallab", "Clarilresjz_" + index_str, pedited, spot.clarilresjz, spotEdited.clarilresjz);
assignFromKeyfile(keyFile, "Locallab", "Claricresjz_" + index_str, pedited, spot.claricresjz, spotEdited.claricresjz);
assignFromKeyfile(keyFile, "Locallab", "Clarisoftjz_" + index_str, pedited, spot.clarisoftjz, spotEdited.clarisoftjz);
assignFromKeyfile(keyFile, "Locallab", "LocwavCurvejz_" + index_str, pedited, spot.locwavcurvejz, spotEdited.locwavcurvejz);
assignFromKeyfile(keyFile, "Locallab", "Contthrescie_" + index_str, pedited, spot.contthrescie, spotEdited.contthrescie);
assignFromKeyfile(keyFile, "Locallab", "Contthrescie_" + index_str, pedited, spot.contthrescie, spotEdited.contthrescie);
assignFromKeyfile(keyFile, "Locallab", "BlackEvjz_" + index_str, pedited, spot.blackEvjz, spotEdited.blackEvjz);
assignFromKeyfile(keyFile, "Locallab", "WhiteEvjz_" + index_str, pedited, spot.whiteEvjz, spotEdited.whiteEvjz);
assignFromKeyfile(keyFile, "Locallab", "Targetjz_" + index_str, pedited, spot.targetjz, spotEdited.targetjz);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidthcie_" + index_str, pedited, spot.sigmoidthcie, spotEdited.sigmoidthcie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidblcie_" + index_str, pedited, spot.sigmoidblcie, spotEdited.sigmoidblcie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidldajzcie_" + index_str, pedited, spot.sigmoidldajzcie, spotEdited.sigmoidldajzcie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidthjzcie_" + index_str, pedited, spot.sigmoidthjzcie, spotEdited.sigmoidthjzcie);
assignFromKeyfile(keyFile, "Locallab", "Sigmoidbljzcie_" + index_str, pedited, spot.sigmoidbljzcie, spotEdited.sigmoidbljzcie);
assignFromKeyfile(keyFile, "Locallab", "Contqcie_" + index_str, pedited, spot.contqcie, spotEdited.contqcie);
assignFromKeyfile(keyFile, "Locallab", "Colorflcie_" + index_str, pedited, spot.colorflcie, spotEdited.colorflcie);
/*
assignFromKeyfile(keyFile, "Locallab", "Lightlzcam_" + index_str, pedited, spot.lightlzcam, spotEdited.lightlzcam);
assignFromKeyfile(keyFile, "Locallab", "Lightqzcam_" + index_str, pedited, spot.lightqzcam, spotEdited.lightqzcam);
assignFromKeyfile(keyFile, "Locallab", "Contlzcam_" + index_str, pedited, spot.contlzcam, spotEdited.contlzcam);
assignFromKeyfile(keyFile, "Locallab", "Contqzcam_" + index_str, pedited, spot.contqzcam, spotEdited.contqzcam);
assignFromKeyfile(keyFile, "Locallab", "Contthreszcam_" + index_str, pedited, spot.contthreszcam, spotEdited.contthreszcam);
*/
assignFromKeyfile(keyFile, "Locallab", "Targabscie_" + index_str, pedited, spot.targabscie, spotEdited.targabscie);
assignFromKeyfile(keyFile, "Locallab", "TargetGraycie_" + index_str, pedited, spot.targetGraycie, spotEdited.targetGraycie);
assignFromKeyfile(keyFile, "Locallab", "Catadcie_" + index_str, pedited, spot.catadcie, spotEdited.catadcie);
assignFromKeyfile(keyFile, "Locallab", "Detailcie_" + index_str, pedited, spot.detailcie, spotEdited.detailcie);
/*
assignFromKeyfile(keyFile, "Locallab", "Colorflzcam_" + index_str, pedited, spot.colorflzcam, spotEdited.colorflzcam);
assignFromKeyfile(keyFile, "Locallab", "Saturzcam_" + index_str, pedited, spot.saturzcam, spotEdited.saturzcam);
assignFromKeyfile(keyFile, "Locallab", "Chromzcam_" + index_str, pedited, spot.chromzcam, spotEdited.chromzcam);
*/
assignFromKeyfile(keyFile, "Locallab", "EnacieMask_" + index_str, pedited, spot.enacieMask, spotEdited.enacieMask);
assignFromKeyfile(keyFile, "Locallab", "CCmaskcieCurve_" + index_str, pedited, spot.CCmaskciecurve, spotEdited.CCmaskciecurve);
assignFromKeyfile(keyFile, "Locallab", "LLmaskcieCurve_" + index_str, pedited, spot.LLmaskciecurve, spotEdited.LLmaskciecurve);
assignFromKeyfile(keyFile, "Locallab", "HHmaskcieCurve_" + index_str, pedited, spot.HHmaskciecurve, spotEdited.HHmaskciecurve);
assignFromKeyfile(keyFile, "Locallab", "Blendmaskcie_" + index_str, pedited, spot.blendmaskcie, spotEdited.blendmaskcie);
assignFromKeyfile(keyFile, "Locallab", "Radmaskcie_" + index_str, pedited, spot.radmaskcie, spotEdited.radmaskcie);
assignFromKeyfile(keyFile, "Locallab", "Chromaskcie_" + index_str, pedited, spot.chromaskcie, spotEdited.chromaskcie);
assignFromKeyfile(keyFile, "Locallab", "Lapmaskcie_" + index_str, pedited, spot.lapmaskcie, spotEdited.lapmaskcie);
assignFromKeyfile(keyFile, "Locallab", "Gammaskcie_" + index_str, pedited, spot.gammaskcie, spotEdited.gammaskcie);
assignFromKeyfile(keyFile, "Locallab", "Slomaskcie_" + index_str, pedited, spot.slomaskcie, spotEdited.slomaskcie);
assignFromKeyfile(keyFile, "Locallab", "LmaskcieCurve_" + index_str, pedited, spot.Lmaskciecurve, spotEdited.Lmaskciecurve);
assignFromKeyfile(keyFile, "Locallab", "Recothrescie_" + index_str, pedited, spot.recothrescie, spotEdited.recothrescie);
assignFromKeyfile(keyFile, "Locallab", "Lowthrescie_" + index_str, pedited, spot.lowthrescie, spotEdited.lowthrescie);
assignFromKeyfile(keyFile, "Locallab", "Higthrescie_" + index_str, pedited, spot.higthrescie, spotEdited.higthrescie);
assignFromKeyfile(keyFile, "Locallab", "Decaycie_" + index_str, pedited, spot.decaycie, spotEdited.decaycie);
// Append LocallabSpot and LocallabParamsEdited
locallab.spots.push_back(spot);

View File

@ -1037,6 +1037,7 @@ struct LocallabParams {
bool shortc;
bool savrest;
int scopemask;
double denoichmask;
int lumask;
// Color & Light
bool visicolor;
@ -1045,6 +1046,7 @@ struct LocallabParams {
bool curvactiv;
int lightness;
double reparcol;
double gamc;
int contrast;
int chroma;
double labgridALow;
@ -1121,6 +1123,7 @@ struct LocallabParams {
int sensiex;
int structexp;
int blurexpde;
double gamex;
double strexp;
double angexp;
std::vector<double> excurve;
@ -1199,6 +1202,7 @@ struct LocallabParams {
int complexvibrance;
int saturated;
int pastels;
double vibgam;
int warm;
Threshold<int> psthreshold;
bool protectskins;
@ -1275,6 +1279,7 @@ struct LocallabParams {
double noiselumc;
double noiselumdetail;
int noiselequal;
double noisegam;
double noisechrof;
double noisechroc;
double noisechrodetail;
@ -1393,6 +1398,7 @@ struct LocallabParams {
int shardamping;
int shariter;
double sharblur;
double shargam;
int sensisha;
bool inverssha;
// Local Contrast
@ -1410,6 +1416,9 @@ struct LocallabParams {
double residshathr;
double residhi;
double residhithr;
double gamlc;
double residgam;
double residslop;
double residblur;
double levelblur;
double sigmabl;
@ -1573,6 +1582,108 @@ struct LocallabParams {
std::vector<double> Lmask_curve;
std::vector<double> LLmask_curvewav;
Threshold<int> csthresholdmask;
//ciecam
bool visicie;
bool expcie;
int complexcie;
double reparcie;
int sensicie;
bool Autograycie;
bool forcejz;
bool forcebw;
bool qtoj;
bool jabcie;
bool sigmoidqjcie;
bool logjz;
bool sigjz;
bool chjzcie;
double sourceGraycie;
double sourceabscie;
Glib::ustring sursourcie;
Glib::ustring modecie;
Glib::ustring modecam;
double saturlcie;
double rstprotectcie;
double chromlcie;
double huecie;
Glib::ustring toneMethodcie;
std::vector<double> ciecurve;
Glib::ustring toneMethodcie2;
std::vector<double> ciecurve2;
double chromjzcie;
double saturjzcie;
double huejzcie;
double softjzcie;
double strsoftjzcie;
double thrhjzcie;
std::vector<double> jzcurve;
std::vector<double> czcurve;
std::vector<double> czjzcurve;
std::vector<double> HHcurvejz;
std::vector<double> CHcurvejz;
std::vector<double> LHcurvejz;
double lightlcie;
double lightjzcie;
double lightqcie;
double contlcie;
double contjzcie;
double adapjzcie;
double jz100;
double pqremap;
double pqremapcam16;
double hljzcie;
double hlthjzcie;
double shjzcie;
double shthjzcie;
double radjzcie;
double sigmalcjz;
double clarilresjz;
double claricresjz;
double clarisoftjz;
std::vector<double> locwavcurvejz;
Threshold<int> csthresholdjz;
double contthrescie;
double blackEvjz;
double whiteEvjz;
double targetjz;
double sigmoidldacie;
double sigmoidthcie;
double sigmoidblcie;
double sigmoidldajzcie;
double sigmoidthjzcie;
double sigmoidbljzcie;
double contqcie;
double colorflcie;
/*
double lightlzcam;
double lightqzcam;
double contlzcam;
double contqzcam;
double contthreszcam;
double colorflzcam;
double saturzcam;
double chromzcam;
*/
double targabscie;
double targetGraycie;
double catadcie;
double detailcie;
Glib::ustring surroundcie;
bool enacieMask;
std::vector<double> CCmaskciecurve;
std::vector<double> LLmaskciecurve;
std::vector<double> HHmaskciecurve;
int blendmaskcie;
double radmaskcie;
double chromaskcie;
double lapmaskcie;
double gammaskcie;
double slomaskcie;
std::vector<double> Lmaskciecurve;
double recothrescie;
double lowthrescie;
double higthrescie;
double decaycie;
LocallabSpot();

View File

@ -524,7 +524,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
DEMOSAIC, // EvPdShrEnabled
CAPTURESHARPEN, // EvPdShrMaskToggled
AUTOEXP, // EvLocallabSpotDeleted
M_VOID, // EvLocallabSpotSelected
HDR, // EvLocallabSpotSelected
M_VOID, // EvLocallabSpotName
M_VOID, // EvLocallabSpotVisibility
AUTOEXP, // EvLocallabSpotShape
@ -1077,8 +1077,114 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, // Evlocallabreparsh
AUTOEXP, // Evlocallabreparexp
AUTOEXP, // Evlocallabrepartm
AUTOEXP // Evlocallabchroml
AUTOEXP, // Evlocallabchroml
AUTOEXP, // Evlocallabresidgam
AUTOEXP, // Evlocallabresidslop
AUTOEXP, // Evlocallabnoisegam
AUTOEXP, //Evlocallabgamlc
AUTOEXP, //Evlocallabgamc
AUTOEXP, //Evlocallabgamex
AUTOEXP | M_AUTOEXP, // EvLocenacie
AUTOEXP, //Evlocallabreparcie
HDR, //EvlocallabAutograycie
HDR, //EvlocallabsourceGraycie
HDR, //Evlocallabsourceabscie
AUTOEXP, //Evlocallabsursourcie
AUTOEXP, //Evlocallabsaturlcie
AUTOEXP, //Evlocallabchromlcie
AUTOEXP, //Evlocallablightlcie
AUTOEXP, //Evlocallablightqcie
AUTOEXP, //Evlocallabcontlcie
AUTOEXP, //Evlocallabcontthrescie
AUTOEXP, //Evlocallabcontqcie
AUTOEXP, //Evlocallabcolorflcie
AUTOEXP, //Evlocallabtargabscie
AUTOEXP, //EvlocallabtargetGraycie
AUTOEXP, //Evlocallabcatadcie
AUTOEXP, //Evlocallabdetailcie
AUTOEXP, //Evlocallabsurroundcie
AUTOEXP, //Evlocallabsensicie
AUTOEXP, //Evlocallabmodecie
AUTOEXP, //Evlocallabrstprotectcie
AUTOEXP, //Evlocallabsigmoidldacie
AUTOEXP, //Evlocallabsigmoidthcie
AUTOEXP, //Evlocallabsigmoidblcie
AUTOEXP, //Evlocallabsigmoidqjcie
AUTOEXP, //Evlocallabhuecie
AUTOEXP, //Evlocallabjabcie
AUTOEXP, //Evlocallablightjzcie
AUTOEXP, //Evlocallabcontjzcie
AUTOEXP, //Evlocallabchromjzcie
AUTOEXP, //Evlocallabhuejzcie
AUTOEXP, //Evlocallabsigmoidldajzcie
AUTOEXP, //Evlocallabsigmoidthjzcie
AUTOEXP, //Evlocallabsigmoidbljzcie
AUTOEXP, //Evlocallabadapjzcie
AUTOEXP, //Evlocallabmodecam
AUTOEXP, //Evlocallabhljzcie
AUTOEXP, //Evlocallabhlthjzcie
AUTOEXP, //Evlocallabshjzcie
AUTOEXP, //Evlocallabshthjzcie
AUTOEXP, //Evlocallabradjzcie
// AUTOEXP, //EvlocallabHHshapejz
AUTOEXP, //EvlocallabCHshapejz
AUTOEXP, //Evlocallabjz100
AUTOEXP, //Evlocallabpqremap
AUTOEXP, //EvlocallabLHshapejz
AUTOEXP, //Evlocallabshargam
AUTOEXP, //Evlocallabvibgam
AUTOEXP, //EvLocallabtoneMethodcie
AUTOEXP, //Evlocallabshapecie
AUTOEXP, //EvLocallabtoneMethodcie2
AUTOEXP, //Evlocallabshapecie2
AUTOEXP, //Evlocallabshapejz
AUTOEXP, //Evlocallabshapecz
AUTOEXP, //Evlocallabshapeczjz
AUTOEXP, //Evlocallabforcejz
// AUTOEXP, //Evlocallablightlzcam
// AUTOEXP, //Evlocallablightqzcam
// AUTOEXP, //Evlocallabcontlzcam
// AUTOEXP, //Evlocallabcontqzcam
// AUTOEXP, //Evlocallabcontthreszcam
// AUTOEXP, //Evlocallabcolorflzcam
// AUTOEXP, //Evlocallabsaturzcam
// AUTOEXP, //Evlocallabchromzcam
AUTOEXP, //Evlocallabpqremapcam16
AUTOEXP, //EvLocallabEnacieMask
AUTOEXP, //EvlocallabCCmaskcieshape
AUTOEXP, //EvlocallabLLmaskcieshape
AUTOEXP, //EvlocallabHHmaskcieshape
AUTOEXP, //Evlocallabblendmaskcie
AUTOEXP, //Evlocallabradmaskcie
AUTOEXP, //Evlocallabchromaskcie
AUTOEXP, //EvlocallabLmaskcieshape
AUTOEXP, //Evlocallabrecothrescie
AUTOEXP, //Evlocallablowthrescie
AUTOEXP, //Evlocallabhigthrescie
AUTOEXP, //Evlocallabdecaycie
AUTOEXP, //Evlocallablapmaskcie
AUTOEXP, //Evlocallabgammaskcie
AUTOEXP, //Evlocallabslomaskcie
AUTOEXP, //Evlocallabqtoj
AUTOEXP, //Evlocallabsaturjzcie
AUTOEXP, //EvLocallabSpotdenoichmask
AUTOEXP, //Evlocallabsigmalcjz
AUTOEXP, //EvlocallabcsThresholdjz
AUTOEXP, //EvlocallabwavCurvejz
AUTOEXP, //Evlocallabclarilresjz
AUTOEXP, //Evlocallabclaricresjz
AUTOEXP, //Evlocallabclarisoftjz
AUTOEXP, //EvlocallabHHshapejz
AUTOEXP, //Evlocallabsoftjzcie
AUTOEXP, //Evlocallabthrhjzcie
AUTOEXP, //Evlocallabchjzcie
AUTOEXP, //Evlocallabstrsoftjzcie
AUTOEXP, //EvlocallabblackEvjz
AUTOEXP, //EvlocallabwhiteEvjz
AUTOEXP, //Evlocallablogjz
AUTOEXP, //Evlocallabtargetjz
AUTOEXP, //Evlocallabforcebw
AUTOEXP //Evlocallabsigjz
};

View File

@ -424,6 +424,7 @@ public:
double huer;
double lumar;
double chromar;
float fab;
};
struct locallabRetiMinMax {
@ -438,9 +439,10 @@ public:
};
virtual ~LocallabListener() = default;
virtual void refChanged(const std::vector<locallabRef> &ref, int selspot) = 0;
// virtual void refChanged(const std::vector<locallabRef> &ref, int selspot) = 0;
virtual void minmaxChanged(const std::vector<locallabRetiMinMax> &minmax, int selspot) = 0;
virtual void logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg) = 0;
virtual void logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1) = 0;
virtual void refChanged2(float *huerefp, float *chromarefp, float *lumarefp, float *fabrefp, int selspot) = 0;
};
class AutoColorTonListener
@ -610,7 +612,7 @@ public:
virtual void updateUnLock() = 0;
virtual void setLocallabMaskVisibility(bool previewDeltaE, int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallsoftMask, int locallblMask, int localltmMask, int locallretiMask, int locallsharMask, int localllcMask, int locallcbMask, int localllogMask, int locall_Mask) = 0;
virtual void setLocallabMaskVisibility(bool previewDeltaE, int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallsoftMask, int locallblMask, int localltmMask, int locallretiMask, int locallsharMask, int localllcMask, int locallcbMask, int localllogMask, int locall_Mask, int locallcieMask) = 0;
/** Creates and returns a Crop instance that acts as a window on the image
* @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber

View File

@ -1489,10 +1489,11 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
adap = 2000.f;
} else {
float E_V = fcomp + log2 ((fnum * fnum) / fspeed / (fiso / 100.f));
float expo2 = params.toneCurve.expcomp; // exposure compensation in tonecurve ==> direct EV
double kexp = 0.;
float expo2 = kexp * params.toneCurve.expcomp; // exposure compensation in tonecurve ==> direct EV
E_V += expo2;
float expo1;//exposure raw white point
expo1 = log2 (params.raw.expos); //log2 ==>linear to EV
expo1 = 0.5 * log2 (params.raw.expos); //log2 ==>linear to EV
E_V += expo1;
adap = powf (2.f, E_V - 3.f); //cd / m2
//end calculation adaptation scene luminosity

View File

@ -65,6 +65,7 @@ public:
bool HistogramWorking; // true: histogram is display the value of the image computed in the Working profile
// false: histogram is display the value of the image computed in the Output profile
int amchroma;
int amchromajz;
int protectred;
double protectredh;
double nrauto;

View File

@ -952,6 +952,9 @@ private:
LocLHCurve loclhCurve;
LocHHCurve lochhCurve;
LocCHCurve locchCurve;
LocHHCurve lochhCurvejz;
LocCHCurve locchCurvejz;
LocLHCurve loclhCurvejz;
LocCCmaskCurve locccmasCurve;
LocLLmaskCurve locllmasCurve;
LocHHmaskCurve lochhmasCurve;
@ -983,6 +986,9 @@ private:
LocCCmaskCurve locccmaslogCurve;
LocLLmaskCurve locllmaslogCurve;
LocHHmaskCurve lochhmaslogCurve;
LocCCmaskCurve locccmascieCurve;
LocLLmaskCurve locllmascieCurve;
LocHHmaskCurve lochhmascieCurve;
LocCCmaskCurve locccmas_Curve;
LocLLmaskCurve locllmas_Curve;
@ -993,6 +999,7 @@ private:
LocwavCurve loclmasCurvecolwav;
LocwavCurve loclmasCurve_wav;
LocwavCurve locwavCurve;
LocwavCurve locwavCurvejz;
LocwavCurve loclevwavCurve;
LocwavCurve locconwavCurve;
LocwavCurve loccompwavCurve;
@ -1021,6 +1028,12 @@ private:
LUTf lmasklclocalcurve(65536, LUT_CLIP_OFF);
LUTf lmaskloglocalcurve(65536, LUT_CLIP_OFF);
LUTf lmasklocal_curve(65536, LUT_CLIP_OFF);
LUTf lmaskcielocalcurve(65536, LUT_CLIP_OFF);
LUTf cielocalcurve(65536, LUT_CLIP_OFF);
LUTf cielocalcurve2(65536, LUT_CLIP_OFF);
LUTf jzlocalcurve(65536, LUT_CLIP_OFF);
LUTf czlocalcurve(65536, LUT_CLIP_OFF);
LUTf czjzlocalcurve(65536, LUT_CLIP_OFF);
array2D<float> shbuffer;
for (size_t sp = 0; sp < params.locallab.spots.size(); sp++) {
@ -1038,6 +1051,9 @@ private:
const bool LHutili = loclhCurve.Set(params.locallab.spots.at(sp).LHcurve);
const bool HHutili = lochhCurve.Set(params.locallab.spots.at(sp).HHcurve);
const bool CHutili = locchCurve.Set(params.locallab.spots.at(sp).CHcurve);
const bool HHutilijz = lochhCurvejz.Set(params.locallab.spots.at(sp).HHcurvejz);
const bool CHutilijz = locchCurvejz.Set(params.locallab.spots.at(sp).CHcurvejz);
const bool LHutilijz = loclhCurvejz.Set(params.locallab.spots.at(sp).LHcurvejz);
const bool lcmasutili = locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve);
const bool llmasutili = locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve);
const bool lhmasutili = lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve);
@ -1067,6 +1083,9 @@ private:
const bool lcmaslogutili = locccmaslogCurve.Set(params.locallab.spots.at(sp).CCmaskcurveL);
const bool llmaslogutili = locllmaslogCurve.Set(params.locallab.spots.at(sp).LLmaskcurveL);
const bool lhmaslogutili = lochhmaslogCurve.Set(params.locallab.spots.at(sp).HHmaskcurveL);
const bool lcmascieutili = locccmascieCurve.Set(params.locallab.spots.at(sp).CCmaskciecurve);
const bool llmascieutili = locllmascieCurve.Set(params.locallab.spots.at(sp).LLmaskciecurve);
const bool lhmascieutili = lochhmascieCurve.Set(params.locallab.spots.at(sp).HHmaskciecurve);
const bool lcmas_utili = locccmas_Curve.Set(params.locallab.spots.at(sp).CCmask_curve);
const bool llmas_utili = locllmas_Curve.Set(params.locallab.spots.at(sp).LLmask_curve);
@ -1078,6 +1097,7 @@ private:
const bool llmaslcutili = locllmaslcCurve.Set(params.locallab.spots.at(sp).LLmasklccurve);
const bool lmasutili_wav = loclmasCurve_wav.Set(params.locallab.spots.at(sp).LLmask_curvewav);
const bool locwavutili = locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve);
const bool locwavutilijz = locwavCurvejz.Set(params.locallab.spots.at(sp).locwavcurvejz);
const bool locwavhueutili = locwavCurvehue.Set(params.locallab.spots.at(sp).locwavcurvehue);
const bool locwavdenutili = locwavCurveden.Set(params.locallab.spots.at(sp).locwavcurveden);
const bool loclevwavutili = loclevwavCurve.Set(params.locallab.spots.at(sp).loclevwavcurve);
@ -1102,6 +1122,12 @@ private:
const bool localmasklcutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).Lmasklccurve, lmasklclocalcurve, 1);
const bool localmasklogutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).LmaskcurveL, lmaskloglocalcurve, 1);
const bool localmask_utili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).Lmask_curve, lmasklocal_curve, 1);
const bool localmaskcieutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).Lmaskciecurve, lmaskcielocalcurve, 1);
const bool localcieutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).ciecurve, cielocalcurve, 1);
const bool localcieutili2 = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).ciecurve2, cielocalcurve2, 1);
const bool localjzutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).jzcurve, jzlocalcurve, 1);
const bool localczutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).czcurve, czlocalcurve, 1);
const bool localczjzutili = CurveFactory::diagonalCurve2Lut(params.locallab.spots.at(sp).czjzcurve, czjzlocalcurve, 1);
//provisory
double ecomp = params.locallab.spots.at(sp).expcomp;
@ -1123,6 +1149,7 @@ private:
float stdtme;
float meanretie;
float stdretie;
float fab = 1.f;
if (params.locallab.spots.at(sp).spotMethod == "exc") {
ipf.calc_ref(sp, reservView.get(), reservView.get(), 0, 0, fw, fh, 1, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
@ -1147,6 +1174,7 @@ private:
cllocalcurve, localclutili,
lclocalcurve, locallcutili,
loclhCurve, lochhCurve, locchCurve,
lochhCurvejz, locchCurvejz,loclhCurvejz,
lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili,
@ -1158,6 +1186,12 @@ private:
lmasklclocalcurve, localmasklcutili,
lmaskloglocalcurve, localmasklogutili,
lmasklocal_curve, localmask_utili,
lmaskcielocalcurve, localmaskcieutili,
cielocalcurve, localcieutili,
cielocalcurve2, localcieutili2,
jzlocalcurve, localjzutili,
czlocalcurve, localczutili,
czjzlocalcurve, localczjzutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
@ -1170,10 +1204,12 @@ private:
locccmaslogCurve, lcmaslogutili, locllmaslogCurve, llmaslogutili, lochhmaslogCurve, lhmaslogutili,
locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili,
locccmascieCurve, lcmascieutili, locllmascieCurve, llmascieutili, lochhmascieCurve, lhmascieutili,
lochhhmas_Curve, lhhmas_utili,
loclmasCurveblwav,lmasutiliblwav,
loclmasCurvecolwav,lmasutilicolwav,
locwavCurve, locwavutili,
locwavCurvejz, locwavutilijz,
loclevwavCurve, loclevwavutili,
locconwavCurve, locconwavutili,
loccompwavCurve, loccompwavutili,
@ -1182,10 +1218,10 @@ private:
locwavCurveden, locwavdenutili,
locedgwavCurve, locedgwavutili,
loclmasCurve_wav,lmasutili_wav,
LHutili, HHutili, CHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
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,
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
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
meantme, stdtme, meanretie, stdretie, fab
);
if (sp + 1u < params.locallab.spots.size()) {
@ -1653,8 +1689,9 @@ private:
}//if no exif data or wrong
else {
double E_V = fcomp + log2 ((fnum * fnum) / fspeed / (fiso / 100.f));
E_V += params.toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV
E_V += log2(params.raw.expos); // exposure raw white point ; log2 ==> linear to EV
double kexp = 0.;
E_V += kexp * params.toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV
E_V += 0.5 * log2(params.raw.expos); // exposure raw white point ; log2 ==> linear to EV
adap = std::pow(2.0, E_V - 3.0); //cd / m2
}

View File

@ -78,6 +78,7 @@ ControlSpotPanel::ControlSpotPanel():
colorscope_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_COLORSCOPE"), 0., 100.0, 1., 30.))),
avoidrad_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_AVOIDRAD"), 0., 30.0, 0.1, 0.7))),
scopemask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCOPEMASK"), 0, 100, 1, 60))),
denoichmask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DENOIMASK"), 0., 100., 0.5, 0))),
lumask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LUMASK"), -50, 30, 1, 10, Gtk::manage(new RTImage("circle-yellow-small.png")), Gtk::manage(new RTImage("circle-gray-small.png")) ))),
hishow_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_PREVSHOW")))),
@ -330,6 +331,7 @@ ControlSpotPanel::ControlSpotPanel():
feather_->set_tooltip_text(M("TP_LOCALLAB_FEATH_TOOLTIP"));
transitgrad_->set_tooltip_text(M("TP_LOCALLAB_TRANSITGRAD_TOOLTIP"));
scopemask_->set_tooltip_text(M("TP_LOCALLAB_SCOPEMASK_TOOLTIP"));
denoichmask_->set_tooltip_text(M("TP_LOCALLAB_DENOIMASK_TOOLTIP"));
}
transit_->setAdjusterListener(this);
@ -337,6 +339,7 @@ ControlSpotPanel::ControlSpotPanel():
transitgrad_->setAdjusterListener(this);
feather_->setAdjusterListener(this);
scopemask_->setAdjusterListener(this);
denoichmask_->setAdjusterListener(this);
transitBox->pack_start(*transit_);
transitBox->pack_start(*transitweak_);
transitBox->pack_start(*transitgrad_);
@ -408,6 +411,10 @@ ControlSpotPanel::ControlSpotPanel():
avFrame->add(*avbox);
specCaseBox->pack_start(*avFrame);
if (showtooltip) {
avoidmun_->set_tooltip_text(M("TP_LOCALLAB_AVOIDMUN_TOOLTIP"));
}
blwhConn_ = blwh_->signal_toggled().connect(
sigc::mem_fun(*this, &ControlSpotPanel::blwhChanged));
@ -422,7 +429,7 @@ ControlSpotPanel::ControlSpotPanel():
if (showtooltip) {
recurs_->set_tooltip_text(M("TP_LOCALLAB_RECURS_TOOLTIP"));
avoid_->set_tooltip_text(M("TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP"));
avoid_->set_tooltip_text(M("TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP"));
}
specCaseBox->pack_start(*recurs_);
@ -481,6 +488,7 @@ ControlSpotPanel::ControlSpotPanel():
// maskBox->pack_start(*laplac_);
maskBox->pack_start(*deltae_);
maskBox->pack_start(*scopemask_);
maskBox->pack_start(*denoichmask_);
// maskBox->pack_start(*shortc_);
maskBox->pack_start(*lumask_);
// maskBox->pack_start(*savrest_);
@ -854,6 +862,7 @@ void ControlSpotPanel::load_ControlSpot_param()
laplac_->set_active(true);
deltae_->set_active(row[spots_.deltae]);
scopemask_->setValue((double)row[spots_.scopemask]);
denoichmask_->setValue(row[spots_.denoichmask]);
shortc_->set_active(row[spots_.shortc]);
lumask_->setValue((double)row[spots_.lumask]);
savrest_->set_active(row[spots_.savrest]);
@ -1516,6 +1525,14 @@ void ControlSpotPanel::adjusterChanged(Adjuster* a, double newval)
}
}
if (a == denoichmask_) {
row[spots_.denoichmask] = denoichmask_->getValue();
if (listener) {
listener->panelChanged(EvLocallabSpotdenoichmask, denoichmask_->getTextValue());
}
}
if (a == lumask_) {
row[spots_.lumask] = lumask_->getIntValue();
@ -1849,6 +1866,7 @@ void ControlSpotPanel::disableParamlistener(bool cond)
laplacConn_.block(cond);
deltaeConn_.block(cond);
scopemask_->block(cond);
denoichmask_->block(cond);
shortcConn_.block(cond);
lumask_->block(cond);
savrestConn_.block(cond);
@ -1895,6 +1913,7 @@ void ControlSpotPanel::setParamEditable(bool cond)
laplac_->set_sensitive(cond);
deltae_->set_sensitive(cond);
scopemask_->set_sensitive(cond);
denoichmask_->set_sensitive(cond);
shortc_->set_sensitive(cond);
lumask_->set_sensitive(cond);
savrest_->set_sensitive(cond);
@ -2569,6 +2588,7 @@ ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(const int index)
r->transitweak = row[spots_.transitweak];
r->transitgrad = row[spots_.transitgrad];
r->scopemask = row[spots_.scopemask];
r->denoichmask = row[spots_.denoichmask];
r->lumask = row[spots_.lumask];
r->hishow = row[spots_.hishow];
r->activ = row[spots_.activ];
@ -2712,6 +2732,7 @@ void ControlSpotPanel::addControlSpot(SpotRow* newSpot)
row[spots_.laplac] = newSpot->laplac;
row[spots_.deltae] = newSpot->deltae;
row[spots_.scopemask] = newSpot->scopemask;
row[spots_.denoichmask] = newSpot->denoichmask;
row[spots_.shortc] = newSpot->shortc;
row[spots_.lumask] = newSpot->lumask;
row[spots_.savrest] = newSpot->savrest;
@ -2779,6 +2800,7 @@ void ControlSpotPanel::setDefaults(const rtengine::procparams::ProcParams * defP
colorscope_->setDefault(defSpot.colorscope);
avoidrad_->setDefault(defSpot.avoidrad);
scopemask_->setDefault((double)defSpot.scopemask);
denoichmask_->setDefault((double)defSpot.denoichmask);
lumask_->setDefault((double)defSpot.lumask);
}
@ -2830,6 +2852,7 @@ ControlSpotPanel::ControlSpots::ControlSpots()
add(laplac);
add(deltae);
add(scopemask);
add(denoichmask);
add(shortc);
add(lumask);
add(savrest);

View File

@ -86,6 +86,7 @@ public:
bool laplac;
bool deltae;
int scopemask;
double denoichmask;
bool shortc;
int lumask;
bool savrest;
@ -321,6 +322,7 @@ private:
Gtk::TreeModelColumn<bool> laplac;
Gtk::TreeModelColumn<bool> deltae;
Gtk::TreeModelColumn<int> scopemask;
Gtk::TreeModelColumn<int> denoichmask;
Gtk::TreeModelColumn<bool> shortc;
Gtk::TreeModelColumn<int> lumask;
Gtk::TreeModelColumn<bool> savrest;
@ -402,6 +404,7 @@ private:
Adjuster* const colorscope_;
Adjuster* const avoidrad_;
Adjuster* const scopemask_;
Adjuster* const denoichmask_;
Adjuster* const lumask_;
Gtk::CheckButton* const hishow_;

View File

@ -304,7 +304,8 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnector<rtengine::Initial
{
#ifdef WIN32
int winGdiHandles = GetGuiResources( GetCurrentProcess(), GR_GDIOBJECTS);
if(winGdiHandles > 0 && winGdiHandles <= 8500) // 0 means we don't have the rights to access the function, 8500 because the limit is 10000 and we need about 1500 free handles
if(winGdiHandles > 0 && winGdiHandles <= 6500) //(old settings 8500) 0 means we don't have the rights to access the function, 8500 because the limit is 10000 and we need about 1500 free handles
//J.Desmis october 2021 I change 8500 to 6500..Why ? because whitout while increasing size GUI system crash in multieditor
#endif
{
GThreadLock lock; // Acquiring the GUI... not sure that it's necessary, but it shouldn't harm

View File

@ -150,6 +150,7 @@ Locallab::Locallab():
// Tool list widget
toollist(Gtk::manage(new LocallabToolList())),
// expcie(Gtk::manage(new Locallabcie())),
// Other widgets
resetshowButton(Gtk::manage(new Gtk::Button(M("TP_LOCALLAB_RESETSHOW"))))
{
@ -179,6 +180,7 @@ Locallab::Locallab():
addTool(toolpanel, &expshadhigh);
addTool(toolpanel, &expvibrance);
addTool(toolpanel, &explog);
addTool(toolpanel, &expcie);
addTool(toolpanel, &expexpose);
addTool(toolpanel, &expmask);
addTool(toolpanel, &expsoft);
@ -311,6 +313,7 @@ void Locallab::read(const rtengine::procparams::ProcParams* pp, const ParamsEdit
r->laplac = true; //pp->locallab.spots.at(i).laplac;
r->deltae = pp->locallab.spots.at(i).deltae;
r->scopemask = pp->locallab.spots.at(i).scopemask;
r->denoichmask = pp->locallab.spots.at(i).denoichmask;
r->shortc = pp->locallab.spots.at(i).shortc;
r->lumask = pp->locallab.spots.at(i).lumask;
r->savrest = pp->locallab.spots.at(i).savrest;
@ -492,6 +495,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r->laplac = newSpot->laplac;
r->deltae = newSpot->deltae;
r->scopemask = newSpot->scopemask;
r->denoichmask = newSpot->denoichmask;
r->shortc = newSpot->shortc;
r->lumask = newSpot->lumask;
r->savrest = newSpot->savrest;
@ -651,18 +655,19 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
toollist->addToolRow(tool->getToolName(), toolNb);
}
}
/*
// Update locallab tools mask background
if (pp->locallab.selspot < (int)maskBackRef.size()) {
const double huer = maskBackRef.at(pp->locallab.selspot).huer;
const double lumar = maskBackRef.at(pp->locallab.selspot).lumar;
const double chromar = maskBackRef.at(pp->locallab.selspot).chromar;
const float fab = maskBackRef.at(pp->locallab.selspot).fab;
for (auto tool : locallabTools) {
tool->refChanged(huer, lumar, chromar);
tool->refChanged(huer, lumar, chromar, fab);
}
}
*/
// Update Locallab Retinex tool min/max
if (pp->locallab.selspot < (int)retiMinMax.size()) {
const double cdma = retiMinMax.at(pp->locallab.selspot).cdma;
@ -801,6 +806,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r->laplac = newSpot->laplac;
r->deltae = newSpot->deltae;
r->scopemask = newSpot->scopemask;
r->denoichmask = newSpot->denoichmask;
r->shortc = newSpot->shortc;
r->lumask = newSpot->lumask;
r->savrest = newSpot->savrest;
@ -956,6 +962,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pp->locallab.spots.at(pp->locallab.selspot).laplac = r->laplac;
pp->locallab.spots.at(pp->locallab.selspot).deltae = r->deltae;
pp->locallab.spots.at(pp->locallab.selspot).scopemask = r->scopemask;
pp->locallab.spots.at(pp->locallab.selspot).denoichmask = r->denoichmask;
pp->locallab.spots.at(pp->locallab.selspot).shortc = r->shortc;
pp->locallab.spots.at(pp->locallab.selspot).lumask = r->lumask;
pp->locallab.spots.at(pp->locallab.selspot).savrest = r->savrest;
@ -1045,12 +1052,28 @@ void Locallab::minmaxChanged(const std::vector<locallabRetiMinMax> &minmax, int
}
}
void Locallab::logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg)
void Locallab::logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1)
{
// Update Locallab Log Encoding accordingly
explog.updateAutocompute(blackev, whiteev, sourceg, sourceab, targetg);
}
// Update Locallab Log Encoding and Ciecam accordingly
if(autocomput) {
explog.updateAutocompute(blackev, whiteev, sourceg, sourceab, targetg, jz1);
}
if(autocie) {
expcie.updateAutocompute(blackev, whiteev, sourceg, sourceab, targetg, jz1);
}
}
void Locallab::refChanged2(float *huerefp, float *chromarefp, float *lumarefp, float *fabrefp, int selspot)
{
const double huer = huerefp[selspot];
const double lumar = lumarefp[selspot];
const double chromar = chromarefp[selspot];
const float fab = fabrefp[selspot];
for (auto tool : locallabTools) {
tool->refChanged(huer, lumar, chromar, fab);
}
}
/*
void Locallab::refChanged(const std::vector<locallabRef> &ref, int selspot)
{
// Saving transmitted mask background data
@ -1061,13 +1084,14 @@ void Locallab::refChanged(const std::vector<locallabRef> &ref, int selspot)
const double huer = maskBackRef.at(selspot).huer;
const double lumar = maskBackRef.at(selspot).lumar;
const double chromar = maskBackRef.at(selspot).chromar;
const float fab = maskBackRef.at(selspot).fab;
for (auto tool : locallabTools) {
tool->refChanged(huer, lumar, chromar);
tool->refChanged(huer, lumar, chromar, fab);
}
}
}
*/
void Locallab::resetMaskVisibility()
{
// Indicate to spot control panel that no more mask preview is active
@ -1088,20 +1112,20 @@ Locallab::llMaskVisibility Locallab::getMaskVisibility() const
const bool prevDeltaE = expsettings->isDeltaEPrevActive();
// Get mask preview from Locallab tools
int colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, logMask, maskMask;
int colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, logMask, maskMask, cieMask;
for (auto tool : locallabTools) {
tool->getMaskView(colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, logMask, maskMask);
tool->getMaskView(colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, logMask, maskMask, cieMask);
}
// Indicate to spot control panel if one mask preview is active
const bool isMaskActive = (colorMask == 0) || (colorMaskinv == 0) || (expMask == 0) || (expMaskinv == 0) ||
(shMask == 0) || (shMaskinv == 0) || (vibMask == 0) || (softMask == 0) ||
(blMask == 0) || (tmMask == 0) || (retiMask == 0) || (sharMask == 0) ||
(lcMask == 0) || (cbMask == 0) || (logMask == 0) || (maskMask == 0);
(lcMask == 0) || (cbMask == 0) || (logMask == 0) || (maskMask == 0) || (cieMask == 0);
expsettings->setMaskPrevActive(isMaskActive);
return {prevDeltaE, colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, logMask, maskMask};
return {prevDeltaE, colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, logMask, maskMask, cieMask};
}
void Locallab::resetshowPressed()

View File

@ -116,6 +116,7 @@ private:
LocallabCBDL expcbdl;
LocallabLog explog;
LocallabMask expmask;
Locallabcie expcie;
std::vector<LocallabTool*> locallabTools;
@ -143,10 +144,11 @@ public:
void minmaxChanged(const std::vector<locallabRetiMinMax> &minmax, int selspot) override;
// Locallab Log Encoding autocompute function
void logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg) override;
void logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1) override;
// Locallab tools mask background management function
void refChanged(const std::vector<locallabRef> &ref, int selspot) override;
// void refChanged(const std::vector<locallabRef> &ref, int selspot) override;
void refChanged2(float *huerefp, float *chromarefp, float *lumarefp, float *fabrefp, int selspot)override;
// Mask visibility management functions
struct llMaskVisibility {
@ -167,6 +169,7 @@ public:
int cbMask;
int logMask;
int maskMask;
int cieMask;
};
void resetMaskVisibility();

View File

@ -266,7 +266,7 @@ bool LocallabTool::isLocallabToolAdded()
return exp->get_visible();
}
void LocallabTool::refChanged(const double huer, const double lumar, const double chromar)
void LocallabTool::refChanged(const double huer, const double lumar, const double chromar, const float fab)
{
// Hue reference normalization (between 0 and 1)
double normHuer = huer;
@ -279,14 +279,25 @@ void LocallabTool::refChanged(const double huer, const double lumar, const doubl
normHuer = h;
double normHuerjz = huer;
float hz = Color::huejz_to_huehsv2(normHuerjz);
if (hz > 1.f) {
hz -= 1.f;
}
normHuerjz = hz;
// Luma reference normalization (between 0 and 1)
const double normLumar = lumar / 100.f;
// Chroma reference normalization (between 0 and 1)
const double normChromar = chromar / 137.4f;
const double corfap = (65535.) / (double) fab;
//printf("FAB=%f corfap=%f chromar=%f chroret=%f\n", (double) fab, corfap, chromar, (double) corfap * (chromar / 195.f));
const double normChromar = LIM01(corfap * (chromar / 195.f));//195 a little more than 128 * 1.414 = 181
// Update mask curve backgrounds
updateMaskBackground(normChromar, normLumar, normHuer);
updateMaskBackground(normChromar, normLumar, normHuer, normHuerjz);
}
void LocallabTool::colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller)
@ -425,6 +436,7 @@ LocallabColor::LocallabColor():
// Color & Light specific widgets
lumFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LUMFRA")))),
reparcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))),
gamc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMC"), 0.5, 3.0, 0.05, 1.))),
lightness(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LIGHTNESS"), -100, 500, 1, 0))),
contrast(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTRAST"), -100, 100, 1, 0))),
chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))),
@ -440,7 +452,7 @@ LocallabColor::LocallabColor():
exprecov(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablec(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusablec(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothresc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))),
recothresc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 0., 2., 0.01, 1.))),
lowthresc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthresc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decayc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
@ -534,6 +546,8 @@ LocallabColor::LocallabColor():
lightness->setAdjusterListener(this);
gamc->setAdjusterListener(this);
reparcol->setAdjusterListener(this);
contrast->setAdjusterListener(this);
@ -804,6 +818,7 @@ LocallabColor::LocallabColor():
lumBox->pack_start(*lightness);
lumBox->pack_start(*contrast);
lumBox->pack_start(*chroma);
lumBox->pack_start(*gamc);
lumFrame->add(*lumBox);
pack_start(*lumFrame);
Gtk::Frame* const superFrame = Gtk::manage(new Gtk::Frame());
@ -959,7 +974,7 @@ void LocallabColor::resetMaskView()
showmaskcolMethodConninv.block(false);
}
void LocallabColor::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask)
void LocallabColor::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
colorMask = showmaskcolMethod->get_active_row_number();
colorMaskinv = showmaskcolMethodinv->get_active_row_number();
@ -969,6 +984,8 @@ void LocallabColor::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
lumFrame->set_tooltip_text(M("TP_LOCALLAB_EXPCOLOR_TOOLTIP"));
recothresc->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP"));
gamc->set_tooltip_text(M("TP_LOCALLAB_GAMCOL_TOOLTIP"));
lightness->set_tooltip_text(M("TP_LOCALLAB_LIGHTN_TOOLTIP"));
reparcol->set_tooltip_text(M("TP_LOCALLAB_REPARCOL_TOOLTIP"));
gridMethod->set_tooltip_text(M("TP_LOCALLAB_GRIDMETH_TOOLTIP"));
@ -1021,7 +1038,9 @@ void LocallabColor::updateAdviceTooltips(const bool showTooltips)
higthresc->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESC_TOOLTIP"));
} else {
lumFrame->set_tooltip_text("");
recothresc->set_tooltip_text("");
lightness->set_tooltip_text("");
gamc->set_tooltip_text("");
reparcol->set_tooltip_text("");
gridMethod->set_tooltip_text("");
strengthgrid->set_tooltip_text("");
@ -1137,6 +1156,7 @@ void LocallabColor::read(const rtengine::procparams::ProcParams* pp, const Param
complexity->set_active(spot.complexcolor);
lightness->setValue(spot.lightness);
gamc->setValue(spot.gamc);
reparcol->setValue(spot.reparcol);
contrast->setValue(spot.contrast);
chroma->setValue(spot.chroma);
@ -1312,6 +1332,7 @@ void LocallabColor::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pe
spot.complexcolor = complexity->get_active_row_number();
spot.lightness = lightness->getIntValue();
spot.gamc = gamc->getValue();
spot.reparcol = reparcol->getValue();
spot.contrast = contrast->getIntValue();
spot.chroma = chroma->getIntValue();
@ -1480,6 +1501,7 @@ void LocallabColor::setDefaults(const rtengine::procparams::ProcParams* defParam
// Set default value for adjuster, labgrid and threshold adjuster widgets
lightness->setDefault((double)defSpot.lightness);
gamc->setDefault((double)defSpot.gamc);
reparcol->setDefault(defSpot.reparcol);
contrast->setDefault((double)defSpot.contrast);
chroma->setDefault((double)defSpot.chroma);
@ -1535,6 +1557,13 @@ void LocallabColor::adjusterChanged(Adjuster* a, double newval)
}
}
if (a == gamc) {
if (listener) {
listener->panelChanged(Evlocallabgamc,
gamc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == reparcol) {
if (listener) {
listener->panelChanged(Evlocallabreparcol,
@ -1885,6 +1914,7 @@ void LocallabColor::convertParamToNormal()
// Disable all listeners
disableListener();
gamc->setValue(defSpot.gamc);
// Set hidden GUI widgets in Normal mode to default spot values
blurcolde->setValue((double)defSpot.blurcolde);
@ -2009,6 +2039,7 @@ void LocallabColor::convertParamToSimple()
softradiuscol->setValue(defSpot.softradiuscol);
strcol->setValue(defSpot.strcol);
angcol->setValue(defSpot.angcol);
gamc->setValue(defSpot.gamc);
if (defSpot.qualitycurveMethod == "none") {
qualitycurveMethod->set_active(0);
@ -2053,6 +2084,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type)
maskusablec->hide();
maskunusablec->hide();
decayc->hide();
gamc->hide();
break;
case Normal:
@ -2093,6 +2125,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type)
if (!invers->get_active()) { // Keep widget hidden when invers is toggled
expgradcol->show();
exprecov->show();
gamc->hide();
}
expcurvcol->show();
@ -2110,6 +2143,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type)
softradiuscol->show();
expgradcol->show();
exprecov->show();
gamc->show();
}
strcolab->show();
@ -2155,7 +2189,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type)
}
}
void LocallabColor::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer)
void LocallabColor::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
idle_register.add(
[this, normHuer, normLumar, normChromar]() -> bool {
@ -2406,8 +2440,10 @@ void LocallabColor::updateColorGUI1()
contcol->hide();
blurcol->hide();
reparcol->hide();
gamc->hide();
} else {
gridFrame->show();
gamc->show();
if (mode == Expert) { // Keep widget hidden in Normal and Simple mode
structcol->show();
@ -2532,13 +2568,14 @@ LocallabExposure::LocallabExposure():
norm(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))),
fatlevel(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATLEVEL"), 0.5, 2.0, 0.01, 1.))),
fatanchor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 0.1, 100.0, 0.01, 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))),
gamex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMC"), 0.5, 3.0, 0.05, 1.))),
sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))),
blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))),
exptoolexp(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPTOOL")))),
expcomp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_EXPCOMP"), MINEXP, MAXEXP, 0.01, 0.))),
black(Gtk::manage(new Adjuster(M("TP_EXPOSURE_BLACKLEVEL"), -16384, 32768, 10, 0))),
hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 20))),
hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 0))),
hlcomprthresh(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD"), 0, 100, 1, 0))),
shadex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHADEX"), 0, 100, 1, 0))),
shcompr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHADEXCOMP"), 0, 100, 1, 50))),
@ -2548,7 +2585,7 @@ LocallabExposure::LocallabExposure():
exprecove(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablee(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusablee(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothrese(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))),
recothrese(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 0., 2., 0.01, 1.))),
lowthrese(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthrese(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decaye(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
@ -2620,6 +2657,8 @@ LocallabExposure::LocallabExposure():
sensiex->setAdjusterListener(this);
gamex->setAdjusterListener(this);
structexp->setAdjusterListener(this);
blurexpde->setAdjusterListener(this);
@ -2762,6 +2801,7 @@ LocallabExposure::LocallabExposure():
// pack_start(*fatFrame);
pack_start(*expfat);
pack_start(*expcomp);
pack_start(*gamex);
pack_start(*structexp);
pack_start(*blurexpde);
ToolParamBlock* const toolBox = Gtk::manage(new ToolParamBlock());
@ -2837,7 +2877,7 @@ void LocallabExposure::resetMaskView()
showmaskexpMethodConninv.block(false);
}
void LocallabExposure::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask)
void LocallabExposure::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
expMask = showmaskexpMethod->get_active_row_number();
expMaskinv = showmaskexpMethodinv->get_active_row_number();
@ -2850,6 +2890,7 @@ void LocallabExposure::updateAdviceTooltips(const bool showTooltips)
// expMethod->set_tooltip_text(M("TP_LOCALLAB_EXPMETHOD_TOOLTIP"));
// pdeFrame->set_tooltip_text(M("TP_LOCALLAB_PDEFRAME_TOOLTIP"));
exppde->set_tooltip_text(M("TP_LOCALLAB_PDEFRAME_TOOLTIP"));
recothrese->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP"));
exprecove->set_tooltip_markup(M("TP_LOCALLAB_MASKREEXP_TOOLTIP"));
decaye->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
lowthrese->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESE_TOOLTIP"));
@ -2865,6 +2906,7 @@ void LocallabExposure::updateAdviceTooltips(const bool showTooltips)
// fatFrame->set_tooltip_text(M("TP_LOCALLAB_FATFRAME_TOOLTIP"));
expfat->set_tooltip_text(M("TP_LOCALLAB_FATFRAME_TOOLTIP"));
expcomp->set_tooltip_text(M("TP_LOCALLAB_EXPCOMP_TOOLTIP"));
gamex->set_tooltip_text(M("TP_LOCALLAB_GAMCOL_TOOLTIP"));
sensiex->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
structexp->set_tooltip_text(M("TP_LOCALLAB_STRUCT_TOOLTIP"));
expchroma->set_tooltip_text(M("TP_LOCALLAB_EXPCHROMA_TOOLTIP"));
@ -2887,6 +2929,7 @@ void LocallabExposure::updateAdviceTooltips(const bool showTooltips)
lapmaskexp->set_tooltip_text(M("TP_LOCALLAB_LAPRAD1_TOOLTIP"));
} else {
exp->set_tooltip_text("");
recothrese->set_tooltip_text("");
exppde->set_tooltip_text("");
blurexpde->set_tooltip_text("");
exprecove->set_tooltip_markup("");
@ -2917,6 +2960,7 @@ void LocallabExposure::updateAdviceTooltips(const bool showTooltips)
chromaskexp->set_tooltip_text("");
slomaskexp->set_tooltip_text("");
lapmaskexp->set_tooltip_text("");
gamex->set_tooltip_text("");
}
}
@ -3005,6 +3049,7 @@ void LocallabExposure::read(const rtengine::procparams::ProcParams* pp, const Pa
// fatlevel->setValue(1.);
// fatanchor->setValue(1.);
sensiex->setValue(spot.sensiex);
gamex->setValue(spot.gamex);
structexp->setValue(spot.structexp);
blurexpde->setValue(spot.blurexpde);
expcomp->setValue(spot.expcomp);
@ -3094,6 +3139,7 @@ void LocallabExposure::write(rtengine::procparams::ProcParams* pp, ParamsEdited*
spot.fatlevel = fatlevel->getValue();
spot.fatanchor = fatanchor->getValue();
spot.sensiex = sensiex->getIntValue();
spot.gamex = gamex->getValue();
spot.structexp = structexp->getIntValue();
spot.blurexpde = blurexpde->getIntValue();
spot.expcomp = expcomp->getValue();
@ -3146,6 +3192,7 @@ void LocallabExposure::setDefaults(const rtengine::procparams::ProcParams* defPa
fatlevel->setDefault(defSpot.fatlevel);
fatanchor->setDefault(defSpot.fatanchor);
sensiex->setDefault((double)defSpot.sensiex);
gamex->setDefault((double)defSpot.gamex);
structexp->setDefault((double)defSpot.structexp);
blurexpde->setDefault((double)defSpot.blurexpde);
expcomp->setDefault(defSpot.expcomp);
@ -3246,6 +3293,13 @@ void LocallabExposure::adjusterChanged(Adjuster* a, double newval)
}
}
if (a == gamex) {
if (listener) {
listener->panelChanged(Evlocallabgamex,
gamex->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == recothrese) {
if (listener) {
listener->panelChanged(Evlocallabrecothrese,
@ -3484,6 +3538,7 @@ void LocallabExposure::convertParamToNormal()
// Disable all listeners
disableListener();
gamex->setValue(defSpot.gamex);
// Set hidden GUI widgets in Normal mode to default spot values
structexp->setValue((double)defSpot.structexp);
@ -3516,6 +3571,7 @@ void LocallabExposure::convertParamToSimple()
softradiusexp->setValue(defSpot.softradiusexp);
enaExpMask->set_active(defSpot.enaExpMask);
enaExpMaskaft->set_active(defSpot.enaExpMaskaft);
gamex->setValue(defSpot.gamex);
// CCmaskexpshape->setCurve(defSpot.CCmaskexpcurve);
// LLmaskexpshape->setCurve(defSpot.CCmaskexpcurve);
// HHmaskexpshape->setCurve(defSpot.HHmaskexpcurve);
@ -3549,6 +3605,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type)
norm->hide();
fatlevel->hide();
fatanchor->hide();
gamex->hide();
break;
@ -3581,6 +3638,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type)
expgradexp->show();
softradiusexp->show();
exprecove->show();
gamex->hide();
blurexpde->show();
}
@ -3607,6 +3665,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type)
expgradexp->show();
softradiusexp->show();
exprecove->show();
gamex->show();
blurexpde->show();
}
@ -3628,7 +3687,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type)
}
}
void LocallabExposure::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer)
void LocallabExposure::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
idle_register.add(
[this, normHuer, normLumar, normChromar]() -> bool {
@ -3829,6 +3888,7 @@ void LocallabExposure::updateExposureGUI3()
expcomp->setLabel(M("TP_LOCALLAB_EXPCOMPINV"));
exprecove->hide();
reparexp->hide();
gamex->hide();
expfat->hide();
exppde->hide();
structexp->hide();
@ -3855,6 +3915,7 @@ void LocallabExposure::updateExposureGUI3()
} else {
expMethod->show();
expcomp->setLabel(M("TP_LOCALLAB_EXPCOMP"));
gamex->show();
expfat->show();
exppde->show();
@ -3920,7 +3981,7 @@ LocallabShadow::LocallabShadow():
exprecovs(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusables(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusables(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothress(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))),
recothress(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 0., 2., 0.01, 1.))),
lowthress(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthress(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decays(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
@ -4150,7 +4211,7 @@ void LocallabShadow::resetMaskView()
showmaskSHMethodConninv.block(false);
}
void LocallabShadow::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask)
void LocallabShadow::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
shMask = showmaskSHMethod->get_active_row_number();
shMaskinv = showmaskSHMethodinv->get_active_row_number();
@ -4164,7 +4225,7 @@ void LocallabShadow::updateAdviceTooltips(const bool showTooltips)
for (const auto multiplier : multipliersh) {
multiplier->set_tooltip_text(M("TP_LOCALLAB_MULTIPL_TOOLTIP"));
}
recothress->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP"));
gamSH->set_tooltip_text(M("TP_LOCALLAB_SHTRC_TOOLTIP"));
reparsh->set_tooltip_text(M("TP_LOCALLAB_REPARSH_TOOLTIP"));
sloSH->set_tooltip_text(M("TP_LOCALLAB_SHTRC_TOOLTIP"));
@ -4206,6 +4267,7 @@ void LocallabShadow::updateAdviceTooltips(const bool showTooltips)
for (const auto multiplier : multipliersh) {
multiplier->set_tooltip_text("");
}
recothress->set_tooltip_text("");
gamSH->set_tooltip_text("");
reparsh->set_tooltip_text("");
sloSH->set_tooltip_text("");
@ -4813,7 +4875,7 @@ void LocallabShadow::updateGUIToMode(const modeType new_type)
}
}
void LocallabShadow::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer)
void LocallabShadow::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
idle_register.add(
[this, normHuer, normLumar, normChromar]() -> bool {
@ -5006,6 +5068,7 @@ LocallabVibrance::LocallabVibrance():
// Vibrance specific widgets
saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))),
pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))),
vibgam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMC"), 0.5, 3., 0.05, 1.))),
warm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-orange-small.png"))))),
psThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_VIBRANCE_PSTHRESHOLD"), -100., 100., 0., M("TP_VIBRANCE_PSTHRESHOLD_WEIGTHING"), 0, 0., 100., 75., M("TP_VIBRANCE_PSTHRESHOLD_SATTHRESH"), 0, this, false))),
protectSkins(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PROTECTSKINS")))),
@ -5017,7 +5080,7 @@ LocallabVibrance::LocallabVibrance():
exprecovv(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablev(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusablev(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothresv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))),
recothresv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 0., 2., 0.01, 1.))),
lowthresv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthresv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decayv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
@ -5054,6 +5117,8 @@ LocallabVibrance::LocallabVibrance():
pastels->setAdjusterListener(this);
vibgam->setAdjusterListener(this);
warm->setAdjusterListener(this);
psThreshold->set_tooltip_markup(M("TP_VIBRANCE_PSTHRESHOLD_TOOLTIP"));
@ -5158,6 +5223,9 @@ LocallabVibrance::LocallabVibrance():
// Add Vibrance specific widgets to GUI
pack_start(*saturated, Gtk::PACK_SHRINK, 0);
pack_start(*pastels, Gtk::PACK_SHRINK, 0);
pack_start(*vibgam, Gtk::PACK_SHRINK, 0);
Gtk::Separator* const separatorvib = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
pack_start(*separatorvib, Gtk::PACK_SHRINK, 2);
pack_start(*warm, Gtk::PACK_SHRINK, 0);
pack_start(*psThreshold, Gtk::PACK_SHRINK, 0);
pack_start(*protectSkins, Gtk::PACK_SHRINK, 0);
@ -5217,7 +5285,7 @@ void LocallabVibrance::resetMaskView()
showmaskvibMethodConn.block(false);
}
void LocallabVibrance::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask)
void LocallabVibrance::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
vibMask = showmaskvibMethod->get_active_row_number();
}
@ -5227,6 +5295,7 @@ void LocallabVibrance::updateAdviceTooltips(const bool showTooltips)
if (showTooltips) {
exp->set_tooltip_text(M("TP_LOCALLAB_VIBRA_TOOLTIP"));
warm->set_tooltip_text(M("TP_LOCALLAB_WARM_TOOLTIP"));
recothresv->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP"));
strvib->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP"));
exprecovv->set_tooltip_markup(M("TP_LOCALLAB_MASKRESVIB_TOOLTIP"));
expmaskvib->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP"));
@ -5241,6 +5310,8 @@ void LocallabVibrance::updateAdviceTooltips(const bool showTooltips)
chromaskvib->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP"));
slomaskvib->set_tooltip_text(M("TP_LOCALLAB_SLOMASK_TOOLTIP"));
lapmaskvib->set_tooltip_text(M("TP_LOCALLAB_LAPRAD1_TOOLTIP"));
vibgam->set_tooltip_text(M("TP_LOCALLAB_GAMCOL_TOOLTIP"));
/*
saturated->set_tooltip_text(M("TP_LOCALLAB_NUL_TOOLTIP"));
pastels->set_tooltip_text(M("TP_LOCALLAB_NUL_TOOLTIP"));
@ -5268,6 +5339,7 @@ void LocallabVibrance::updateAdviceTooltips(const bool showTooltips)
exp->set_tooltip_text("");
warm->set_tooltip_text("");
strvib->set_tooltip_text("");
recothresv->set_tooltip_text("");
expmaskvib->set_tooltip_markup("");
CCmaskvibshape->setTooltip("");
LLmaskvibshape->setTooltip("");
@ -5292,6 +5364,7 @@ void LocallabVibrance::updateAdviceTooltips(const bool showTooltips)
decayv->set_tooltip_text("");
lowthresv->set_tooltip_text("");
higthresv->set_tooltip_text("");
vibgam->set_tooltip_text("");
}
}
@ -5341,6 +5414,7 @@ void LocallabVibrance::read(const rtengine::procparams::ProcParams* pp, const Pa
saturated->setValue(spot.saturated);
pastels->setValue(spot.pastels);
vibgam->setValue(spot.vibgam);
warm->setValue(spot.warm);
psThreshold->setValue<int>(spot.psthreshold);
protectSkins->set_active(spot.protectskins);
@ -5394,6 +5468,7 @@ void LocallabVibrance::write(rtengine::procparams::ProcParams* pp, ParamsEdited*
spot.saturated = saturated->getIntValue();
spot.pastels = pastels->getIntValue();
spot.vibgam = vibgam->getValue();
spot.warm = warm->getIntValue();
spot.psthreshold = psThreshold->getValue<int>();
spot.protectskins = protectSkins->get_active();
@ -5435,6 +5510,7 @@ void LocallabVibrance::setDefaults(const rtengine::procparams::ProcParams* defPa
// Set default values for adjuster and threshold adjuster widgets
saturated->setDefault((double)defSpot.saturated);
pastels->setDefault((double)defSpot.pastels);
vibgam->setDefault((double)defSpot.vibgam);
warm->setDefault((double)defSpot.warm);
psThreshold->setDefault<int>(defSpot.psthreshold);
sensiv->setDefault((double)defSpot.sensiv);
@ -5479,6 +5555,13 @@ void LocallabVibrance::adjusterChanged(Adjuster* a, double newval)
}
}
if (a == vibgam) {
if (listener) {
listener->panelChanged(Evlocallabvibgam,
vibgam->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == warm) {
if (listener) {
listener->panelChanged(Evlocallabwarm,
@ -5716,6 +5799,8 @@ void LocallabVibrance::convertParamToNormal()
// Set hidden GUI widgets in Normal mode to default spot values
saturated->setValue((double)defSpot.saturated);
vibgam->setValue(defSpot.vibgam);
psThreshold->setValue<int>(defSpot.psthreshold);
protectSkins->set_active(defSpot.protectskins);
avoidColorShift->set_active(defSpot.avoidcolorshift);
@ -5771,6 +5856,7 @@ void LocallabVibrance::updateGUIToMode(const modeType new_type)
// Expert and Normal mode widgets are hidden in Simple mode
saturated->hide();
pastels->setLabel(M("TP_LOCALLAB_PASTELS2"));
vibgam->hide();
psThreshold->hide();
protectSkins->hide();
avoidColorShift->hide();
@ -5788,6 +5874,7 @@ void LocallabVibrance::updateGUIToMode(const modeType new_type)
case Normal:
// Expert mode widgets are hidden in Normal mode
saturated->hide();
vibgam->hide();
pastels->setLabel(M("TP_LOCALLAB_PASTELS2"));
psThreshold->hide();
protectSkins->hide();
@ -5818,6 +5905,7 @@ void LocallabVibrance::updateGUIToMode(const modeType new_type)
case Expert:
// Show widgets hidden in Normal and Simple mode
saturated->show();
vibgam->show();
pastels->setLabel(M("TP_VIBRANCE_PASTELS"));
psThreshold->show();
protectSkins->show();
@ -5844,7 +5932,7 @@ void LocallabVibrance::updateGUIToMode(const modeType new_type)
}
}
void LocallabVibrance::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer)
void LocallabVibrance::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
idle_register.add(
[this, normHuer, normLumar, normChromar]() -> bool {
@ -6020,7 +6108,7 @@ void LocallabSoft::resetMaskView()
showmasksoftMethodConn.block(false);
}
void LocallabSoft::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask)
void LocallabSoft::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
softMask = showmasksoftMethod->get_active_row_number();
}
@ -6402,6 +6490,7 @@ LocallabBlur::LocallabBlur():
noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))),//unused here, but used for normalize_mean_dt
noiselumdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMDETAIL"), 0., 100., 0.01, 50.))),
noiselequal(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELEQUAL"), -2, 10, 1, 7, Gtk::manage(new RTImage("circle-white-small.png")), Gtk::manage(new RTImage("circle-black-small.png"))))),
noisegam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISEGAM"), 1.0, 5., 0.1, 1.))),
LocalcurveEditorwavhue(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_WAVELET_DENOISEHUE"))),
wavhue(static_cast<FlatCurveEditor*>(LocalcurveEditorwavhue->addCurve(CT_Flat, "", nullptr, false, true))),
noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), MINCHRO, MAXCHRO, 0.01, 0.))),
@ -6571,6 +6660,8 @@ LocallabBlur::LocallabBlur():
noiselequal->setAdjusterListener(this);
noisegam->setAdjusterListener(this);
LocalcurveEditorwavhue->setCurveListener(this);
wavhue->setIdentityValue(0.);
@ -6748,6 +6839,7 @@ LocallabBlur::LocallabBlur():
// wavBox->pack_start(*noiselumc);//unused here, but used for normalize_mean_dt
wavBox->pack_start(*noiselumdetail);
wavBox->pack_start(*noiselequal);
wavBox->pack_start(*noisegam);
wavBox->pack_start(*LocalcurveEditorwavhue, Gtk::PACK_SHRINK, 4);
ToolParamBlock* const wavBox1 = Gtk::manage(new ToolParamBlock());
wavBox1->pack_start(*maskusable, Gtk::PACK_SHRINK, 0);
@ -6851,7 +6943,7 @@ void LocallabBlur::resetMaskView()
showmaskblMethodConn.block(false);
}
void LocallabBlur::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask)
void LocallabBlur::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
blMask = showmaskblMethod->get_active_row_number();
}
@ -6884,6 +6976,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
invmaskd->set_tooltip_text(M("TP_LOCALLAB_MASKDEINV_TOOLTIP"));
LocalcurveEditorwavden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
noiselequal->set_tooltip_text(M("TP_LOCALLAB_DENOIEQUAL_TOOLTIP"));
noisegam->set_tooltip_text(M("TP_LOCALLAB_NOISEGAM_TOOLTIP"));
noiselumdetail->set_tooltip_text(M("TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP"));
noisechrof->set_tooltip_text(M("TP_LOCALLAB_DENOICHROF_TOOLTIP"));
noisechroc->set_tooltip_text(M("TP_LOCALLAB_DENOICHROC_TOOLTIP"));
@ -6950,6 +7043,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
invmaskd->set_tooltip_text("");
LocalcurveEditorwavden->setTooltip("");
noiselequal->set_tooltip_text("");
noisegam->set_tooltip_text("");
noiselumdetail->set_tooltip_text("");
noisechrof->set_tooltip_text("");
noisechroc->set_tooltip_text("");
@ -7007,6 +7101,7 @@ void LocallabBlur::neutral_pressed ()
noiselumf0->setValue(defSpot.noiselumf0);
noiselumdetail->setValue(defSpot.noiselumdetail);
noiselequal->setValue(defSpot.noiselequal);
noisegam->setValue(defSpot.noisegam);
noisechrof->setValue(defSpot.noisechrof);
noisechroc->setValue(defSpot.noisechroc);
noisechrodetail->setValue(defSpot.noisechrodetail);
@ -7189,6 +7284,7 @@ void LocallabBlur::read(const rtengine::procparams::ProcParams* pp, const Params
lnoiselow->setValue(spot.lnoiselow);
levelthrlow->setValue(spot.levelthrlow);
noiselequal->setValue((double)spot.noiselequal);
noisegam->setValue((double)spot.noisegam);
noisechrof->setValue(spot.noisechrof);
noisechroc->setValue(spot.noisechroc);
noisechrodetail->setValue(spot.noisechrodetail);
@ -7336,6 +7432,7 @@ void LocallabBlur::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped
spot.lnoiselow = lnoiselow->getValue();
spot.levelthrlow = levelthrlow->getValue();
spot.noiselequal = noiselequal->getIntValue();
spot.noisegam = noisegam->getValue();
spot.noisechrof = noisechrof->getValue();
spot.noisechroc = noisechroc->getValue();
spot.noisechrodetail = noisechrodetail->getValue();
@ -7418,6 +7515,7 @@ void LocallabBlur::setDefaults(const rtengine::procparams::ProcParams* defParams
lnoiselow->setDefault(defSpot.lnoiselow);
levelthrlow->setDefault(defSpot.levelthrlow);
noiselequal->setDefault((double)defSpot.noiselequal);
noisegam->setDefault(defSpot.noisegam);
noisechrof->setDefault(defSpot.noisechrof);
noisechroc->setDefault(defSpot.noisechroc);
noisechrodetail->setDefault(defSpot.noisechrodetail);
@ -7642,6 +7740,13 @@ void LocallabBlur::adjusterChanged(Adjuster* a, double newval)
}
}
if (a == noisegam) {
if (listener) {
listener->panelChanged(Evlocallabnoisegam,
noisegam->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == levelthr) {
if (listener) {
listener->panelChanged(Evlocallablevelthr,
@ -7926,6 +8031,7 @@ void LocallabBlur::convertParamToNormal()
csThresholdblur->setValue<int>(defSpot.csthresholdblur);
lnoiselow->setValue(defSpot.lnoiselow);
nlrad->setValue(defSpot.nlrad);
noisegam->setValue(defSpot.noisegam);
// Enable all listeners
enableListener();
@ -7981,6 +8087,7 @@ void LocallabBlur::convertParamToSimple()
nlpat->setValue(defSpot.nlpat);
nlrad->setValue(defSpot.nlrad);
nlgam->setValue(defSpot.nlgam);
noisegam->setValue(defSpot.noisegam);
// Enable all listeners
enableListener();
@ -8012,6 +8119,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type)
nlrad->hide();
nlgam->hide();
scalegr->hide();
noisegam->hide();
break;
case Normal:
@ -8037,6 +8145,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type)
nlrad->hide();
nlgam->show();
scalegr->show();
noisegam->hide();
if (blMethod->get_active_row_number() == 2) {
expdenoise2->show();
@ -8116,6 +8225,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type)
nlpat->show();
nlrad->show();
nlgam->show();
noisegam->show();
if(lnoiselow->getValue()!= 1.) {
if (showmaskblMethodtyp->get_active_row_number() == 0) {
@ -8152,7 +8262,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type)
}
}
void LocallabBlur::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer)
void LocallabBlur::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
idle_register.add(
[this, normHuer, normLumar, normChromar]() -> bool {

View File

@ -118,7 +118,7 @@ public:
bool isLocallabToolAdded();
// Mask background management function
void refChanged(const double huer, const double lumar, const double chromar);
void refChanged(const double huer, const double lumar, const double chromar, const float fab);
// Mask preview functions
virtual bool isMaskViewActive()
@ -126,7 +126,7 @@ public:
return false;
};
virtual void resetMaskView() {};
virtual void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) {};
virtual void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) {};
// Advice tooltips management function
virtual void updateAdviceTooltips(const bool showTooltips) {};
@ -151,7 +151,7 @@ public:
protected:
// To be implemented
virtual void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) {}; // Only necessary when using mask
virtual void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) {}; // Only necessary when using mask
private:
// Remove button event function
@ -180,6 +180,7 @@ private:
// Color & Light specific widgets
Gtk::Frame* const lumFrame;
Adjuster* const reparcol;
Adjuster* const gamc;
Adjuster* const lightness;
Adjuster* const contrast;
Adjuster* const chroma;
@ -277,7 +278,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -302,7 +303,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void curvactivChanged();
void gridMethodChanged();
@ -347,6 +348,7 @@ private:
Gtk::CheckButton* const norm;
Adjuster* const fatlevel;
Adjuster* const fatanchor;
Adjuster* const gamex;
Adjuster* const sensiex;
Adjuster* const structexp;
Adjuster* const blurexpde;
@ -402,7 +404,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -421,7 +423,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void expMethodChanged();
void exnoiseMethodChanged();
@ -438,7 +440,7 @@ private:
};
/* ==== LocallabShadow ==== */
/* ==== LocallabjShadow ==== */
class LocallabShadow:
public Gtk::Box,
public LocallabTool
@ -498,7 +500,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -517,7 +519,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void shMethodChanged();
void inversshChanged();
@ -540,6 +542,7 @@ private:
// Vibrance specific widgets
Adjuster* const saturated;
Adjuster* const pastels;
Adjuster* const vibgam;
Adjuster* const warm;
ThresholdAdjuster* const psThreshold;
Gtk::CheckButton* const protectSkins;
@ -584,7 +587,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -610,7 +613,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void protectskins_toggled();
void avoidcolorshift_toggled();
@ -642,7 +645,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -724,6 +727,7 @@ private:
Adjuster* const noiselumc;
Adjuster* const noiselumdetail;
Adjuster* const noiselequal;
Adjuster* const noisegam;
CurveEditorGroup* const LocalcurveEditorwavhue;
FlatCurveEditor* wavhue;
Adjuster* const noisechrof;
@ -787,7 +791,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
void neutral_pressed();
@ -813,7 +817,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void blMethodChanged();
void fftwblChanged();
@ -884,7 +888,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -903,7 +907,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void equiltmChanged();
void showmasktmMethodChanged();
@ -983,7 +987,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -1002,7 +1006,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void loglinChanged();
void retinexMethodChanged();
@ -1026,6 +1030,7 @@ class LocallabSharp:
private:
Adjuster* const sharcontrast;
Adjuster* const sharblur;
Adjuster* const shargam;
Adjuster* const sharamount;
Adjuster* const shardamping;
Adjuster* const shariter;
@ -1042,7 +1047,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -1089,6 +1094,9 @@ private:
Adjuster* const residshathr;
Adjuster* const residhi;
Adjuster* const residhithr;
Adjuster* const gamlc;
Adjuster* const residgam;
Adjuster* const residslop;
Adjuster* const sensilc;
Adjuster* const reparw;
Gtk::Frame* const clariFrame;
@ -1173,7 +1181,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -1198,7 +1206,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void localcontMethodChanged();
void origlcChanged();
@ -1272,7 +1280,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -1291,7 +1299,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void showmaskcbMethodChanged();
void enacbMaskChanged();
@ -1375,7 +1383,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
void surroundChanged();
@ -1390,7 +1398,7 @@ public:
void adjusterChanged(Adjuster* a, double newval) override;
void curveChanged(CurveEditor* ce) override;
void updateAutocompute(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg);
void updateAutocompute(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const float jz1);
private:
void enabledChanged() override;
@ -1405,7 +1413,7 @@ private:
void ciecamChanged();
void showmaskLMethodChanged();
void enaLMaskChanged();
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void updateLogGUI();
void updateLogGUI2();
@ -1462,7 +1470,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask) override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@ -1488,7 +1496,7 @@ private:
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void showmask_MethodChanged();
void enamaskChanged();
@ -1498,4 +1506,221 @@ private:
void updateMaskGUI();
};
/* ==== Locallabcie ==== */
class Locallabcie:
public Gtk::Box,
public ThresholdAdjusterListener,
public LocallabTool
{
private:
Adjuster* const sensicie;
Adjuster* const reparcie;
Gtk::CheckButton* const jabcie;
MyComboBoxText* const modecam;
MyComboBoxText* const modecie;
Gtk::Frame* const jzFrame;
Gtk::Box* const modeHBoxcam;
Gtk::Box* const modeHBoxcie;
Gtk::Frame* const cieFrame;
Gtk::CheckButton* const Autograycie;
Adjuster* const sourceGraycie;
Adjuster* const sourceabscie;
MyComboBoxText* const sursourcie;
Gtk::Box* const surHBoxcie;
Gtk::Frame* const cie1Frame;
Gtk::Frame* const cie1lightFrame;
Gtk::Frame* const cie1contFrame;
Gtk::Frame* const cie1colorFrame;
Gtk::Frame* const czlightFrame;
// Gtk::Frame* const czcontFrame;
Gtk::Frame* const czcolorFrame;
Gtk::Frame* const PQFrame;
Gtk::CheckButton* const qtoj;
Adjuster* const lightlcie;
Adjuster* const lightjzcie;
Adjuster* const contjzcie;
Adjuster* const adapjzcie;
Adjuster* const jz100;
Adjuster* const pqremap;
Adjuster* const pqremapcam16;
Gtk::CheckButton* const forcejz;
MyExpander* const expjz;
Gtk::Frame* const jzshFrame;
Adjuster* const hljzcie;
Adjuster* const hlthjzcie;
Adjuster* const shjzcie;
Adjuster* const shthjzcie;
Adjuster* const radjzcie;
MyExpander* const expwavjz;
Gtk::Frame* const contFramejz;
Adjuster* const sigmalcjz;
CurveEditorGroup* const LocalcurveEditorwavjz;
FlatCurveEditor* const wavshapejz;
ThresholdAdjuster* const csThresholdjz;
Gtk::Frame* const clariFramejz;
Adjuster* const clarilresjz;
Adjuster* const claricresjz;
Adjuster* const clarisoftjz;
MyExpander* const expcam16;
Adjuster* const lightqcie;
Adjuster* const contlcie;
Adjuster* const contqcie;
Adjuster* const contthrescie;
Gtk::Frame* const logjzFrame;
Gtk::CheckButton* const logjz;
Adjuster* const blackEvjz;
Adjuster* const whiteEvjz;
Adjuster* const targetjz;
Gtk::Frame* const bevwevFrame;
Gtk::CheckButton* const forcebw;
Gtk::Frame* const sigmoidFrame;
Adjuster* const sigmoidldacie;
Adjuster* const sigmoidthcie;
Adjuster* const sigmoidblcie;
Gtk::CheckButton* const sigmoidqjcie;
Gtk::Frame* const sigmoidjzFrame;
Gtk::CheckButton* const sigjz;
Adjuster* const sigmoidldajzcie;
Adjuster* const sigmoidthjzcie;
Adjuster* const sigmoidbljzcie;
Adjuster* const colorflcie;
Adjuster* const saturlcie;
Adjuster* const rstprotectcie;
Adjuster* const chromlcie;
Adjuster* const huecie;
CurveEditorGroup* const cieCurveEditorG;
MyComboBoxText* const toneMethodcie;
DiagonalCurveEditor* const shapecie;
CurveEditorGroup* const cieCurveEditorG2;
MyComboBoxText* const toneMethodcie2;
DiagonalCurveEditor* const shapecie2;
Adjuster* const chromjzcie;
Adjuster* const saturjzcie;
Adjuster* const huejzcie;
CurveEditorGroup* const jz1CurveEditorG;
DiagonalCurveEditor* const shapejz;
DiagonalCurveEditor* const shapecz;
Gtk::Frame* const HFramejz;
Gtk::Frame* const JzHFramejz;
CurveEditorGroup* const jz2CurveEditorG;
CurveEditorGroup* const jz3CurveEditorG;
DiagonalCurveEditor* const shapeczjz;
FlatCurveEditor* const HHshapejz;
FlatCurveEditor* const CHshapejz;
FlatCurveEditor* const LHshapejz;
Adjuster* const softjzcie;
Adjuster* const thrhjzcie;
Gtk::CheckButton* const chjzcie;
Adjuster* const strsoftjzcie;
/*
Gtk::Frame* const ciezFrame;
Adjuster* const lightlzcam;
Adjuster* const lightqzcam;
Adjuster* const contlzcam;
Adjuster* const contqzcam;
Adjuster* const contthreszcam;
Adjuster* const colorflzcam;
Adjuster* const saturzcam;
Adjuster* const chromzcam;
*/
MyExpander* const expLcie;
Gtk::Frame* const cie2Frame;
Adjuster* const targetGraycie;
Adjuster* const targabscie;
Adjuster* const detailcie;
Adjuster* const catadcie;
MyComboBoxText* const surroundcie;
Gtk::Box* const surrHBoxcie;
MyExpander* const exprecovcie;
Gtk::Label* const maskusablecie;
Gtk::Label* const maskunusablecie;
Adjuster* const recothrescie;
Adjuster* const lowthrescie;
Adjuster* const higthrescie;
Adjuster* const decaycie;
MyExpander* const expmaskcie;
MyComboBoxText* const showmaskcieMethod;
Gtk::CheckButton* const enacieMask;
CurveEditorGroup* const maskcieCurveEditorG;
FlatCurveEditor* const CCmaskcieshape;
FlatCurveEditor* const LLmaskcieshape;
FlatCurveEditor* const HHmaskcieshape;
Adjuster* const blendmaskcie;
Adjuster* const radmaskcie;
Adjuster* const lapmaskcie;
Adjuster* const chromaskcie;
Adjuster* const gammaskcie;
Adjuster* const slomaskcie;
CurveEditorGroup* const mask2cieCurveEditorG;
DiagonalCurveEditor* const Lmaskcieshape;
sigc::connection AutograycieConn, forcejzConn, forcebwConn, qtojConn, showmaskcieMethodConn, enacieMaskConn, jabcieConn, sursourcieconn, surroundcieconn, modecieconn, modecamconn, sigmoidqjcieconn, logjzconn, sigjzconn, chjzcieconn, toneMethodcieConn, toneMethodcieConn2;
public:
Locallabcie();
~Locallabcie();
bool isMaskViewActive() override;
void resetMaskView() override;
void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
void setDefaultExpanderVisibility() override;
void disableListener() override;
void enableListener() override;
void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override;
void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr) override;
void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override;
void adjusterChanged(Adjuster* a, double newval) override;
void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) override {}; // Not used
// void adjusterChanged3(ThresholdAdjuster* a, double newBottom, double newTop) override {};
void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) override {}; // Not used
void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) override {}; // Not used
void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) override {}; // Not used
void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) override;
void sursourcieChanged();
void surroundcieChanged();
void modecieChanged();
void modecamChanged();
void curveChanged(CurveEditor* ce) override;
void toneMethodcieChanged();
void toneMethodcie2Changed();
void updateAutocompute(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const float jz1);
private:
void enabledChanged() override;
void convertParamToNormal() override;
void convertParamToSimple() override;
void updateGUIToMode(const modeType new_type) override;
void complexityModeChanged();
void AutograycieChanged();
void forcejzChanged();
void forcebwChanged();
void qtojChanged();
void jabcieChanged();
void sigmoidqjcieChanged();
void logjzChanged();
void sigjzChanged();
void chjzcieChanged();
void updatecieGUI();
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;
void showmaskcieMethodChanged();
void enacieMaskChanged();
};
#endif

File diff suppressed because it is too large Load Diff

View File

@ -606,6 +606,7 @@ void Options::setDefaults()
rtSettings.gamutICC = true;
rtSettings.gamutLch = true;
rtSettings.amchroma = 40;//between 20 and 140 low values increase effect..and also artifacts, high values reduces
rtSettings.amchromajz = 40;//between 5 and 100 low values increase effect..and also artifacts, high values reduces
rtSettings.level0_cbdl = 0;
rtSettings.level123_cbdl = 30;
//locallab
@ -1748,6 +1749,10 @@ void Options::readFromFile(Glib::ustring fname)
rtSettings.amchroma = keyFile.get_integer("Color Management", "Amountchroma");
}
if (keyFile.has_key("Color Management", "JzAmountchroma")) {
rtSettings.amchromajz = keyFile.get_integer("Color Management", "JzAmountchroma");
}
if (keyFile.has_key("Color Management", "ClutsDirectory")) {
clutsDir = keyFile.get_string("Color Management", "ClutsDirectory");
}
@ -2376,6 +2381,7 @@ void Options::saveToFile(Glib::ustring fname)
keyFile.set_boolean("Color Management", "GamutLch", rtSettings.gamutLch);
keyFile.set_integer("Color Management", "ProtectRed", rtSettings.protectred);
keyFile.set_integer("Color Management", "Amountchroma", rtSettings.amchroma);
keyFile.set_integer("Color Management", "JzAmountchroma", rtSettings.amchromajz);
keyFile.set_double("Color Management", "ProtectRedH", rtSettings.protectredh);
keyFile.set_integer("Color Management", "CRI", rtSettings.CRI_color);
keyFile.set_integer("Color Management", "DenoiseLabgamma", rtSettings.denoiselabgamma);

View File

@ -1118,12 +1118,15 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).shortc = locallab.spots.at(j).shortc && pSpot.shortc == otherSpot.shortc;
locallab.spots.at(j).savrest = locallab.spots.at(j).savrest && pSpot.savrest == otherSpot.savrest;
locallab.spots.at(j).scopemask = locallab.spots.at(j).scopemask && pSpot.scopemask == otherSpot.scopemask;
locallab.spots.at(j).denoichmask = locallab.spots.at(j).denoichmask && pSpot.denoichmask == otherSpot.denoichmask;
locallab.spots.at(j).lumask = locallab.spots.at(j).lumask && pSpot.lumask == otherSpot.lumask;
// Color & Light
locallab.spots.at(j).visicolor = locallab.spots.at(j).visicolor && pSpot.visicolor == otherSpot.visicolor;
locallab.spots.at(j).expcolor = locallab.spots.at(j).expcolor && pSpot.expcolor == otherSpot.expcolor;
locallab.spots.at(j).complexcolor = locallab.spots.at(j).complexcolor && pSpot.complexcolor == otherSpot.complexcolor;
locallab.spots.at(j).curvactiv = locallab.spots.at(j).curvactiv && pSpot.curvactiv == otherSpot.curvactiv;
locallab.spots.at(j).reparcol = locallab.spots.at(j).reparcol && pSpot.reparcol == otherSpot.reparcol;
locallab.spots.at(j).gamc = locallab.spots.at(j).gamc && pSpot.gamc == otherSpot.gamc;
locallab.spots.at(j).lightness = locallab.spots.at(j).lightness && pSpot.lightness == otherSpot.lightness;
locallab.spots.at(j).contrast = locallab.spots.at(j).contrast && pSpot.contrast == otherSpot.contrast;
locallab.spots.at(j).chroma = locallab.spots.at(j).chroma && pSpot.chroma == otherSpot.chroma;
@ -1200,6 +1203,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).expchroma = locallab.spots.at(j).expchroma && pSpot.expchroma == otherSpot.expchroma;
locallab.spots.at(j).sensiex = locallab.spots.at(j).sensiex && pSpot.sensiex == otherSpot.sensiex;
locallab.spots.at(j).structexp = locallab.spots.at(j).structexp && pSpot.structexp == otherSpot.structexp;
locallab.spots.at(j).gamex = locallab.spots.at(j).gamex && pSpot.gamex == otherSpot.gamex;
locallab.spots.at(j).blurexpde = locallab.spots.at(j).blurexpde && pSpot.blurexpde == otherSpot.blurexpde;
locallab.spots.at(j).strexp = locallab.spots.at(j).strexp && pSpot.strexp == otherSpot.strexp;
locallab.spots.at(j).angexp = locallab.spots.at(j).angexp && pSpot.angexp == otherSpot.angexp;
@ -1283,6 +1287,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).complexvibrance = locallab.spots.at(j).complexvibrance && pSpot.complexvibrance == otherSpot.complexvibrance;
locallab.spots.at(j).saturated = locallab.spots.at(j).saturated && pSpot.saturated == otherSpot.saturated;
locallab.spots.at(j).pastels = locallab.spots.at(j).pastels && pSpot.pastels == otherSpot.pastels;
locallab.spots.at(j).vibgam = locallab.spots.at(j).vibgam && pSpot.vibgam == otherSpot.vibgam;
locallab.spots.at(j).warm = locallab.spots.at(j).warm && pSpot.warm == otherSpot.warm;
locallab.spots.at(j).psthreshold = locallab.spots.at(j).psthreshold && pSpot.psthreshold == otherSpot.psthreshold;
locallab.spots.at(j).protectskins = locallab.spots.at(j).protectskins && pSpot.protectskins == otherSpot.protectskins;
@ -1359,6 +1364,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).noiselumc = locallab.spots.at(j).noiselumc && pSpot.noiselumc == otherSpot.noiselumc;
locallab.spots.at(j).noiselumdetail = locallab.spots.at(j).noiselumdetail && pSpot.noiselumdetail == otherSpot.noiselumdetail;
locallab.spots.at(j).noiselequal = locallab.spots.at(j).noiselequal && pSpot.noiselequal == otherSpot.noiselequal;
locallab.spots.at(j).noisegam = locallab.spots.at(j).noisegam && pSpot.noisegam == otherSpot.noisegam;
locallab.spots.at(j).noisechrof = locallab.spots.at(j).noisechrof && pSpot.noisechrof == otherSpot.noisechrof;
locallab.spots.at(j).noisechroc = locallab.spots.at(j).noisechroc && pSpot.noisechroc == otherSpot.noisechroc;
locallab.spots.at(j).noisechrodetail = locallab.spots.at(j).noisechrodetail && pSpot.noisechrodetail == otherSpot.noisechrodetail;
@ -1477,6 +1483,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).shardamping = locallab.spots.at(j).shardamping && pSpot.shardamping == otherSpot.shardamping;
locallab.spots.at(j).shariter = locallab.spots.at(j).shariter && pSpot.shariter == otherSpot.shariter;
locallab.spots.at(j).sharblur = locallab.spots.at(j).sharblur && pSpot.sharblur == otherSpot.sharblur;
locallab.spots.at(j).shargam = locallab.spots.at(j).shargam && pSpot.shargam == otherSpot.shargam;
locallab.spots.at(j).sensisha = locallab.spots.at(j).sensisha && pSpot.sensisha == otherSpot.sensisha;
locallab.spots.at(j).inverssha = locallab.spots.at(j).inverssha && pSpot.inverssha == otherSpot.inverssha;
// Local Contrast
@ -1494,6 +1501,9 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).residshathr = locallab.spots.at(j).residshathr && pSpot.residshathr == otherSpot.residshathr;
locallab.spots.at(j).residhi = locallab.spots.at(j).residhi && pSpot.residhi == otherSpot.residhi;
locallab.spots.at(j).residhithr = locallab.spots.at(j).residhithr && pSpot.residhithr == otherSpot.residhithr;
locallab.spots.at(j).gamlc = locallab.spots.at(j).gamlc && pSpot.gamlc == otherSpot.gamlc;
locallab.spots.at(j).residgam = locallab.spots.at(j).residgam && pSpot.residgam == otherSpot.residgam;
locallab.spots.at(j).residslop = locallab.spots.at(j).residslop && pSpot.residslop == otherSpot.residslop;
locallab.spots.at(j).residblur = locallab.spots.at(j).residblur && pSpot.residblur == otherSpot.residblur;
locallab.spots.at(j).levelblur = locallab.spots.at(j).levelblur && pSpot.levelblur == otherSpot.levelblur;
locallab.spots.at(j).sigmabl = locallab.spots.at(j).sigmabl && pSpot.sigmabl == otherSpot.sigmabl;
@ -1662,6 +1672,111 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).Lmask_curve = locallab.spots.at(j).Lmask_curve && pSpot.Lmask_curve == otherSpot.Lmask_curve;
locallab.spots.at(j).LLmask_curvewav = locallab.spots.at(j).LLmask_curvewav && pSpot.LLmask_curvewav == otherSpot.LLmask_curvewav;
locallab.spots.at(j).csthresholdmask = locallab.spots.at(j).csthresholdmask && pSpot.csthresholdmask == otherSpot.csthresholdmask;
//ciecam
locallab.spots.at(j).visicie = locallab.spots.at(j).visicie && pSpot.visicie == otherSpot.visicie;
locallab.spots.at(j).expcie = locallab.spots.at(j).expcie && pSpot.expcie == otherSpot.expcie;
locallab.spots.at(j).complexcie = locallab.spots.at(j).complexcie && pSpot.complexcie == otherSpot.complexcie;
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).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).sigmoidqjcie = locallab.spots.at(j).sigmoidqjcie && pSpot.sigmoidqjcie == otherSpot.sigmoidqjcie;
locallab.spots.at(j).logjz = locallab.spots.at(j).logjz && pSpot.logjz == otherSpot.logjz;
locallab.spots.at(j).sigjz = locallab.spots.at(j).sigjz && pSpot.sigjz == otherSpot.sigjz;
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).modecie = locallab.spots.at(j).modecie && pSpot.modecie == otherSpot.modecie;
locallab.spots.at(j).saturlcie = locallab.spots.at(j).saturlcie && pSpot.saturlcie == otherSpot.saturlcie;
locallab.spots.at(j).rstprotectcie = locallab.spots.at(j).rstprotectcie && pSpot.rstprotectcie == otherSpot.rstprotectcie;
locallab.spots.at(j).chromlcie = locallab.spots.at(j).chromlcie && pSpot.chromlcie == otherSpot.chromlcie;
locallab.spots.at(j).huecie = locallab.spots.at(j).huecie && pSpot.huecie == otherSpot.huecie;
locallab.spots.at(j).toneMethodcie = locallab.spots.at(j).toneMethodcie && pSpot.toneMethodcie == otherSpot.toneMethodcie;
locallab.spots.at(j).ciecurve = locallab.spots.at(j).ciecurve && pSpot.ciecurve == otherSpot.ciecurve;
locallab.spots.at(j).toneMethodcie2 = locallab.spots.at(j).toneMethodcie2 && pSpot.toneMethodcie2 == otherSpot.toneMethodcie2;
locallab.spots.at(j).ciecurve2 = locallab.spots.at(j).ciecurve2 && pSpot.ciecurve2 == otherSpot.ciecurve2;
locallab.spots.at(j).chromjzcie = locallab.spots.at(j).chromjzcie && pSpot.chromjzcie == otherSpot.chromjzcie;
locallab.spots.at(j).saturjzcie = locallab.spots.at(j).saturjzcie && pSpot.saturjzcie == otherSpot.saturjzcie;
locallab.spots.at(j).huejzcie = locallab.spots.at(j).huejzcie && pSpot.huejzcie == otherSpot.huejzcie;
locallab.spots.at(j).softjzcie = locallab.spots.at(j).softjzcie && pSpot.softjzcie == otherSpot.softjzcie;
locallab.spots.at(j).strsoftjzcie = locallab.spots.at(j).strsoftjzcie && pSpot.strsoftjzcie == otherSpot.strsoftjzcie;
locallab.spots.at(j).thrhjzcie = locallab.spots.at(j).thrhjzcie && pSpot.thrhjzcie == otherSpot.thrhjzcie;
locallab.spots.at(j).jzcurve = locallab.spots.at(j).jzcurve && pSpot.jzcurve == otherSpot.jzcurve;
locallab.spots.at(j).czcurve = locallab.spots.at(j).czcurve && pSpot.czcurve == otherSpot.czcurve;
locallab.spots.at(j).czjzcurve = locallab.spots.at(j).czjzcurve && pSpot.czjzcurve == otherSpot.czjzcurve;
locallab.spots.at(j).HHcurvejz = locallab.spots.at(j).HHcurvejz && pSpot.HHcurvejz == otherSpot.HHcurvejz;
locallab.spots.at(j).CHcurvejz = locallab.spots.at(j).CHcurvejz && pSpot.CHcurvejz == otherSpot.CHcurvejz;
locallab.spots.at(j).LHcurvejz = locallab.spots.at(j).LHcurvejz && pSpot.LHcurvejz == otherSpot.LHcurvejz;
locallab.spots.at(j).lightlcie = locallab.spots.at(j).lightlcie && pSpot.lightlcie == otherSpot.lightlcie;
locallab.spots.at(j).lightjzcie = locallab.spots.at(j).lightjzcie && pSpot.lightjzcie == otherSpot.lightjzcie;
locallab.spots.at(j).lightqcie = locallab.spots.at(j).lightqcie && pSpot.lightqcie == otherSpot.lightqcie;
locallab.spots.at(j).contlcie = locallab.spots.at(j).contlcie && pSpot.contlcie == otherSpot.contlcie;
locallab.spots.at(j).contjzcie = locallab.spots.at(j).contjzcie && pSpot.contjzcie == otherSpot.contjzcie;
locallab.spots.at(j).adapjzcie = locallab.spots.at(j).adapjzcie && pSpot.adapjzcie == otherSpot.adapjzcie;
locallab.spots.at(j).jz100 = locallab.spots.at(j).jz100 && pSpot.jz100 == otherSpot.jz100;
locallab.spots.at(j).pqremap = locallab.spots.at(j).pqremap && pSpot.pqremap == otherSpot.pqremap;
locallab.spots.at(j).pqremapcam16 = locallab.spots.at(j).pqremapcam16 && pSpot.pqremapcam16 == otherSpot.pqremapcam16;
locallab.spots.at(j).hljzcie = locallab.spots.at(j).hljzcie && pSpot.hljzcie == otherSpot.hljzcie;
locallab.spots.at(j).hlthjzcie = locallab.spots.at(j).hlthjzcie && pSpot.hlthjzcie == otherSpot.hlthjzcie;
locallab.spots.at(j).shjzcie = locallab.spots.at(j).shjzcie && pSpot.shjzcie == otherSpot.shjzcie;
locallab.spots.at(j).shthjzcie = locallab.spots.at(j).shthjzcie && pSpot.shthjzcie == otherSpot.shthjzcie;
locallab.spots.at(j).radjzcie = locallab.spots.at(j).radjzcie && pSpot.radjzcie == otherSpot.radjzcie;
locallab.spots.at(j).contthrescie = locallab.spots.at(j).contthrescie && pSpot.contthrescie == otherSpot.contthrescie;
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).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).sigmoidblcie = locallab.spots.at(j).sigmoidblcie && pSpot.sigmoidblcie == otherSpot.sigmoidblcie;
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).colorflcie = locallab.spots.at(j).colorflcie && pSpot.colorflcie == otherSpot.colorflcie;
locallab.spots.at(j).targabscie = locallab.spots.at(j).targabscie && pSpot.targabscie == otherSpot.targabscie;
locallab.spots.at(j).targetGraycie = locallab.spots.at(j).targetGraycie && pSpot.targetGraycie == otherSpot.targetGraycie;
locallab.spots.at(j).catadcie = locallab.spots.at(j).catadcie && pSpot.catadcie == otherSpot.catadcie;
locallab.spots.at(j).detailcie = locallab.spots.at(j).detailcie && pSpot.detailcie == otherSpot.detailcie;
locallab.spots.at(j).surroundcie = locallab.spots.at(j).surroundcie && pSpot.surroundcie == otherSpot.surroundcie;
/*
locallab.spots.at(j).lightlzcam = locallab.spots.at(j).lightlzcam && pSpot.lightlzcam == otherSpot.lightlzcam;
locallab.spots.at(j).lightqzcam = locallab.spots.at(j).lightqzcam && pSpot.lightqzcam == otherSpot.lightqzcam;
locallab.spots.at(j).contlzcam = locallab.spots.at(j).contlzcam && pSpot.contlzcam == otherSpot.contlzcam;
locallab.spots.at(j).contqzcam = locallab.spots.at(j).contqzcam && pSpot.contqzcam == otherSpot.contqzcam;
locallab.spots.at(j).contthreszcam = locallab.spots.at(j).contthreszcam && pSpot.contthreszcam == otherSpot.contthreszcam;
locallab.spots.at(j).colorflzcam = locallab.spots.at(j).colorflzcam && pSpot.colorflzcam == otherSpot.colorflzcam;
locallab.spots.at(j).saturzcam = locallab.spots.at(j).saturzcam && pSpot.saturzcam == otherSpot.saturzcam;
locallab.spots.at(j).chromzcam = locallab.spots.at(j).chromzcam && pSpot.chromzcam == otherSpot.chromzcam;
*/
locallab.spots.at(j).enacieMask = locallab.spots.at(j).enaSHMask && pSpot.enaSHMask == otherSpot.enaSHMask;
locallab.spots.at(j).CCmaskciecurve = locallab.spots.at(j).CCmaskciecurve && pSpot.CCmaskciecurve == otherSpot.CCmaskciecurve;
locallab.spots.at(j).LLmaskciecurve = locallab.spots.at(j).LLmaskciecurve && pSpot.LLmaskciecurve == otherSpot.LLmaskciecurve;
locallab.spots.at(j).HHmaskciecurve = locallab.spots.at(j).HHmaskciecurve && pSpot.HHmaskciecurve == otherSpot.HHmaskciecurve;
locallab.spots.at(j).blendmaskcie = locallab.spots.at(j).blendmaskcie && pSpot.blendmaskcie == otherSpot.blendmaskcie;
locallab.spots.at(j).radmaskcie = locallab.spots.at(j).radmaskcie && pSpot.radmaskcie == otherSpot.radmaskcie;
locallab.spots.at(j).chromaskcie = locallab.spots.at(j).chromaskcie && pSpot.chromaskcie == otherSpot.chromaskcie;
locallab.spots.at(j).lapmaskcie = locallab.spots.at(j).lapmaskcie && pSpot.lapmaskcie == otherSpot.lapmaskcie;
locallab.spots.at(j).gammaskcie = locallab.spots.at(j).gammaskcie && pSpot.gammaskcie == otherSpot.gammaskcie;
locallab.spots.at(j).slomaskcie = locallab.spots.at(j).slomaskcie && pSpot.slomaskcie == otherSpot.slomaskcie;
locallab.spots.at(j).Lmaskciecurve = locallab.spots.at(j).Lmaskciecurve && pSpot.Lmaskciecurve == otherSpot.Lmaskciecurve;
locallab.spots.at(j).recothrescie = locallab.spots.at(j).recothrescie && pSpot.recothrescie == otherSpot.recothrescie;
locallab.spots.at(j).lowthrescie = locallab.spots.at(j).lowthrescie && pSpot.lowthrescie == otherSpot.lowthrescie;
locallab.spots.at(j).higthrescie = locallab.spots.at(j).higthrescie && pSpot.higthrescie == otherSpot.higthrescie;
locallab.spots.at(j).decaycie = locallab.spots.at(j).decaycie && pSpot.decaycie == otherSpot.decaycie;
locallab.spots.at(j).locwavcurvejz = locallab.spots.at(j).locwavcurvejz && pSpot.locwavcurvejz == otherSpot.locwavcurvejz;
locallab.spots.at(j).csthresholdjz = locallab.spots.at(j).csthresholdjz && pSpot.csthresholdjz == otherSpot.csthresholdjz;
locallab.spots.at(j).sigmalcjz = locallab.spots.at(j).sigmalcjz && pSpot.sigmalcjz == otherSpot.sigmalcjz;
locallab.spots.at(j).clarilresjz = locallab.spots.at(j).clarilresjz && pSpot.clarilresjz == otherSpot.clarilresjz;
locallab.spots.at(j).claricresjz = locallab.spots.at(j).claricresjz && pSpot.claricresjz == otherSpot.claricresjz;
locallab.spots.at(j).clarisoftjz = locallab.spots.at(j).clarisoftjz && pSpot.clarisoftjz == otherSpot.clarisoftjz;
}
}
@ -3425,6 +3540,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).savrest = mods.locallab.spots.at(i).savrest;
}
if (locallab.spots.at(i).denoichmask) {
toEdit.locallab.spots.at(i).denoichmask = mods.locallab.spots.at(i).denoichmask;
}
if (locallab.spots.at(i).scopemask) {
toEdit.locallab.spots.at(i).scopemask = mods.locallab.spots.at(i).scopemask;
}
@ -3458,6 +3577,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).reparcol = mods.locallab.spots.at(i).reparcol;
}
if (locallab.spots.at(i).gamc) {
toEdit.locallab.spots.at(i).gamc = mods.locallab.spots.at(i).gamc;
}
if (locallab.spots.at(i).contrast) {
toEdit.locallab.spots.at(i).contrast = mods.locallab.spots.at(i).contrast;
}
@ -3755,10 +3878,18 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).structexp = mods.locallab.spots.at(i).structexp;
}
if (locallab.spots.at(i).gamex) {
toEdit.locallab.spots.at(i).gamex = mods.locallab.spots.at(i).gamex;
}
if (locallab.spots.at(i).blurexpde) {
toEdit.locallab.spots.at(i).blurexpde = mods.locallab.spots.at(i).blurexpde;
}
if (locallab.spots.at(i).gamex) {
toEdit.locallab.spots.at(i).gamex = mods.locallab.spots.at(i).gamex;
}
if (locallab.spots.at(i).strexp) {
toEdit.locallab.spots.at(i).strexp = mods.locallab.spots.at(i).strexp;
}
@ -4067,6 +4198,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).pastels = mods.locallab.spots.at(i).pastels;
}
if (locallab.spots.at(i).vibgam) {
toEdit.locallab.spots.at(i).vibgam = mods.locallab.spots.at(i).vibgam;
}
if (locallab.spots.at(i).warm) {
toEdit.locallab.spots.at(i).warm = mods.locallab.spots.at(i).warm;
}
@ -4365,6 +4500,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).noiselequal = mods.locallab.spots.at(i).noiselequal;
}
if (locallab.spots.at(i).noisegam) {
toEdit.locallab.spots.at(i).noisegam = mods.locallab.spots.at(i).noisegam;
}
if (locallab.spots.at(i).noisechrof) {
toEdit.locallab.spots.at(i).noisechrof = mods.locallab.spots.at(i).noisechrof;
}
@ -4829,6 +4968,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).sharblur = mods.locallab.spots.at(i).sharblur;
}
if (locallab.spots.at(i).shargam) {
toEdit.locallab.spots.at(i).shargam = mods.locallab.spots.at(i).shargam;
}
if (locallab.spots.at(i).sensisha) {
toEdit.locallab.spots.at(i).sensisha = mods.locallab.spots.at(i).sensisha;
}
@ -4894,6 +5037,18 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).residhithr = mods.locallab.spots.at(i).residhithr;
}
if (locallab.spots.at(i).gamlc) {
toEdit.locallab.spots.at(i).gamlc = mods.locallab.spots.at(i).gamlc;
}
if (locallab.spots.at(i).residgam) {
toEdit.locallab.spots.at(i).residgam = mods.locallab.spots.at(i).residgam;
}
if (locallab.spots.at(i).residslop) {
toEdit.locallab.spots.at(i).residslop = mods.locallab.spots.at(i).residslop;
}
if (locallab.spots.at(i).residblur) {
toEdit.locallab.spots.at(i).residblur = mods.locallab.spots.at(i).residblur;
}
@ -5536,6 +5691,400 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).csthresholdmask = mods.locallab.spots.at(i).csthresholdmask;
}
//ciecam
if (locallab.spots.at(i).visicie) {
toEdit.locallab.spots.at(i).visicie = mods.locallab.spots.at(i).visicie;
}
if (locallab.spots.at(i).expcie) {
toEdit.locallab.spots.at(i).expcie = mods.locallab.spots.at(i).expcie;
}
if (locallab.spots.at(i).complexcie) {
toEdit.locallab.spots.at(i).complexcie = mods.locallab.spots.at(i).complexcie;
}
if (locallab.spots.at(i).reparcie) {
toEdit.locallab.spots.at(i).reparcie = mods.locallab.spots.at(i).reparcie;
}
if (locallab.spots.at(i).sensicie) {
toEdit.locallab.spots.at(i).sensicie = mods.locallab.spots.at(i).sensicie;
}
if (locallab.spots.at(i).Autograycie) {
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).qtoj) {
toEdit.locallab.spots.at(i).qtoj = mods.locallab.spots.at(i).qtoj;
}
if (locallab.spots.at(i).jabcie) {
toEdit.locallab.spots.at(i).jabcie = mods.locallab.spots.at(i).jabcie;
}
if (locallab.spots.at(i).sigmoidqjcie) {
toEdit.locallab.spots.at(i).sigmoidqjcie = mods.locallab.spots.at(i).sigmoidqjcie;
}
if (locallab.spots.at(i).logjz) {
toEdit.locallab.spots.at(i).logjz = mods.locallab.spots.at(i).logjz;
}
if (locallab.spots.at(i).sigjz) {
toEdit.locallab.spots.at(i).sigjz = mods.locallab.spots.at(i).sigjz;
}
if (locallab.spots.at(i).chjzcie) {
toEdit.locallab.spots.at(i).chjzcie = mods.locallab.spots.at(i).chjzcie;
}
if (locallab.spots.at(i).sourceGraycie) {
toEdit.locallab.spots.at(i).sourceGraycie = mods.locallab.spots.at(i).sourceGraycie;
}
if (locallab.spots.at(i).sourceabscie) {
toEdit.locallab.spots.at(i).sourceabscie = mods.locallab.spots.at(i).sourceabscie;
}
if (locallab.spots.at(i).sursourcie) {
toEdit.locallab.spots.at(i).sursourcie = mods.locallab.spots.at(i).sursourcie;
}
if (locallab.spots.at(i).modecam) {
toEdit.locallab.spots.at(i).modecam = mods.locallab.spots.at(i).modecam;
}
if (locallab.spots.at(i).modecie) {
toEdit.locallab.spots.at(i).modecie = mods.locallab.spots.at(i).modecie;
}
if (locallab.spots.at(i).saturlcie) {
toEdit.locallab.spots.at(i).saturlcie = mods.locallab.spots.at(i).saturlcie;
}
if (locallab.spots.at(i).rstprotectcie) {
toEdit.locallab.spots.at(i).rstprotectcie = mods.locallab.spots.at(i).rstprotectcie;
}
if (locallab.spots.at(i).chromlcie) {
toEdit.locallab.spots.at(i).chromlcie = mods.locallab.spots.at(i).chromlcie;
}
if (locallab.spots.at(i).huecie) {
toEdit.locallab.spots.at(i).huecie = mods.locallab.spots.at(i).huecie;
}
if (locallab.spots.at(i).toneMethodcie) {
toEdit.locallab.spots.at(i).toneMethodcie = mods.locallab.spots.at(i).toneMethodcie;
}
if (locallab.spots.at(i).toneMethodcie2) {
toEdit.locallab.spots.at(i).toneMethodcie2 = mods.locallab.spots.at(i).toneMethodcie2;
}
if (locallab.spots.at(i).chromjzcie) {
toEdit.locallab.spots.at(i).chromjzcie = mods.locallab.spots.at(i).chromjzcie;
}
if (locallab.spots.at(i).saturjzcie) {
toEdit.locallab.spots.at(i).saturjzcie = mods.locallab.spots.at(i).saturjzcie;
}
if (locallab.spots.at(i).huejzcie) {
toEdit.locallab.spots.at(i).huejzcie = mods.locallab.spots.at(i).huejzcie;
}
if (locallab.spots.at(i).softjzcie) {
toEdit.locallab.spots.at(i).softjzcie = mods.locallab.spots.at(i).softjzcie;
}
if (locallab.spots.at(i).strsoftjzcie) {
toEdit.locallab.spots.at(i).strsoftjzcie = mods.locallab.spots.at(i).strsoftjzcie;
}
if (locallab.spots.at(i).thrhjzcie) {
toEdit.locallab.spots.at(i).thrhjzcie = mods.locallab.spots.at(i).thrhjzcie;
}
if (locallab.spots.at(i).ciecurve) {
toEdit.locallab.spots.at(i).ciecurve = mods.locallab.spots.at(i).ciecurve;
}
if (locallab.spots.at(i).ciecurve2) {
toEdit.locallab.spots.at(i).ciecurve2 = mods.locallab.spots.at(i).ciecurve2;
}
if (locallab.spots.at(i).jzcurve) {
toEdit.locallab.spots.at(i).jzcurve = mods.locallab.spots.at(i).jzcurve;
}
if (locallab.spots.at(i).czjzcurve) {
toEdit.locallab.spots.at(i).czjzcurve = mods.locallab.spots.at(i).czjzcurve;
}
if (locallab.spots.at(i).HHcurvejz) {
toEdit.locallab.spots.at(i).HHcurvejz = mods.locallab.spots.at(i).HHcurvejz;
}
if (locallab.spots.at(i).CHcurvejz) {
toEdit.locallab.spots.at(i).CHcurvejz = mods.locallab.spots.at(i).CHcurvejz;
}
if (locallab.spots.at(i).LHcurvejz) {
toEdit.locallab.spots.at(i).LHcurvejz = mods.locallab.spots.at(i).LHcurvejz;
}
if (locallab.spots.at(i).lightlcie) {
toEdit.locallab.spots.at(i).lightlcie = mods.locallab.spots.at(i).lightlcie;
}
if (locallab.spots.at(i).lightjzcie) {
toEdit.locallab.spots.at(i).lightjzcie = mods.locallab.spots.at(i).lightjzcie;
}
if (locallab.spots.at(i).lightqcie) {
toEdit.locallab.spots.at(i).lightqcie = mods.locallab.spots.at(i).lightqcie;
}
if (locallab.spots.at(i).contlcie) {
toEdit.locallab.spots.at(i).contlcie = mods.locallab.spots.at(i).contlcie;
}
if (locallab.spots.at(i).contjzcie) {
toEdit.locallab.spots.at(i).contjzcie = mods.locallab.spots.at(i).contjzcie;
}
if (locallab.spots.at(i).adapjzcie) {
toEdit.locallab.spots.at(i).adapjzcie = mods.locallab.spots.at(i).adapjzcie;
}
if (locallab.spots.at(i).jz100) {
toEdit.locallab.spots.at(i).jz100 = mods.locallab.spots.at(i).jz100;
}
if (locallab.spots.at(i).pqremap) {
toEdit.locallab.spots.at(i).pqremap = mods.locallab.spots.at(i).pqremap;
}
if (locallab.spots.at(i).pqremapcam16) {
toEdit.locallab.spots.at(i).pqremapcam16 = mods.locallab.spots.at(i).pqremapcam16;
}
if (locallab.spots.at(i).hljzcie) {
toEdit.locallab.spots.at(i).hljzcie = mods.locallab.spots.at(i).hljzcie;
}
if (locallab.spots.at(i).hlthjzcie) {
toEdit.locallab.spots.at(i).hlthjzcie = mods.locallab.spots.at(i).hlthjzcie;
}
if (locallab.spots.at(i).shjzcie) {
toEdit.locallab.spots.at(i).shjzcie = mods.locallab.spots.at(i).shjzcie;
}
if (locallab.spots.at(i).shthjzcie) {
toEdit.locallab.spots.at(i).shthjzcie = mods.locallab.spots.at(i).shthjzcie;
}
if (locallab.spots.at(i).radjzcie) {
toEdit.locallab.spots.at(i).radjzcie = mods.locallab.spots.at(i).radjzcie;
}
if (locallab.spots.at(i).contthrescie) {
toEdit.locallab.spots.at(i).contthrescie = mods.locallab.spots.at(i).contthrescie;
}
if (locallab.spots.at(i).blackEvjz) {
toEdit.locallab.spots.at(i).blackEvjz = mods.locallab.spots.at(i).blackEvjz;
}
if (locallab.spots.at(i).whiteEvjz) {
toEdit.locallab.spots.at(i).whiteEvjz = mods.locallab.spots.at(i).whiteEvjz;
}
if (locallab.spots.at(i).targetjz) {
toEdit.locallab.spots.at(i).targetjz = mods.locallab.spots.at(i).targetjz;
}
if (locallab.spots.at(i).sigmoidldacie) {
toEdit.locallab.spots.at(i).sigmoidldacie = mods.locallab.spots.at(i).sigmoidldacie;
}
if (locallab.spots.at(i).sigmoidthcie) {
toEdit.locallab.spots.at(i).sigmoidthcie = mods.locallab.spots.at(i).sigmoidthcie;
}
if (locallab.spots.at(i).sigmoidblcie) {
toEdit.locallab.spots.at(i).sigmoidblcie = mods.locallab.spots.at(i).sigmoidblcie;
}
if (locallab.spots.at(i).sigmoidldajzcie) {
toEdit.locallab.spots.at(i).sigmoidldajzcie = mods.locallab.spots.at(i).sigmoidldajzcie;
}
if (locallab.spots.at(i).sigmoidthjzcie) {
toEdit.locallab.spots.at(i).sigmoidthjzcie = mods.locallab.spots.at(i).sigmoidthjzcie;
}
if (locallab.spots.at(i).sigmoidbljzcie) {
toEdit.locallab.spots.at(i).sigmoidbljzcie = mods.locallab.spots.at(i).sigmoidbljzcie;
}
if (locallab.spots.at(i).contqcie) {
toEdit.locallab.spots.at(i).contqcie = mods.locallab.spots.at(i).contqcie;
}
if (locallab.spots.at(i).colorflcie) {
toEdit.locallab.spots.at(i).colorflcie = mods.locallab.spots.at(i).colorflcie;
}
/*
if (locallab.spots.at(i).lightlzcam) {
toEdit.locallab.spots.at(i).lightlzcam = mods.locallab.spots.at(i).lightlzcam;
}
if (locallab.spots.at(i).lightqzcam) {
toEdit.locallab.spots.at(i).lightqzcam = mods.locallab.spots.at(i).lightqzcam;
}
if (locallab.spots.at(i).contlzcam) {
toEdit.locallab.spots.at(i).contlzcam = mods.locallab.spots.at(i).contlzcam;
}
if (locallab.spots.at(i).contqzcam) {
toEdit.locallab.spots.at(i).contqzcam = mods.locallab.spots.at(i).contqzcam;
}
if (locallab.spots.at(i).contthreszcam) {
toEdit.locallab.spots.at(i).contthreszcam = mods.locallab.spots.at(i).contthreszcam;
}
if (locallab.spots.at(i).colorflzcam) {
toEdit.locallab.spots.at(i).colorflzcam = mods.locallab.spots.at(i).colorflzcam;
}
if (locallab.spots.at(i).saturzcam) {
toEdit.locallab.spots.at(i).saturzcam = mods.locallab.spots.at(i).saturzcam;
}
if (locallab.spots.at(i).chromzcam) {
toEdit.locallab.spots.at(i).chromzcam = mods.locallab.spots.at(i).chromzcam;
}
*/
if (locallab.spots.at(i).targabscie) {
toEdit.locallab.spots.at(i).targabscie = mods.locallab.spots.at(i).targabscie;
}
if (locallab.spots.at(i).targetGraycie) {
toEdit.locallab.spots.at(i).targetGraycie = mods.locallab.spots.at(i).targetGraycie;
}
if (locallab.spots.at(i).catadcie) {
toEdit.locallab.spots.at(i).catadcie = mods.locallab.spots.at(i).catadcie;
}
if (locallab.spots.at(i).locwavcurvejz) {
toEdit.locallab.spots.at(i).locwavcurvejz = mods.locallab.spots.at(i).locwavcurvejz;
}
if (locallab.spots.at(i).csthresholdjz) {
toEdit.locallab.spots.at(i).csthresholdjz = mods.locallab.spots.at(i).csthresholdjz;
}
if (locallab.spots.at(i).sigmalcjz) {
toEdit.locallab.spots.at(i).sigmalcjz = mods.locallab.spots.at(i).sigmalcjz;
}
if (locallab.spots.at(i).clarilresjz) {
toEdit.locallab.spots.at(i).clarilresjz = mods.locallab.spots.at(i).clarilresjz;
}
if (locallab.spots.at(i).claricresjz) {
toEdit.locallab.spots.at(i).claricresjz = mods.locallab.spots.at(i).claricresjz;
}
if (locallab.spots.at(i).clarisoftjz) {
toEdit.locallab.spots.at(i).clarisoftjz = mods.locallab.spots.at(i).clarisoftjz;
}
if (locallab.spots.at(i).detailcie) {
toEdit.locallab.spots.at(i).detailcie = mods.locallab.spots.at(i).detailcie;
}
if (locallab.spots.at(i).surroundcie) {
toEdit.locallab.spots.at(i).surroundcie = mods.locallab.spots.at(i).surroundcie;
}
if (locallab.spots.at(i).enacieMask) {
toEdit.locallab.spots.at(i).enacieMask = mods.locallab.spots.at(i).enacieMask;
}
if (locallab.spots.at(i).CCmaskciecurve) {
toEdit.locallab.spots.at(i).CCmaskciecurve = mods.locallab.spots.at(i).CCmaskciecurve;
}
if (locallab.spots.at(i).LLmaskciecurve) {
toEdit.locallab.spots.at(i).LLmaskciecurve = mods.locallab.spots.at(i).LLmaskciecurve;
}
if (locallab.spots.at(i).HHmaskciecurve) {
toEdit.locallab.spots.at(i).HHmaskciecurve = mods.locallab.spots.at(i).HHmaskciecurve;
}
if (locallab.spots.at(i).blendmaskcie) {
toEdit.locallab.spots.at(i).blendmaskcie = mods.locallab.spots.at(i).blendmaskcie;
}
if (locallab.spots.at(i).radmaskcie) {
toEdit.locallab.spots.at(i).radmaskcie = mods.locallab.spots.at(i).radmaskcie;
}
if (locallab.spots.at(i).chromaskcie) {
toEdit.locallab.spots.at(i).chromaskcie = mods.locallab.spots.at(i).chromaskcie;
}
if (locallab.spots.at(i).lapmaskcie) {
toEdit.locallab.spots.at(i).lapmaskcie = mods.locallab.spots.at(i).lapmaskcie;
}
if (locallab.spots.at(i).gammaskcie) {
toEdit.locallab.spots.at(i).gammaskcie = mods.locallab.spots.at(i).gammaskcie;
}
if (locallab.spots.at(i).slomaskcie) {
toEdit.locallab.spots.at(i).slomaskcie = mods.locallab.spots.at(i).slomaskcie;
}
if (locallab.spots.at(i).Lmaskciecurve) {
toEdit.locallab.spots.at(i).Lmaskciecurve = mods.locallab.spots.at(i).Lmaskciecurve;
}
if (locallab.spots.at(i).recothrescie) {
toEdit.locallab.spots.at(i).recothrescie = mods.locallab.spots.at(i).recothrescie;
}
if (locallab.spots.at(i).lowthrescie) {
toEdit.locallab.spots.at(i).lowthrescie = mods.locallab.spots.at(i).lowthrescie;
}
if (locallab.spots.at(i).higthrescie) {
toEdit.locallab.spots.at(i).higthrescie = mods.locallab.spots.at(i).higthrescie;
}
if (locallab.spots.at(i).decaycie) {
toEdit.locallab.spots.at(i).decaycie = mods.locallab.spots.at(i).decaycie;
}
}
if (spot.enabled) {
@ -6873,6 +7422,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
shortc(v),
savrest(v),
scopemask(v),
denoichmask(v),
lumask(v),
// Color & Light
visicolor(v),
@ -6881,6 +7431,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
curvactiv(v),
lightness(v),
reparcol(v),
gamc(v),
contrast(v),
chroma(v),
labgridALow(v),
@ -6956,6 +7507,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
expchroma(v),
sensiex(v),
structexp(v),
gamex(v),
blurexpde(v),
strexp(v),
angexp(v),
@ -7035,6 +7587,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
complexvibrance(v),
saturated(v),
pastels(v),
vibgam(v),
warm(v),
psthreshold(v),
protectskins(v),
@ -7111,6 +7664,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
noiselumc(v),
noiselumdetail(v),
noiselequal(v),
noisegam(v),
noisechrof(v),
noisechroc(v),
noisechrodetail(v),
@ -7229,6 +7783,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
shardamping(v),
shariter(v),
sharblur(v),
shargam(v),
sensisha(v),
inverssha(v),
// Local Contrast
@ -7246,6 +7801,9 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
residshathr(v),
residhi(v),
residhithr(v),
gamlc(v),
residgam(v),
residslop(v),
residblur(v),
levelblur(v),
sigmabl(v),
@ -7407,7 +7965,109 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
HHhmask_curve(v),
Lmask_curve(v),
LLmask_curvewav(v),
csthresholdmask(v)
csthresholdmask(v),
//ciecam
visicie(v),
complexcie(v),
expcie(v),
reparcie(v),
sensicie(v),
Autograycie(v),
forcejz(v),
forcebw(v),
qtoj(v),
jabcie(v),
sigmoidqjcie(v),
logjz(v),
sigjz(v),
chjzcie(v),
sourceGraycie(v),
sourceabscie(v),
sursourcie(v),
modecam(v),
modecie(v),
saturlcie(v),
rstprotectcie(v),
chromlcie(v),
huecie(v),
toneMethodcie(v),
ciecurve(v),
toneMethodcie2(v),
ciecurve2(v),
chromjzcie(v),
saturjzcie(v),
huejzcie(v),
softjzcie(v),
strsoftjzcie(v),
thrhjzcie(v),
jzcurve(v),
czcurve(v),
czjzcurve(v),
HHcurvejz(v),
CHcurvejz(v),
LHcurvejz(v),
lightlcie(v),
lightjzcie(v),
lightqcie(v),
contlcie(v),
contjzcie(v),
adapjzcie(v),
jz100(v),
pqremap(v),
pqremapcam16(v),
hljzcie(v),
hlthjzcie(v),
shjzcie(v),
shthjzcie(v),
radjzcie(v),
contthrescie(v),
blackEvjz(v),
whiteEvjz(v),
targetjz(v),
sigmoidldacie(v),
sigmoidthcie(v),
sigmoidblcie(v),
sigmoidldajzcie(v),
sigmoidthjzcie(v),
sigmoidbljzcie(v),
contqcie(v),
colorflcie(v),
/*
lightlzcam(v),
lightqzcam(v),
contlzcam(v),
contqzcam(v),
contthreszcam(v),
colorflzcam(v),
saturzcam(v),
chromzcam(v),
*/
targabscie(v),
targetGraycie(v),
catadcie(v),
detailcie(v),
surroundcie(v),
enacieMask(v),
CCmaskciecurve(v),
LLmaskciecurve(v),
HHmaskciecurve(v),
blendmaskcie(v),
radmaskcie(v),
sigmalcjz(v),
clarilresjz(v),
claricresjz(v),
clarisoftjz(v),
locwavcurvejz(v),
csthresholdjz(v),
chromaskcie(v),
lapmaskcie(v),
gammaskcie(v),
slomaskcie(v),
Lmaskciecurve(v),
recothrescie(v),
lowthrescie(v),
higthrescie(v),
decaycie(v)
{
}
@ -7452,6 +8112,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
shortc = v;
savrest = v;
scopemask = v;
denoichmask = v;
lumask = v;
// Color & Light
visicolor = v;
@ -7460,6 +8121,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
curvactiv = v;
lightness = v;
reparcol = v;
gamc = v;
contrast = v;
chroma = v;
labgridALow = v;
@ -7535,6 +8197,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
expchroma = v;
sensiex = v;
structexp = v;
gamex = v;
blurexpde = v;
strexp = v;
angexp = v;
@ -7618,6 +8281,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
complexvibrance = v;
saturated = v;
pastels = v;
vibgam = v;
warm = v;
psthreshold = v;
protectskins = v;
@ -7694,6 +8358,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
noiselumc = v;
noiselumdetail = v;
noiselequal = v;
noisegam = v;
noisechrof = v;
noisechroc = v;
noisechrodetail = v;
@ -7811,6 +8476,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
shardamping = v;
shariter = v;
sharblur = v;
shargam = v;
sensisha = v;
inverssha = v;
// Local Contrast
@ -7828,6 +8494,9 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
residshathr = v;
residhi = v;
residhithr = v;
gamlc = v;
residgam = v;
residslop = v;
residblur = v;
levelblur = v;
sigmabl = v;
@ -7990,10 +8659,113 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
shadmask = v;
str_mask = v;
ang_mask = v;
HHhmask_curve =(v);
Lmask_curve =(v);
LLmask_curvewav =(v);
HHhmask_curve = v;
Lmask_curve = v;
LLmask_curvewav = v;
csthresholdmask = v;
//ciecam
visicie= v;
complexcie= v;
expcie = v;
reparcie = v;
sensicie = v;
Autograycie = v;
forcejz = v;
forcebw = v;
qtoj = v;
jabcie = v;
sigmoidqjcie = v;
logjz = v;
sigjz = v;
chjzcie = v;
sourceGraycie = v;
sourceabscie = v;
sursourcie = v;
modecam = v;
modecie = v;
saturlcie = v;
rstprotectcie = v;
chromlcie = v;
huecie = v;
toneMethodcie = v;
ciecurve = v;
toneMethodcie2 = v;
ciecurve2 = v;
chromjzcie = v;
saturjzcie = v;
huejzcie = v;
softjzcie = v;
strsoftjzcie = v;
thrhjzcie = v;
jzcurve = v;
czcurve = v;
czjzcurve = v;
HHcurvejz = v;
CHcurvejz = v;
LHcurvejz = v;
lightlcie = v;
lightjzcie = v;
lightqcie = v;
contlcie = v;
contjzcie = v;
adapjzcie = v;
jz100 = v;
pqremap = v;
pqremapcam16 = v;
hljzcie = v;
hlthjzcie = v;
shjzcie = v;
shthjzcie = v;
radjzcie = v;
contthrescie = v;
blackEvjz = v;
whiteEvjz = v;
targetjz = v;
sigmoidldacie = v;
sigmoidthcie = v;
sigmoidblcie = v;
sigmoidldajzcie = v;
sigmoidthjzcie = v;
sigmoidbljzcie = v;
contqcie = v;
colorflcie = v;
/*
lightlzcam = v;
lightqzcam = v;
contlzcam = v;
contqzcam = v;
contthreszcam = v;
colorflzcam = v;
saturzcam = v;
chromzcam = v;
*/
targabscie = v;
targetGraycie = v;
catadcie = v;
detailcie = v;
surroundcie = v;
enacieMask = v;
CCmaskciecurve = v;
LLmaskciecurve = v;
HHmaskciecurve = v;
blendmaskcie = v;
radmaskcie = v;
sigmalcjz = v;
clarilresjz = v;
claricresjz = v;
clarisoftjz = v;
locwavcurvejz = v;
csthresholdjz = v;
chromaskcie = v;
lapmaskcie = v;
gammaskcie = v;
slomaskcie = v;
Lmaskciecurve = v;
recothrescie = v;
lowthrescie = v;
higthrescie = v;
decaycie = v;
}
bool CaptureSharpeningParamsEdited::isUnchanged() const

View File

@ -431,6 +431,7 @@ public:
bool shortc;
bool savrest;
bool scopemask;
bool denoichmask;
bool lumask;
// Color & Light
bool visicolor;
@ -439,6 +440,7 @@ public:
bool curvactiv;
bool lightness;
bool reparcol;
bool gamc;
bool contrast;
bool chroma;
bool labgridALow;
@ -514,6 +516,7 @@ public:
bool expchroma;
bool sensiex;
bool structexp;
bool gamex;
bool blurexpde;
bool strexp;
bool angexp;
@ -593,6 +596,7 @@ public:
bool complexvibrance;
bool saturated;
bool pastels;
bool vibgam;
bool warm;
bool psthreshold;
bool protectskins;
@ -669,6 +673,7 @@ public:
bool noiselumc;
bool noiselumdetail;
bool noiselequal;
bool noisegam;
bool noisechrof;
bool noisechroc;
bool noisechrodetail;
@ -787,6 +792,7 @@ public:
bool shardamping;
bool shariter;
bool sharblur;
bool shargam;
bool sensisha;
bool inverssha;
// Local Contrast
@ -804,6 +810,9 @@ public:
bool residshathr;
bool residhi;
bool residhithr;
bool gamlc;
bool residgam;
bool residslop;
bool residblur;
bool levelblur;
bool sigmabl;
@ -966,6 +975,108 @@ public:
bool Lmask_curve;
bool LLmask_curvewav;
bool csthresholdmask;
//locallabcie
bool visicie;
bool complexcie;
bool expcie;
bool reparcie;
bool sensicie;
bool Autograycie;
bool forcejz;
bool forcebw;
bool qtoj;
bool jabcie;
bool sigmoidqjcie;
bool logjz;
bool sigjz;
bool chjzcie;
bool sourceGraycie;
bool sourceabscie;
bool sursourcie;
bool modecam;
bool modecie;
bool saturlcie;
bool rstprotectcie;
bool chromlcie;
bool huecie;
bool toneMethodcie;
bool ciecurve;
bool toneMethodcie2;
bool ciecurve2;
bool chromjzcie;
bool saturjzcie;
bool huejzcie;
bool softjzcie;
bool strsoftjzcie;
bool thrhjzcie;
bool jzcurve;
bool czcurve;
bool czjzcurve;
bool HHcurvejz;
bool CHcurvejz;
bool LHcurvejz;
bool lightlcie;
bool lightjzcie;
bool lightqcie;
bool contlcie;
bool contjzcie;
bool adapjzcie;
bool jz100;
bool pqremap;
bool pqremapcam16;
bool hljzcie;
bool hlthjzcie;
bool shjzcie;
bool shthjzcie;
bool radjzcie;
bool contthrescie;
bool blackEvjz;
bool whiteEvjz;
bool targetjz;
bool sigmoidldacie;
bool sigmoidthcie;
bool sigmoidblcie;
bool sigmoidldajzcie;
bool sigmoidthjzcie;
bool sigmoidbljzcie;
bool contqcie;
bool colorflcie;
/*
bool lightlzcam;
bool lightqzcam;
bool contlzcam;
bool contqzcam;
bool contthreszcam;
bool colorflzcam;
bool saturzcam;
bool chromzcam;
*/
bool targabscie;
bool targetGraycie;
bool catadcie;
bool detailcie;
bool surroundcie;
bool enacieMask;
bool CCmaskciecurve;
bool LLmaskciecurve;
bool HHmaskciecurve;
bool blendmaskcie;
bool radmaskcie;
bool sigmalcjz;
bool clarilresjz;
bool claricresjz;
bool clarisoftjz;
bool locwavcurvejz;
bool csthresholdjz;
bool chromaskcie;
bool lapmaskcie;
bool gammaskcie;
bool slomaskcie;
bool Lmaskciecurve;
bool recothrescie;
bool lowthrescie;
bool higthrescie;
bool decaycie;
LocallabSpotEdited(bool v);

View File

@ -555,12 +555,12 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const
ipc->setLocallabMaskVisibility(maskStruc.previewDeltaE, maskStruc.colorMask, maskStruc.colorMaskinv, maskStruc.expMask, maskStruc.expMaskinv,
maskStruc.SHMask, maskStruc.SHMaskinv, maskStruc.vibMask, maskStruc.softMask,
maskStruc.blMask, maskStruc.tmMask, maskStruc.retiMask, maskStruc.sharMask,
maskStruc.lcMask, maskStruc.cbMask, maskStruc.logMask, maskStruc.maskMask);
maskStruc.lcMask, maskStruc.cbMask, maskStruc.logMask, maskStruc.maskMask, maskStruc.cieMask);
} else if (event == rtengine::EvLocallabSpotCreated || event == rtengine::EvLocallabSpotSelectedWithMask ||
event == rtengine::EvLocallabSpotDeleted || event == rtengine::Evlocallabshowreset ||
event == rtengine::EvlocallabToolRemovedWithRefresh) {
locallab->resetMaskVisibility();
ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
ipc->endUpdateParams(changeFlags); // starts the IPC processing
@ -670,7 +670,7 @@ void ToolPanelCoordinator::profileChange(
// Reset Locallab mask visibility
locallab->resetMaskVisibility();
ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// start the IPC processing
if (filterRawRefresh) {