Add contrast curve to mask 4 ShadowsHighlight

This commit is contained in:
Desmis 2019-10-15 11:35:01 +02:00
parent e44d4c1324
commit e8dd1c4378
15 changed files with 75 additions and 8 deletions

View File

@ -1009,6 +1009,7 @@ HISTORY_MSG_768;Local - Grain Strength
HISTORY_MSG_769;Local - Grain Scale HISTORY_MSG_769;Local - Grain Scale
HISTORY_MSG_770;Local - Color Mask contrast curve HISTORY_MSG_770;Local - Color Mask contrast curve
HISTORY_MSG_771;Local - Exp Mask contrast curve HISTORY_MSG_771;Local - Exp Mask contrast curve
HISTORY_MSG_772;Local - SH Mask contrast curve
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction

View File

@ -888,8 +888,10 @@ void Crop::update(int todo)
LUTf exlocalcurve2(65536, 0); LUTf exlocalcurve2(65536, 0);
bool localmaskutili = parent->localmaskutili; bool localmaskutili = parent->localmaskutili;
bool localmaskexputili = parent->localmaskexputili; bool localmaskexputili = parent->localmaskexputili;
bool localmaskSHutili = parent->localmaskSHutili;
LUTf lmasklocalcurve2(65536, 0); LUTf lmasklocalcurve2(65536, 0);
LUTf lmaskexplocalcurve2(65536, 0); LUTf lmaskexplocalcurve2(65536, 0);
LUTf lmaskSHlocalcurve2(65536, 0);
LUTf hltonecurveloc2(65536, 0); //65536 LUTf hltonecurveloc2(65536, 0); //65536
LUTf shtonecurveloc2(65536, 0); LUTf shtonecurveloc2(65536, 0);
LUTf tonecurveloc2(65536, 0); LUTf tonecurveloc2(65536, 0);
@ -993,6 +995,8 @@ void Crop::update(int todo)
CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve2, sca); CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve2, sca);
localmaskexputili = false; localmaskexputili = false;
CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve2, sca); CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve2, sca);
localmaskSHutili = false;
CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve2, sca);
double ecomp = params.locallab.spots.at(sp).expcomp; double ecomp = params.locallab.spots.at(sp).expcomp;
@ -1033,6 +1037,7 @@ void Crop::update(int todo)
lllocalcurve2,locallutili, loclhCurve, lochhCurve, lllocalcurve2,locallutili, loclhCurve, lochhCurve,
lmasklocalcurve2, localmaskutili, lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili, lmaskexplocalcurve2, localmaskexputili,
lmaskSHlocalcurve2, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1052,6 +1057,7 @@ void Crop::update(int todo)
lllocalcurve2,locallutili, loclhCurve, lochhCurve, lllocalcurve2,locallutili, loclhCurve, lochhCurve,
lmasklocalcurve2, localmaskutili, lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili, lmaskexplocalcurve2, localmaskexputili,
lmaskSHlocalcurve2, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1069,6 +1075,7 @@ void Crop::update(int todo)
exlocalcurve2.clear(); exlocalcurve2.clear();
lmasklocalcurve2.clear(); lmasklocalcurve2.clear();
lmaskexplocalcurve2.clear(); lmaskexplocalcurve2.clear();
lmaskSHlocalcurve2.clear();
hltonecurveloc2.clear(); hltonecurveloc2.clear();
shtonecurveloc2.clear(); shtonecurveloc2.clear();
tonecurveloc2.clear(); tonecurveloc2.clear();

View File

