Add contrast curve to mask 1 Blur and Denoise

This commit is contained in:
Desmis 2019-10-15 17:59:27 +02:00
parent df007c66c9
commit 6468db2bd3
15 changed files with 85 additions and 1 deletions

View File

@ -1013,6 +1013,7 @@ HISTORY_MSG_772;Local - SH Mask contrast curve
HISTORY_MSG_773;Local - TM Mask contrast curve
HISTORY_MSG_774;Local - Reti Mask contrast curve
HISTORY_MSG_775;Local - CBDL Mask contrast curve
HISTORY_MSG_776;Local - Blur Denoise Mask contrast curve
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction

View File

@ -892,12 +892,14 @@ void Crop::update(int todo)
bool localmasktmutili = parent->localmasktmutili;
bool localmaskretiutili = parent->localmaskretiutili;
bool localmaskcbutili = parent->localmaskcbutili;
bool localmaskblutili = parent->localmaskblutili;
LUTf lmasklocalcurve2(65536, 0);
LUTf lmaskexplocalcurve2(65536, 0);
LUTf lmaskSHlocalcurve2(65536, 0);
LUTf lmasktmlocalcurve2(65536, 0);
LUTf lmaskretilocalcurve2(65536, 0);
LUTf lmaskcblocalcurve2(65536, 0);
LUTf lmaskbllocalcurve2(65536, 0);
LUTf hltonecurveloc2(65536, 0); //65536
LUTf shtonecurveloc2(65536, 0);
LUTf tonecurveloc2(65536, 0);
@ -1009,6 +1011,8 @@ void Crop::update(int todo)
CurveFactory::curvemaskLocal(localmaskretiutili, params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve2, sca);
localmaskcbutili = false;
CurveFactory::curvemaskLocal(localmaskcbutili, params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve2, sca);
localmaskblutili = false;
CurveFactory::curvemaskLocal(localmaskblutili, params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve2, sca);
double ecomp = params.locallab.spots.at(sp).expcomp;
@ -1053,6 +1057,7 @@ void Crop::update(int todo)
lmasktmlocalcurve2, localmasktmutili,
lmaskretilocalcurve2, localmaskretiutili,
lmaskcblocalcurve2, localmaskcbutili,
lmaskbllocalcurve2, localmaskblutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1076,6 +1081,7 @@ void Crop::update(int todo)
lmasktmlocalcurve2, localmasktmutili,
lmaskretilocalcurve2, localmaskretiutili,
lmaskcblocalcurve2, localmaskcbutili,
lmaskbllocalcurve2, localmaskblutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1097,6 +1103,7 @@ void Crop::update(int todo)
lmasktmlocalcurve2.clear();
lmaskretilocalcurve2.clear();
lmaskcblocalcurve2.clear();
lmaskbllocalcurve2.clear();
hltonecurveloc2.clear();
shtonecurveloc2.clear();
tonecurveloc2.clear();

View File