@ -173,6 +173,7 @@ ImProcCoordinator::ImProcCoordinator() :
lightCurveloc(32770, 0), lightCurveloc(32770, 0),
lmasklocalcurve(65536, 0), lmasklocalcurve(65536, 0),
lmaskexplocalcurve(65536, 0), lmaskexplocalcurve(65536, 0),
lmaskSHlocalcurve(65536, 0),
locallutili(false), locallutili(false),
localcutili(false), localcutili(false),
localexutili(false), localexutili(false),
@ -181,6 +182,7 @@ ImProcCoordinator::ImProcCoordinator() :
lcmasutili(false), lcmasutili(false),
localmaskutili(false), localmaskutili(false),
localmaskexputili(false), localmaskexputili(false),
localmaskSHutili(false),
lcmasexputili(false), lcmasexputili(false),
lhmasexputili(false), lhmasexputili(false),
llmasexputili(false), llmasexputili(false),
@ -922,7 +924,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lcmasexputili = false; lcmasexputili = false;
lhmasexputili = false; lhmasexputili = false;
llmasexputili = false; llmasexputili = false;
localmaskutili = false; localmaskexputili = false;
localmaskSHutili = false;
lcmasSHutili = false; lcmasSHutili = false;
lhmasSHutili = false; lhmasSHutili = false;
llmasSHutili = false; llmasSHutili = false;
@ -972,6 +975,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
CurveFactory::curveexLocal(localexutili, params->locallab.spots.at(sp).excurve, exlocalcurve, sca); CurveFactory::curveexLocal(localexutili, params->locallab.spots.at(sp).excurve, exlocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskutili, params->locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, sca); CurveFactory::curvemaskLocal(localmaskutili, params->locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskexputili, params->locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, sca); CurveFactory::curvemaskLocal(localmaskexputili, params->locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskSHutili, params->locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, sca);
double ecomp = params->locallab.spots.at(sp).expcomp; double ecomp = params->locallab.spots.at(sp).expcomp;
double black = params->locallab.spots.at(sp).black; double black = params->locallab.spots.at(sp).black;
double hlcompr = params->locallab.spots.at(sp).hlcompr; double hlcompr = params->locallab.spots.at(sp).hlcompr;
@ -1027,6 +1031,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili, lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1045,6 +1050,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili, lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1069,6 +1075,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
exlocalcurve.clear(); exlocalcurve.clear();
lmasklocalcurve.clear(); lmasklocalcurve.clear();
lmaskexplocalcurve.clear(); lmaskexplocalcurve.clear();
lmaskSHlocalcurve.clear();
hltonecurveloc.clear(); hltonecurveloc.clear();
shtonecurveloc.clear(); shtonecurveloc.clear();
tonecurveloc.clear(); tonecurveloc.clear();

View File

@ -235,6 +235,7 @@ protected:
LUTf lightCurveloc; LUTf lightCurveloc;
LUTf lmasklocalcurve; LUTf lmasklocalcurve;
LUTf lmaskexplocalcurve; LUTf lmaskexplocalcurve;
LUTf lmaskSHlocalcurve;
// LUTu lhist16loc; // LUTu lhist16loc;
LocretigainCurve locRETgainCurve; LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve; LocretitransCurve locRETtransCurve;
@ -272,6 +273,7 @@ protected:
bool lcmasutili; bool lcmasutili;
bool localmaskutili; bool localmaskutili;
bool localmaskexputili; bool localmaskexputili;
bool localmaskSHutili;
bool lcmasexputili; bool lcmasexputili;
bool lhmasexputili; bool lhmasexputili;
bool llmasexputili; bool llmasexputili;

View File

@ -217,6 +217,7 @@ public:
void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve,
LUTf & lmasklocalcurve, bool & localmaskutili, LUTf & lmasklocalcurve, bool & localmaskutili,
LUTf & lmaskexplocalcurve, bool & localmaskexputili, LUTf & lmaskexplocalcurve, bool & localmaskexputili,
LUTf & lmaskSHlocalcurve, bool & localmaskSHutili,
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili, const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili,
const LocCCmaskCurve & locccmasexpCurve, bool &lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool &llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili, const LocCCmaskCurve & locccmasexpCurve, bool &lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool &llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili,
const LocCCmaskCurve & locccmasSHCurve, bool &lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool &llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili, const LocCCmaskCurve & locccmasSHCurve, bool &lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool &llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili,

View File

@ -6714,6 +6714,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
const LocretigainCurve & locRETgainCcurve, const LocretitransCurve & locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve & locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve,
LUTf & lmasklocalcurve, bool & localmaskutili, LUTf & lmasklocalcurve, bool & localmaskutili,
LUTf & lmaskexplocalcurve, bool & localmaskexputili, LUTf & lmaskexplocalcurve, bool & localmaskexputili,
LUTf & lmaskSHlocalcurve, bool & localmaskSHutili,
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili, const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili,
const LocCCmaskCurve & locccmasexpCurve, bool & lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool & llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili, const LocCCmaskCurve & locccmasexpCurve, bool & lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool & llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili,
const LocCCmaskCurve & locccmasSHCurve, bool & lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool & llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili, const LocCCmaskCurve & locccmasSHCurve, bool & lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool & llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili,
@ -8010,12 +8011,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float blendm = lp.blendmaSH; float blendm = lp.blendmaSH;
float lap = params->locallab.spots.at(sp).lapmaskSH; float lap = params->locallab.spots.at(sp).lapmaskSH;
float pde = params->locallab.spots.at(sp).laplac; float pde = params->locallab.spots.at(sp).laplac;
LUTf dummy;
bool uti;
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskorigSH.get(), originalmaskSH.get(), original, inv, lp, maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskorigSH.get(), originalmaskSH.get(), original, inv, lp,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread,
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, dummy, uti); enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmaskSHlocalcurve, localmaskSHutili);
if (lp.showmaskSHmet == 3) { if (lp.showmaskSHmet == 3) {
showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufexporig.get(), transformed, bufmaskorigSH.get(), 0); showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufexporig.get(), transformed, bufmaskorigSH.get(), 0);
@ -8107,12 +8106,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float blendm = lp.blendmaSH; float blendm = lp.blendmaSH;
float lap = params->locallab.spots.at(sp).lapmaskSH; float lap = params->locallab.spots.at(sp).lapmaskSH;
float pde = params->locallab.spots.at(sp).laplac; float pde = params->locallab.spots.at(sp).laplac;
LUTf dummy;
bool uti;
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskSH.get(), original, inv, lp, maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskSH.get(), original, inv, lp,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread,
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, dummy, uti); enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmaskSHlocalcurve, localmaskSHutili);
if (lp.showmaskSHmetinv == 1) { if (lp.showmaskSHmetinv == 1) {

View File

@ -798,6 +798,7 @@ enum ProcEventCode {
Evlocallabscalegr = 768, Evlocallabscalegr = 768,
EvlocallabLmaskshape = 769, EvlocallabLmaskshape = 769,
EvlocallabLmaskexpshape = 770, EvlocallabLmaskexpshape = 770,
EvlocallabLmaskSHshape = 771,
NUMOFEVENTS NUMOFEVENTS
}; };

View File

@ -2524,6 +2524,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
gammaskSH(1.0), gammaskSH(1.0),
slomaskSH(0.0), slomaskSH(0.0),
lapmaskSH(0.0), lapmaskSH(0.0),
LmaskSHcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0},
// Vibrance // Vibrance
expvibrance(false), expvibrance(false),
saturated(0), saturated(0),
@ -2808,6 +2809,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& gammaskSH == other.gammaskSH && gammaskSH == other.gammaskSH
&& slomaskSH == other.slomaskSH && slomaskSH == other.slomaskSH
&& lapmaskSH == other.lapmaskSH && lapmaskSH == other.lapmaskSH
&& LmaskSHcurve == other.LmaskSHcurve
// Vibrance // Vibrance
&& expvibrance == other.expvibrance && expvibrance == other.expvibrance
&& saturated == other.saturated && saturated == other.saturated
@ -4078,6 +4080,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskSH, "Locallab", "GammaskSH_" + std::to_string(i), spot.gammaskSH, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskSH, "Locallab", "GammaskSH_" + std::to_string(i), spot.gammaskSH, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskSH, "Locallab", "SlomaskSH_" + std::to_string(i), spot.slomaskSH, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskSH, "Locallab", "SlomaskSH_" + std::to_string(i), spot.slomaskSH, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskSH, "Locallab", "LapmaskSH_" + std::to_string(i), spot.lapmaskSH, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskSH, "Locallab", "LapmaskSH_" + std::to_string(i), spot.lapmaskSH, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LmaskSHcurve, "Locallab", "LmaskSHCurve_" + std::to_string(i), spot.LmaskSHcurve, keyFile);
// Vibrance // Vibrance
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expvibrance, "Locallab", "Expvibrance_" + std::to_string(i), spot.expvibrance, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expvibrance, "Locallab", "Expvibrance_" + std::to_string(i), spot.expvibrance, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).saturated, "Locallab", "Saturated_" + std::to_string(i), spot.saturated, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).saturated, "Locallab", "Saturated_" + std::to_string(i), spot.saturated, keyFile);
@ -5463,6 +5466,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "GammaskSH_" + std::to_string(i), pedited, spot.gammaskSH, spotEdited.gammaskSH); assignFromKeyfile(keyFile, "Locallab", "GammaskSH_" + std::to_string(i), pedited, spot.gammaskSH, spotEdited.gammaskSH);
assignFromKeyfile(keyFile, "Locallab", "SlomaskSH_" + std::to_string(i), pedited, spot.slomaskSH, spotEdited.slomaskSH); assignFromKeyfile(keyFile, "Locallab", "SlomaskSH_" + std::to_string(i), pedited, spot.slomaskSH, spotEdited.slomaskSH);
assignFromKeyfile(keyFile, "Locallab", "LapmaskSH_" + std::to_string(i), pedited, spot.lapmaskSH, spotEdited.lapmaskSH); assignFromKeyfile(keyFile, "Locallab", "LapmaskSH_" + std::to_string(i), pedited, spot.lapmaskSH, spotEdited.lapmaskSH);
assignFromKeyfile(keyFile, "Locallab", "LmaskSHCurve_" + std::to_string(i), pedited, spot.LmaskSHcurve, spotEdited.LmaskSHcurve);
// Vibrance // Vibrance
assignFromKeyfile(keyFile, "Locallab", "Expvibrance_" + std::to_string(i), pedited, spot.expvibrance, spotEdited.expvibrance); assignFromKeyfile(keyFile, "Locallab", "Expvibrance_" + std::to_string(i), pedited, spot.expvibrance, spotEdited.expvibrance);
assignFromKeyfile(keyFile, "Locallab", "Saturated_" + std::to_string(i), pedited, spot.saturated, spotEdited.saturated); assignFromKeyfile(keyFile, "Locallab", "Saturated_" + std::to_string(i), pedited, spot.saturated, spotEdited.saturated);