@ -177,6 +177,7 @@ ImProcCoordinator::ImProcCoordinator() :
lmasktmlocalcurve(65536, 0),
lmaskretilocalcurve(65536, 0),
lmaskcblocalcurve(65536, 0),
lmaskbllocalcurve(65536, 0),
locallutili(false),
localcutili(false),
localexutili(false),
@ -189,6 +190,7 @@ ImProcCoordinator::ImProcCoordinator() :
localmasktmutili(false),
localmaskretiutili(false),
localmaskcbutili(false),
localmaskblutili(false),
lcmasexputili(false),
lhmasexputili(false),
llmasexputili(false),
@ -935,6 +937,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
localmasktmutili = false;
localmaskretiutili = false;
localmaskcbutili = false;
localmaskblutili = false;
lcmasSHutili = false;
lhmasSHutili = false;
llmasSHutili = false;
@ -988,6 +991,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
CurveFactory::curvemaskLocal(localmasktmutili, params->locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskretiutili, params->locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskcbutili, params->locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskblutili, params->locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve, 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;
@ -1047,6 +1051,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasktmlocalcurve, localmasktmutili,
lmaskretilocalcurve, localmaskretiutili,
lmaskcblocalcurve, localmaskcbutili,
lmaskbllocalcurve, localmaskblutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1069,6 +1074,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasktmlocalcurve, localmasktmutili,
lmaskretilocalcurve, localmaskretiutili,
lmaskcblocalcurve, localmaskcbutili,
lmaskbllocalcurve, localmaskblutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1097,6 +1103,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasktmlocalcurve.clear();
lmaskretilocalcurve.clear();
lmaskcblocalcurve.clear();
lmaskbllocalcurve.clear();
hltonecurveloc.clear();
shtonecurveloc.clear();
tonecurveloc.clear();

View File

@ -239,6 +239,7 @@ protected:
LUTf lmasktmlocalcurve;
LUTf lmaskretilocalcurve;
LUTf lmaskcblocalcurve;
LUTf lmaskbllocalcurve;
// LUTu lhist16loc;
LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve;
@ -280,6 +281,7 @@ protected:
bool localmasktmutili;
bool localmaskretiutili;
bool localmaskcbutili;
bool localmaskblutili;
bool lcmasexputili;
bool lhmasexputili;
bool llmasexputili;

View File

@ -231,6 +231,7 @@ public:
LUTf & lmasktmlocalcurve, bool & localmasktmutili,
LUTf & lmaskretilocalcurve, bool & localmaskretiutili,
LUTf & lmaskcblocalcurve, bool & localmaskcbutili,
LUTf & lmaskbllocalcurve, bool & localmaskblutili,
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 & locccmasSHCurve, bool &lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool &llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili,

View File

@ -6718,6 +6718,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
LUTf & lmasktmlocalcurve, bool & localmasktmutili,
LUTf & lmaskretilocalcurve, bool & localmaskretiutili,
LUTf & lmaskcblocalcurve, bool & localmaskcbutili,
LUTf & lmaskbllocalcurve, bool & localmaskblutili,
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 & locccmasSHCurve, bool & lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool & llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili,
@ -6973,6 +6974,17 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
}
if (lmaskbllocalcurve && localmaskblutili) {
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int ir = 0; ir < GH; ir++)
for (int jr = 0; jr < GW; jr++) {
bufmaskblurbl->L[ir][jr] = 0.5f * lmaskbllocalcurve[2.f * bufmaskblurbl->L[ir][jr]];
}
}
float lap = params->locallab.spots.at(sp).lapmaskbl;
bool pde = params->locallab.spots.at(sp).laplac;

View File

@ -802,6 +802,7 @@ enum ProcEventCode {
EvlocallabLmasktmshape = 772,
EvlocallabLmaskretishape = 773,
EvlocallabLmaskcbshape = 774,
EvlocallabLmaskblshape = 775,
NUMOFEVENTS
};

View File

@ -2567,6 +2567,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
gammaskbl(1.0),
slomaskbl(0.0),
lapmaskbl(0.0),
Lmaskblcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0},
// Tone Mapping
exptonemap(false),
stren(0.5),
@ -2855,6 +2856,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& gammaskbl == other.gammaskbl
&& slomaskbl == other.slomaskbl
&& lapmaskbl == other.lapmaskbl
&& Lmaskblcurve == other.Lmaskblcurve
// Tone Mapping
&& exptonemap == other.exptonemap
&& stren == other.stren
@ -4129,6 +4131,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskbl, "Locallab", "Gammaskbl_" + std::to_string(i), spot.gammaskbl, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskbl, "Locallab", "Slomaskbl_" + std::to_string(i), spot.slomaskbl, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskbl, "Locallab", "Lapmaskbl_" + std::to_string(i), spot.lapmaskbl, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).Lmaskblcurve, "Locallab", "LmaskblCurve_" + std::to_string(i), spot.Lmaskblcurve, keyFile);
// Tone Mapping
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).exptonemap, "Locallab", "Exptonemap_" + std::to_string(i), spot.exptonemap, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).stren, "Locallab", "Stren_" + std::to_string(i), spot.stren, keyFile);
@ -5530,6 +5533,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Gammaskbl_" + std::to_string(i), pedited, spot.gammaskbl, spotEdited.gammaskbl);
assignFromKeyfile(keyFile, "Locallab", "Slomaskbl_" + std::to_string(i), pedited, spot.slomaskbl, spotEdited.slomaskbl);
assignFromKeyfile(keyFile, "Locallab", "Lapmaskbl_" + std::to_string(i), pedited, spot.lapmaskbl, spotEdited.lapmaskbl);
assignFromKeyfile(keyFile, "Locallab", "LmaskblCurve_" + std::to_string(i), pedited, spot.Lmaskblcurve, spotEdited.Lmaskblcurve);
// Tone Mapping
assignFromKeyfile(keyFile, "Locallab", "Exptonemap_" + std::to_string(i), pedited, spot.exptonemap, spotEdited.exptonemap);
assignFromKeyfile(keyFile, "Locallab", "Stren_" + std::to_string(i), pedited, spot.stren, spotEdited.stren);

View File