View File

@ -1073,6 +1073,7 @@ struct LocallabParams {
double gammaskSH; double gammaskSH;
double slomaskSH; double slomaskSH;
double lapmaskSH; double lapmaskSH;
std::vector<double> LmaskSHcurve;
// Vibrance // Vibrance
bool expvibrance; bool expvibrance;
int saturated; int saturated;

View File

@ -797,7 +797,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //Evlocallabstrengr LUMINANCECURVE, //Evlocallabstrengr
LUMINANCECURVE, //Evlocallabscalegr LUMINANCECURVE, //Evlocallabscalegr
LUMINANCECURVE, //EvlocallabLmaskshape LUMINANCECURVE, //EvlocallabLmaskshape
LUMINANCECURVE //EvlocallabLmaskexpshape LUMINANCECURVE, //EvlocallabLmaskexpshape
LUMINANCECURVE //EvlocallabLmaskSHshape
}; };
namespace rtengine namespace rtengine

View File

@ -1126,6 +1126,7 @@ private:
LUTf exlocalcurve(65536, 0); LUTf exlocalcurve(65536, 0);
LUTf lmasklocalcurve(65536, 0); LUTf lmasklocalcurve(65536, 0);
LUTf lmaskexplocalcurve(65536, 0); LUTf lmaskexplocalcurve(65536, 0);
LUTf lmaskSHlocalcurve(65536, 0);
// int maxspot = 1; // int maxspot = 1;
float** shbuffer = nullptr; float** shbuffer = nullptr;
@ -1150,6 +1151,7 @@ private:
bool lcmasutili = false; bool lcmasutili = false;
bool localmaskutili = false; bool localmaskutili = false;
bool localmaskexputili = false; bool localmaskexputili = false;
bool localmaskSHutili = false;
bool lcmasexputili = false; bool lcmasexputili = false;
bool lhmasexputili = false; bool lhmasexputili = false;
bool llmasexputili = false; bool llmasexputili = false;
@ -1200,6 +1202,7 @@ private:
CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve, 1); CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, 1); CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, 1); CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, 1);
//provisory //provisory
double ecomp = params.locallab.spots.at(sp).expcomp; double ecomp = params.locallab.spots.at(sp).expcomp;
double black = params.locallab.spots.at(sp).black; double black = params.locallab.spots.at(sp).black;
@ -1236,6 +1239,7 @@ private:
ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili, lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1255,6 +1259,7 @@ private:
hltonecurveloc.clear(); hltonecurveloc.clear();
lmasklocalcurve.clear(); lmasklocalcurve.clear();
lmaskexplocalcurve.clear(); lmaskexplocalcurve.clear();
lmaskSHlocalcurve.clear();
shtonecurveloc.clear(); shtonecurveloc.clear();
tonecurveloc.clear(); tonecurveloc.clear();
lightCurveloc.clear(); lightCurveloc.clear();

View File

@ -162,6 +162,7 @@ Locallab::Locallab():
mask2expCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), mask2expCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
//Shadows Highlight //Shadows Highlight
maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
mask2SHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
// Vibranceretinex // Vibranceretinex
curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))), curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))),
//Blur //Blur
@ -1099,6 +1100,21 @@ Locallab::Locallab():
maskSHCurveEditorG->curveListComplete(); maskSHCurveEditorG->curveListComplete();
mask2SHCurveEditorG->setCurveListener(this);
LmaskSHshape = static_cast<DiagonalCurveEditor*>(mask2SHCurveEditorG->addCurve(CT_Diagonal, "L(L)"));
LmaskSHshape->setResetCurve(DiagonalCurveType(defSpot.LmaskSHcurve.at(0)), defSpot.LmaskSHcurve);
if (showtooltip) {
LmaskSHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
}
std::vector<GradientMilestone> mLmaskSHshape;
mLmaskSHshape.push_back(GradientMilestone(0., 0., 0., 0.));
mLmaskSHshape.push_back(GradientMilestone(1., 1., 1., 1.));
LmaskSHshape->setBottomBarBgGradient(mLmaskSHshape);
LmaskSHshape->setLeftBarBgGradient(mLmaskSHshape);
mask2SHCurveEditorG->curveListComplete();
ToolParamBlock* const shadhighBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const shadhighBox = Gtk::manage(new ToolParamBlock());
shadhighBox->pack_start(*highlights); shadhighBox->pack_start(*highlights);
shadhighBox->pack_start(*h_tonalwidth); shadhighBox->pack_start(*h_tonalwidth);
@ -1121,6 +1137,7 @@ Locallab::Locallab():
maskSHBox->pack_start(*chromaskSH, Gtk::PACK_SHRINK, 0); maskSHBox->pack_start(*chromaskSH, Gtk::PACK_SHRINK, 0);
maskSHBox->pack_start(*gammaskSH, Gtk::PACK_SHRINK, 0); maskSHBox->pack_start(*gammaskSH, Gtk::PACK_SHRINK, 0);
maskSHBox->pack_start(*slomaskSH, Gtk::PACK_SHRINK, 0); maskSHBox->pack_start(*slomaskSH, Gtk::PACK_SHRINK, 0);
maskSHBox->pack_start(*mask2SHCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
expmasksh->add(*maskSHBox, false); expmasksh->add(*maskSHBox, false);
shadhighBox->pack_start(*expmasksh); shadhighBox->pack_start(*expmasksh);
@ -2249,6 +2266,7 @@ Locallab::~Locallab()
delete maskCurveEditorG; delete maskCurveEditorG;
delete mask2CurveEditorG; delete mask2CurveEditorG;
delete mask2expCurveEditorG; delete mask2expCurveEditorG;
delete mask2SHCurveEditorG;
delete curveEditorG; delete curveEditorG;
delete maskexpCurveEditorG; delete maskexpCurveEditorG;
delete maskSHCurveEditorG; delete maskSHCurveEditorG;
@ -3246,6 +3264,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pp->locallab.spots.at(pp->locallab.selspot).gammaskSH = gammaskSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammaskSH = gammaskSH->getValue();
pp->locallab.spots.at(pp->locallab.selspot).slomaskSH = slomaskSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskSH = slomaskSH->getValue();
pp->locallab.spots.at(pp->locallab.selspot).lapmaskSH = lapmaskSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskSH = lapmaskSH->getValue();
pp->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = LmaskSHshape->getCurve();
// Vibrance // Vibrance
pp->locallab.spots.at(pp->locallab.selspot).expvibrance = expvibrance->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).expvibrance = expvibrance->getEnabled();
pp->locallab.spots.at(pp->locallab.selspot).saturated = saturated->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).saturated = saturated->getIntValue();
@ -3576,6 +3595,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pe->locallab.spots.at(pp->locallab.selspot).gammaskSH = pe->locallab.spots.at(pp->locallab.selspot).gammaskSH || gammaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammaskSH = pe->locallab.spots.at(pp->locallab.selspot).gammaskSH || gammaskSH->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).slomaskSH = pe->locallab.spots.at(pp->locallab.selspot).slomaskSH || slomaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskSH = pe->locallab.spots.at(pp->locallab.selspot).slomaskSH || slomaskSH->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).lapmaskSH = pe->locallab.spots.at(pp->locallab.selspot).lapmaskSH || lapmaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskSH = pe->locallab.spots.at(pp->locallab.selspot).lapmaskSH || lapmaskSH->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = pe->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve || !LmaskSHshape->isUnChanged();
// Vibrance // Vibrance
pe->locallab.spots.at(pp->locallab.selspot).expvibrance = pe->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).expvibrance = pe->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).saturated = pe->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).saturated = pe->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState();
@ -3864,6 +3884,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).gammaskSH = pedited->locallab.spots.at(pp->locallab.selspot).gammaskSH || gammaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammaskSH = pedited->locallab.spots.at(pp->locallab.selspot).gammaskSH || gammaskSH->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).slomaskSH = pedited->locallab.spots.at(pp->locallab.selspot).slomaskSH || slomaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskSH = pedited->locallab.spots.at(pp->locallab.selspot).slomaskSH || slomaskSH->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).lapmaskSH = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskSH || lapmaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskSH = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskSH || lapmaskSH->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = pedited->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve || !LmaskSHshape->isUnChanged();
// Vibrance // Vibrance
pedited->locallab.spots.at(pp->locallab.selspot).expvibrance = pedited->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).expvibrance = pedited->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).saturated = pedited->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).saturated = pedited->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState();
@ -4240,6 +4261,13 @@ void Locallab::curveChanged(CurveEditor* ce)
listener->panelChanged(EvlocallabHHmaskSHshape, M("HISTORY_CUSTOMCURVE")); listener->panelChanged(EvlocallabHHmaskSHshape, M("HISTORY_CUSTOMCURVE"));
} }
} }
if (ce == LmaskSHshape) {
if (listener) {
listener->panelChanged(EvlocallabLmaskSHshape, M("HISTORY_CUSTOMCURVE"));
}
}
} }
//CBDL //CBDL
@ -7966,6 +7994,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
gammaskSH->setValue(pp->locallab.spots.at(index).gammaskSH); gammaskSH->setValue(pp->locallab.spots.at(index).gammaskSH);
slomaskSH->setValue(pp->locallab.spots.at(index).slomaskSH); slomaskSH->setValue(pp->locallab.spots.at(index).slomaskSH);
lapmaskSH->setValue(pp->locallab.spots.at(index).lapmaskSH); lapmaskSH->setValue(pp->locallab.spots.at(index).lapmaskSH);
LmaskSHshape->setCurve(pp->locallab.spots.at(index).LmaskSHcurve);
// Vibrance // Vibrance
expvibrance->setEnabled(pp->locallab.spots.at(index).expvibrance); expvibrance->setEnabled(pp->locallab.spots.at(index).expvibrance);
@ -8328,6 +8357,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
gammaskSH->setEditedState(spotState->gammaskSH ? Edited : UnEdited); gammaskSH->setEditedState(spotState->gammaskSH ? Edited : UnEdited);
slomaskSH->setEditedState(spotState->slomaskSH ? Edited : UnEdited); slomaskSH->setEditedState(spotState->slomaskSH ? Edited : UnEdited);
lapmaskSH->setEditedState(spotState->lapmaskSH ? Edited : UnEdited); lapmaskSH->setEditedState(spotState->lapmaskSH ? Edited : UnEdited);
LmaskSHshape->setUnChanged(!spotState->LmaskSHcurve);
// Vibrance // Vibrance
expvibrance->set_inconsistent(!spotState->expvibrance); expvibrance->set_inconsistent(!spotState->expvibrance);