@ -1116,6 +1116,7 @@ struct LocallabParams {
double gammaskbl;
double slomaskbl;
double lapmaskbl;
std::vector<double> Lmaskblcurve;
// Tone Mapping
bool exptonemap;
double stren;

View File

@ -801,7 +801,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //EvlocallabLmaskSHshape
LUMINANCECURVE, //EvlocallabLmasktmshape
LUMINANCECURVE, //EvlocallabLmaskretishape
LUMINANCECURVE //EvlocallabLmaskcbshape
LUMINANCECURVE, //EvlocallabLmaskcbshape
LUMINANCECURVE //EvlocallabLmaskblshape
};
namespace rtengine

View File

@ -1130,6 +1130,7 @@ private:
LUTf lmasktmlocalcurve(65536, 0);
LUTf lmaskretilocalcurve(65536, 0);
LUTf lmaskcblocalcurve(65536, 0);
LUTf lmaskbllocalcurve(65536, 0);
// int maxspot = 1;
float** shbuffer = nullptr;
@ -1158,6 +1159,7 @@ private:
bool localmasktmutili = false;
bool localmaskretiutili = false;
bool localmaskcbutili = false;
bool localmaskblutili = false;
bool lcmasexputili = false;
bool lhmasexputili = false;
bool llmasexputili = false;
@ -1212,6 +1214,7 @@ private:
CurveFactory::curvemaskLocal(localmasktmutili, params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskretiutili, params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskcbutili, params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskblutili, params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve, 1);
//provisory
double ecomp = params.locallab.spots.at(sp).expcomp;
double black = params.locallab.spots.at(sp).black;
@ -1252,6 +1255,7 @@ private:
lmasktmlocalcurve, localmasktmutili,
lmaskretilocalcurve, localmaskretiutili,
lmaskcblocalcurve, localmaskcbutili,
lmaskbllocalcurve, localmaskblutili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1275,6 +1279,7 @@ private:
lmasktmlocalcurve.clear();
lmaskretilocalcurve.clear();
lmaskcblocalcurve.clear();
lmaskbllocalcurve.clear();
shtonecurveloc.clear();
tonecurveloc.clear();
lightCurveloc.clear();

View File

@ -167,6 +167,7 @@ Locallab::Locallab():
curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))),
//Blur
maskblCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
mask2blCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
//TM
masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
@ -2123,6 +2124,24 @@ Locallab::Locallab():
HHmaskblshape->setBottomBarColorProvider(this, 6);
maskblCurveEditorG->curveListComplete();
mask2blCurveEditorG->setCurveListener(this);
Lmaskblshape = static_cast<DiagonalCurveEditor*>(mask2blCurveEditorG->addCurve(CT_Diagonal, "L(L)"));
Lmaskblshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskblcurve.at(0)), defSpot.Lmaskblcurve);
if (showtooltip) {
Lmaskblshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
}
std::vector<GradientMilestone> mLmaskblshape;
mLmaskblshape.push_back(GradientMilestone(0., 0., 0., 0.));
mLmaskblshape.push_back(GradientMilestone(1., 1., 1., 1.));
Lmaskblshape->setBottomBarBgGradient(mLmaskblshape);
Lmaskblshape->setLeftBarBgGradient(mLmaskblshape);
mask2blCurveEditorG->curveListComplete();
enablMaskConn = enablMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enablMaskChanged));
showmaskblMethod->append(M("TP_LOCALLAB_SHOWMNONE"));
@ -2188,6 +2207,7 @@ Locallab::Locallab():
maskblBox->pack_start(*chromaskbl, Gtk::PACK_SHRINK, 0);
maskblBox->pack_start(*gammaskbl, Gtk::PACK_SHRINK, 0);
maskblBox->pack_start(*slomaskbl, Gtk::PACK_SHRINK, 0);
maskblBox->pack_start(*mask2blCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
expmaskbl->add(*maskblBox, false);
panel->pack_start(*expmaskbl);
@ -2331,6 +2351,7 @@ Locallab::~Locallab()
delete LocalcurveEditorwav;
delete masktmCurveEditorG;
delete maskblCurveEditorG;
delete mask2blCurveEditorG;
delete maskretiCurveEditorG;
delete mask2retiCurveEditorG;
delete maskcbCurveEditorG;
@ -3393,6 +3414,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pp->locallab.spots.at(pp->locallab.selspot).slomaskbl = slomaskbl->getValue();
pp->locallab.spots.at(pp->locallab.selspot).lapmaskbl = lapmaskbl->getValue();
pp->locallab.spots.at(pp->locallab.selspot).fftwbl = fftwbl->get_active();
pp->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = Lmaskblshape->getCurve();
// Tone Mapping
pp->locallab.spots.at(pp->locallab.selspot).exptonemap = exptonemap->getEnabled();
@ -3698,6 +3720,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pe->locallab.spots.at(pp->locallab.selspot).slomaskbl = pe->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).fftwbl = pe->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve || !Lmaskblshape->isUnChanged();
// Tone Mapping
pe->locallab.spots.at(pp->locallab.selspot).exptonemap = pe->locallab.spots.at(pp->locallab.selspot).activlum || !exptonemap->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).stren = pe->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState();
@ -3990,6 +4013,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl = pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).fftwbl = pedited->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve || !Lmaskblshape->isUnChanged();
// Tone Mapping
pedited->locallab.spots.at(pp->locallab.selspot).exptonemap = pedited->locallab.spots.at(pp->locallab.selspot).exptonemap || !exptonemap->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).stren = pedited->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState();
@ -4395,6 +4419,12 @@ void Locallab::curveChanged(CurveEditor* ce)
}
}
if (ce == Lmaskblshape) {
if (listener) {
listener->panelChanged(EvlocallabLmaskblshape, M("HISTORY_CUSTOMCURVE"));
}
}
}
// TM
@ -8154,6 +8184,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
slomaskbl->setValue(pp->locallab.spots.at(index).slomaskbl);
lapmaskbl->setValue(pp->locallab.spots.at(index).lapmaskbl);
fftwbl->set_active(pp->locallab.spots.at(index).fftwbl);
Lmaskblshape->setCurve(pp->locallab.spots.at(index).Lmaskblcurve);
// Tone Mapping
exptonemap->setEnabled(pp->locallab.spots.at(index).exptonemap);
@ -8504,6 +8535,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
slomaskbl->setEditedState(spotState->slomaskbl ? Edited : UnEdited);
lapmaskbl->setEditedState(spotState->lapmaskbl ? Edited : UnEdited);
fftwbl->set_inconsistent(multiImage && !spotState->fftwbl);
Lmaskblshape->setUnChanged(!spotState->Lmaskblcurve);
// Tone Mapping
exptonemap->set_inconsistent(!spotState->exptonemap);