View File

@ -94,6 +94,8 @@ private:
FlatCurveEditor* HHmaskexpshape; FlatCurveEditor* HHmaskexpshape;
//Shadows Highlight //Shadows Highlight
CurveEditorGroup* const maskSHCurveEditorG; CurveEditorGroup* const maskSHCurveEditorG;
CurveEditorGroup* const mask2SHCurveEditorG;
DiagonalCurveEditor* LmaskSHshape;
FlatCurveEditor* CCmaskSHshape; FlatCurveEditor* CCmaskSHshape;
FlatCurveEditor* LLmaskSHshape; FlatCurveEditor* LLmaskSHshape;
FlatCurveEditor* HHmaskSHshape; FlatCurveEditor* HHmaskSHshape;

View File

@ -1065,6 +1065,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).gammaskSH = locallab.spots.at(j).gammaskSH && pSpot.gammaskSH == otherSpot.gammaskSH; locallab.spots.at(j).gammaskSH = locallab.spots.at(j).gammaskSH && pSpot.gammaskSH == otherSpot.gammaskSH;
locallab.spots.at(j).slomaskSH = locallab.spots.at(j).slomaskSH && pSpot.slomaskSH == otherSpot.slomaskSH; locallab.spots.at(j).slomaskSH = locallab.spots.at(j).slomaskSH && pSpot.slomaskSH == otherSpot.slomaskSH;
locallab.spots.at(j).lapmaskSH = locallab.spots.at(j).lapmaskSH && pSpot.lapmaskSH == otherSpot.lapmaskSH; locallab.spots.at(j).lapmaskSH = locallab.spots.at(j).lapmaskSH && pSpot.lapmaskSH == otherSpot.lapmaskSH;
locallab.spots.at(j).LmaskSHcurve = locallab.spots.at(j).LmaskSHcurve && pSpot.LmaskSHcurve == otherSpot.LmaskSHcurve;
// Vibrance // Vibrance
locallab.spots.at(j).expvibrance = locallab.spots.at(j).expvibrance && pSpot.expvibrance == otherSpot.expvibrance; locallab.spots.at(j).expvibrance = locallab.spots.at(j).expvibrance && pSpot.expvibrance == otherSpot.expvibrance;
locallab.spots.at(j).saturated = locallab.spots.at(j).saturated && pSpot.saturated == otherSpot.saturated; locallab.spots.at(j).saturated = locallab.spots.at(j).saturated && pSpot.saturated == otherSpot.saturated;
@ -3140,6 +3141,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).lapmaskSH = mods.locallab.spots.at(i).lapmaskSH; toEdit.locallab.spots.at(i).lapmaskSH = mods.locallab.spots.at(i).lapmaskSH;
} }
if (locallab.spots.at(i).LmaskSHcurve) {
toEdit.locallab.spots.at(i).LmaskSHcurve = mods.locallab.spots.at(i).LmaskSHcurve;
}
// Vibrance // Vibrance
if (locallab.spots.at(i).expvibrance) { if (locallab.spots.at(i).expvibrance) {
toEdit.locallab.spots.at(i).expvibrance = mods.locallab.spots.at(i).expvibrance; toEdit.locallab.spots.at(i).expvibrance = mods.locallab.spots.at(i).expvibrance;
@ -4842,6 +4847,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
gammaskSH(v), gammaskSH(v),
slomaskSH(v), slomaskSH(v),
lapmaskSH(v), lapmaskSH(v),
LmaskSHcurve(v),
// Vibrance // Vibrance
expvibrance(v), expvibrance(v),
saturated(v), saturated(v),
@ -5123,6 +5129,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
gammaskSH = v; gammaskSH = v;
slomaskSH = v; slomaskSH = v;
lapmaskSH = v; lapmaskSH = v;
LmaskSHcurve = v;
// Vibrance // Vibrance
expvibrance = v; expvibrance = v;
saturated = v; saturated = v;

View File

@ -483,6 +483,7 @@ public:
bool gammaskSH; bool gammaskSH;
bool slomaskSH; bool slomaskSH;
bool lapmaskSH; bool lapmaskSH;
bool LmaskSHcurve;
// Vibrance // Vibrance
bool expvibrance; bool expvibrance;
bool saturated; bool saturated;