View File

@ -104,6 +104,8 @@ private:
DiagonalCurveEditor* skinTonesCurve;
//Blur and noise
CurveEditorGroup* const maskblCurveEditorG;
CurveEditorGroup* const mask2blCurveEditorG;
DiagonalCurveEditor* Lmaskblshape;
FlatCurveEditor* CCmaskblshape;
FlatCurveEditor* LLmaskblshape;
FlatCurveEditor* HHmaskblshape;

View File

@ -1107,6 +1107,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).slomaskbl = locallab.spots.at(j).slomaskbl && pSpot.slomaskbl == otherSpot.slomaskbl;
locallab.spots.at(j).lapmaskbl = locallab.spots.at(j).lapmaskbl && pSpot.lapmaskbl == otherSpot.lapmaskbl;
locallab.spots.at(j).fftwbl = locallab.spots.at(j).fftwbl && pSpot.fftwbl == otherSpot.fftwbl;
locallab.spots.at(j).Lmaskblcurve = locallab.spots.at(j).Lmaskblcurve && pSpot.Lmaskblcurve == otherSpot.Lmaskblcurve;
// Tone Mapping
locallab.spots.at(j).exptonemap = locallab.spots.at(j).exptonemap && pSpot.exptonemap == otherSpot.exptonemap;
locallab.spots.at(j).stren = locallab.spots.at(j).stren && pSpot.stren == otherSpot.stren;
@ -3307,6 +3308,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).lapmaskbl = mods.locallab.spots.at(i).lapmaskbl;
}
if (locallab.spots.at(i).Lmaskblcurve) {
toEdit.locallab.spots.at(i).Lmaskblcurve = mods.locallab.spots.at(i).Lmaskblcurve;
}
// Tone Mapping
if (locallab.spots.at(i).exptonemap) {
toEdit.locallab.spots.at(i).exptonemap = mods.locallab.spots.at(i).exptonemap;
@ -4905,6 +4910,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
gammaskbl(v),
slomaskbl(v),
lapmaskbl(v),
Lmaskblcurve(v),
// Tone Mapping
exptonemap(v),
stren(v),
@ -5190,6 +5196,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
gammaskbl = v;
slomaskbl = v;
lapmaskbl = v;
Lmaskblcurve = v;
// Tone Mapping
exptonemap = v;
stren = v;

View File

@ -526,6 +526,7 @@ public:
bool gammaskbl;
bool slomaskbl;
bool lapmaskbl;
bool Lmaskblcurve;
// Tone Mapping
bool exptonemap;
bool stren;