From b0f35cfa2166c9e3cd91ece6e6e450479ce04c9b Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 3 Oct 2019 08:34:18 +0200 Subject: [PATCH] Tone mapping mask after --- rtdata/languages/default | 2 ++ rtengine/iplocallab.cc | 59 +++++++++++++++++++++++++--------------- rtengine/procevents.h | 1 + rtengine/procparams.cc | 4 +++ rtengine/procparams.h | 1 + rtengine/refreshmap.cc | 3 +- rtgui/locallab.cc | 34 +++++++++++++++++++++++ rtgui/locallab.h | 3 ++ rtgui/paramsedited.cc | 7 +++++ rtgui/paramsedited.h | 1 + 10 files changed, 92 insertions(+), 23 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 7c99dbd88..f80329eaa 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -992,6 +992,7 @@ HISTORY_MSG_751;Local - Reti Dehaze luminance HISTORY_MSG_752;Local - Reti Offset HISTORY_MSG_753;Local - Reti Transmission map HISTORY_MSG_754;Local - Reti Clip +HISTORY_MSG_755;Local - TM use tm mask HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2233,6 +2234,7 @@ TP_LOCALLAB_SHOWDCT;Show process Fourier TP_LOCALLAB_SHOWMASKSOFT_TOOLTIP;Show process Fourier:\nShows the different stages of the process.\nLaplace - builds the second derivative according to the threshold (first step).\nFourier -shows the transformed Laplacian with DCT.\nPoisson - show solution of Poisson DCE.\nNormalize - show result whithout normalization luminance. TP_LOCALLAB_SHOWNORMAL;Normalize luminance (no) TP_LOCALLAB_TM;Tone Mapping +TP_LOCALLAB_ENABLE_AFTER_MASK;Use Tone Mapping TP_LOCALLAB_STR;Strength TP_LOCALLAB_LOGLIN;Logarithm mode TP_LOCALLAB_STRRETI_TOOLTIP;if Strength Retinex < 0.2 only Dehaze is enabled.\nif Strength Retinex >= 0.1 Dehaze is in luminance mode. diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 351d48a80..726350748 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -7468,14 +7468,19 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o JaggedArray bufchro(bfw, bfh); std::unique_ptr bufgb(new LabImage(bfw, bfh)); std::unique_ptr tmp1(new LabImage(bfw, bfh)); + std::unique_ptr bufgbm(new LabImage(bfw, bfh)); + std::unique_ptr tmp1m(new LabImage(bfw, bfh)); std::unique_ptr bufmaskorigtm; std::unique_ptr bufmaskblurtm; std::unique_ptr originalmasktm; + LabImage *orimask = nullptr; + orimask = new LabImage(original->W, original->H); - if (lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 3 || lp.showmasktmmet == 4) { + if (lp.showmasktmmet == 0 || lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 3 || lp.showmasktmmet == 4) { bufmaskorigtm.reset(new LabImage(bfw, bfh)); bufmaskblurtm.reset(new LabImage(bfw, bfh)); originalmasktm.reset(new LabImage(bfw, bfh)); + orimask->CopyFrom(original); } int itera = 0; @@ -7493,6 +7498,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufgb->L[y - ystart][x - xstart] = original->L[y][x]; bufgb->a[y - ystart][x - xstart] = original->a[y][x]; bufgb->b[y - ystart][x - xstart] = original->b[y][x]; + bufgbm->L[y - ystart][x - xstart] = original->L[y][x]; + bufgbm->a[y - ystart][x - xstart] = original->a[y][x]; + bufgbm->b[y - ystart][x - xstart] = original->b[y][x]; } } @@ -7533,36 +7541,43 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float gamma = lp.gammatm; float slope = lp.slomatm; float blendm = lp.blendmatm; - maskcalccol(bfw, bfh, xstart, ystart, sk, cx, cy, bufgb.get(), bufmaskorigtm.get(), originalmasktm.get(), original, transformed, inv, lp, - locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, gamma, slope, blendm); - if (lp.showmasktmmet == 3) { - showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufgb.get(), transformed, bufmaskorigtm.get(), 0); + if (!params->locallab.spots.at(sp).enatmMaskaft) { + maskcalccol(bfw, bfh, xstart, ystart, sk, cx, cy, bufgbm.get(), bufmaskorigtm.get(), originalmasktm.get(), original, transformed, inv, lp, + locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, multiThread, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, gamma, slope, blendm); - return; + if (lp.showmasktmmet == 3) { + showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufgbm.get(), transformed, bufmaskorigtm.get(), 0); + + return; + } } - - if (lp.showmasktmmet == 0 || lp.showmasktmmet == 1 || lp.showmasktmmet == 2 || lp.showmasktmmet == 4 || lp.enatmMask) { - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int y = 0; y < bfh ; y++) { - for (int x = 0; x < bfw; x++) { - bufgb->L[y][x] = original->L[y + ystart][x + xstart]; - bufgb->a[y][x] = original->a[y + ystart][x + xstart]; - bufgb->b[y][x] = original->b[y + ystart][x + xstart]; - } - } - + if (lp.showmasktmmet == 0 || lp.showmasktmmet == 1 || lp.showmasktmmet == 2 || lp.showmasktmmet == 4 || lp.showmasktmmet == 3 || lp.enatmMask) { ImProcFunctions::EPDToneMaplocal(sp, bufgb.get(), tmp1.get(), itera, sk);//iterate to 0 calculate with edgstopping, improve result, call=1 dcrop we can put iterate to 5 + tmp1m->CopyFrom(tmp1.get()); + + if (params->locallab.spots.at(sp).enatmMaskaft) { + + maskcalccol(bfw, bfh, xstart, ystart, sk, cx, cy, tmp1m.get(), bufmaskorigtm.get(), originalmasktm.get(), orimask, transformed, inv, lp, + locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, multiThread, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, gamma, slope, blendm); + + if (lp.showmasktmmet == 3) { + showmask(lp, xstart, ystart, cx, cy, bfw, bfh, tmp1m.get(), transformed, bufmaskorigtm.get(), 0); + + return; + } + original->CopyFrom(orimask); + } + + delete orimask; + float minL = tmp1->L[0][0] - bufgb->L[0][0]; float maxL = minL; float minC = sqrt(SQR(tmp1->a[0][0]) + SQR(tmp1->b[0][0])) - sqrt(SQR(bufgb->a[0][0]) + SQR(bufgb->b[0][0])); diff --git a/rtengine/procevents.h b/rtengine/procevents.h index b85ea063f..8463001a3 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -781,6 +781,7 @@ enum ProcEventCode { Evlocallaboffs = 751, EvlocallabCTtransCurve = 752, Evlocallabcliptm = 753, + EvLocallabEnatmMaskaft = 754, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 90160b4f8..57925349c 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2570,6 +2570,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : LLmasktmcurve{(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}, HHmasktmcurve{(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}, enatmMask(false), + enatmMaskaft(false), blendmasktm(0), radmasktm(10.0), chromasktm(0.0), @@ -2837,6 +2838,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && LLmasktmcurve == other.LLmasktmcurve && HHmasktmcurve == other.HHmasktmcurve && enatmMask == other.enatmMask + && enatmMaskaft == other.enatmMaskaft && blendmasktm == other.blendmasktm && radmasktm == other.radmasktm && chromasktm == other.chromasktm @@ -4090,6 +4092,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmasktmcurve, "Locallab", "LLmasktmCurve_" + std::to_string(i), spot.LLmasktmcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmasktmcurve, "Locallab", "HHmasktmCurve_" + std::to_string(i), spot.HHmasktmcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).enatmMask, "Locallab", "EnatmMask_" + std::to_string(i), spot.enatmMask, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).enatmMaskaft, "Locallab", "EnatmMaskaft_" + std::to_string(i), spot.enatmMaskaft, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmasktm, "Locallab", "Blendmasktm_" + std::to_string(i), spot.blendmasktm, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).radmasktm, "Locallab", "Radmasktm_" + std::to_string(i), spot.radmasktm, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromasktm, "Locallab", "Chromasktm_" + std::to_string(i), spot.chromasktm, keyFile); @@ -5470,6 +5473,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "LLmasktmCurve_" + std::to_string(i), pedited, spot.LLmasktmcurve, spotEdited.LLmasktmcurve); assignFromKeyfile(keyFile, "Locallab", "HHmasktmCurve_" + std::to_string(i), pedited, spot.HHmasktmcurve, spotEdited.HHmasktmcurve); assignFromKeyfile(keyFile, "Locallab", "EnatmMask_" + std::to_string(i), pedited, spot.enatmMask, spotEdited.enatmMask); + assignFromKeyfile(keyFile, "Locallab", "EnatmMaskaft_" + std::to_string(i), pedited, spot.enatmMaskaft, spotEdited.enatmMaskaft); assignFromKeyfile(keyFile, "Locallab", "Blendmasktm_" + std::to_string(i), pedited, spot.blendmasktm, spotEdited.blendmasktm); assignFromKeyfile(keyFile, "Locallab", "Radmasktm_" + std::to_string(i), pedited, spot.radmasktm, spotEdited.radmasktm); assignFromKeyfile(keyFile, "Locallab", "Chromasktm_" + std::to_string(i), pedited, spot.chromasktm, spotEdited.chromasktm); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 9969f2a28..f6fe06ee0 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1119,6 +1119,7 @@ struct LocallabParams { std::vector LLmasktmcurve; std::vector HHmasktmcurve; bool enatmMask; + bool enatmMaskaft; int blendmasktm; double radmasktm; double chromasktm; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index bb4950574..4d14b078d 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -780,7 +780,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // Evlocallablumonly LUMINANCECURVE, // Evlocallaboffs LUMINANCECURVE, //EvlocallabCTtransCurve - LUMINANCECURVE //Evlocallabcliptm + LUMINANCECURVE, //Evlocallabcliptm + LUMINANCECURVE //Evlocallabenatmmaskaft }; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 8ed255b46..8b7f8ed31 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -353,6 +353,7 @@ Locallab::Locallab(): //TM equiltm(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))), enatmMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), + enatmMaskaft(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_AFTER_MASK")))), // Retinex equilret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))), inversret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), @@ -1242,6 +1243,7 @@ Locallab::Locallab(): masktmCurveEditorG->curveListComplete(); enatmMaskConn = enatmMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enatmMaskChanged)); + enatmMaskaftConn = enatmMaskaft->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enatmMaskaftChanged)); showmasktmMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmasktmMethod->append(M("TP_LOCALLAB_SHOWMODIF")); @@ -1269,6 +1271,7 @@ Locallab::Locallab(): ToolParamBlock* const masktmBox = Gtk::manage(new ToolParamBlock()); masktmBox->pack_start(*showmasktmMethod, Gtk::PACK_SHRINK, 4); masktmBox->pack_start(*enatmMask, Gtk::PACK_SHRINK, 0); + masktmBox->pack_start(*enatmMaskaft, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*masktmCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor masktmBox->pack_start(*blendmasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*radmasktm, Gtk::PACK_SHRINK, 0); @@ -3160,6 +3163,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).CCmasktmcurve = CCmasktmshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve = HHmasktmshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).enatmMask = enatmMask->get_active(); + pp->locallab.spots.at(pp->locallab.selspot).enatmMaskaft = enatmMaskaft->get_active(); pp->locallab.spots.at(pp->locallab.selspot).blendmasktm = blendmasktm->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmasktm = radmasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromasktm = chromasktm->getValue(); @@ -3443,6 +3447,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve || !LLmasktmshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve || !HHmasktmshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).enatmMask = pe->locallab.spots.at(pp->locallab.selspot).enatmMask || !enatmMask->get_inconsistent(); + pe->locallab.spots.at(pp->locallab.selspot).enatmMaskaft = pe->locallab.spots.at(pp->locallab.selspot).enatmMaskaft || !enatmMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).blendmasktm = pe->locallab.spots.at(pp->locallab.selspot).blendmasktm || blendmasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmasktm = pe->locallab.spots.at(pp->locallab.selspot).radmasktm || radmasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromasktm = pe->locallab.spots.at(pp->locallab.selspot).chromasktm || chromasktm->getEditedState(); @@ -3716,6 +3721,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve || !LLmasktmshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve || !HHmasktmshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).enatmMask = pedited->locallab.spots.at(pp->locallab.selspot).enatmMask || !enatmMask->get_inconsistent(); + pedited->locallab.spots.at(pp->locallab.selspot).enatmMaskaft = pedited->locallab.spots.at(pp->locallab.selspot).enatmMaskaft || !enatmMaskaft->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).blendmasktm = pedited->locallab.spots.at(pp->locallab.selspot).blendmasktm || blendmasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmasktm = pedited->locallab.spots.at(pp->locallab.selspot).radmasktm || radmasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromasktm = pedited->locallab.spots.at(pp->locallab.selspot).chromasktm || chromasktm->getEditedState(); @@ -4753,6 +4759,30 @@ void Locallab::enatmMaskChanged() } } +void Locallab::enatmMaskaftChanged() +{ + printf("enatmmaskaftChanged\n"); + + if (multiImage) { + if (enatmMaskaft->get_inconsistent()) { + enatmMaskaft->set_inconsistent(false); + enatmMaskaftConn.block(true); + enatmMaskaft->set_active(false); + enatmMaskaftConn.block(false); + } + } + + if (getEnabled() && exptonemap->getEnabled()) { + if (listener) { + if (enatmMaskaft->get_active()) { + listener->panelChanged(EvLocallabEnatmMaskaft, M("GENERAL_ENABLED")); + } else { + listener->panelChanged(EvLocallabEnatmMaskaft, M("GENERAL_DISABLED")); + } + } + } +} + void Locallab::enaretiMaskChanged() { @@ -7290,6 +7320,7 @@ void Locallab::enableListener() enabletonemapConn.block(false); equiltmConn.block(false); enatmMaskConn.block(false); + enatmMaskaftConn.block(false); showmasktmMethodConn.block(false); // Retinex enableretiConn.block(false); @@ -7366,6 +7397,7 @@ void Locallab::disableListener() enabletonemapConn.block(true); equiltmConn.block(true); enatmMaskConn.block(true); + enatmMaskaftConn.block(true); showmasktmMethodConn.block(true); // Retinex enableretiConn.block(true); @@ -7613,6 +7645,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con amount->setValue(pp->locallab.spots.at(index).amount); equiltm->set_active(pp->locallab.spots.at(index).equiltm); enatmMask->set_active(pp->locallab.spots.at(index).enatmMask); + enatmMaskaft->set_active(pp->locallab.spots.at(index).enatmMaskaft); blendmasktm->setValue(pp->locallab.spots.at(index).blendmasktm); radmasktm->setValue(pp->locallab.spots.at(index).radmasktm); chromasktm->setValue(pp->locallab.spots.at(index).chromasktm); @@ -7945,6 +7978,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con LLmasktmshape->setUnChanged(!spotState->LLmasktmcurve); HHmasktmshape->setUnChanged(!spotState->HHmasktmcurve); enatmMask->set_inconsistent(multiImage && !spotState->enatmMask); + enatmMaskaft->set_inconsistent(multiImage && !spotState->enatmMaskaft); blendmasktm->setEditedState(spotState->blendmasktm ? Edited : UnEdited); radmasktm->setEditedState(spotState->radmasktm ? Edited : UnEdited); chromasktm->setEditedState(spotState->chromasktm ? Edited : UnEdited); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 7987311f1..bca79068d 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -316,6 +316,8 @@ private: sigc::connection equiltmConn; Gtk::CheckButton* const enatmMask; sigc::connection enatmMaskConn; + Gtk::CheckButton* const enatmMaskaft; + sigc::connection enatmMaskaftConn; // Retinex Gtk::CheckButton* const equilret; sigc::connection equilretConn; @@ -471,6 +473,7 @@ private: //TM void equiltmChanged(); void enatmMaskChanged(); + void enatmMaskaftChanged(); // Retinex void equilretChanged(); void loglinChanged(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index a65c0b060..eac45a210 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1111,6 +1111,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).LLmasktmcurve = locallab.spots.at(j).LLmasktmcurve && pSpot.LLmasktmcurve == otherSpot.LLmasktmcurve; locallab.spots.at(j).HHmasktmcurve = locallab.spots.at(j).HHmasktmcurve && pSpot.HHmasktmcurve == otherSpot.HHmasktmcurve; locallab.spots.at(j).enatmMask = locallab.spots.at(j).enatmMask && pSpot.enatmMask == otherSpot.enatmMask; + locallab.spots.at(j).enatmMaskaft = locallab.spots.at(j).enatmMaskaft && pSpot.enatmMaskaft == otherSpot.enatmMaskaft; locallab.spots.at(j).blendmasktm = locallab.spots.at(j).blendmasktm && pSpot.blendmasktm == otherSpot.blendmasktm; locallab.spots.at(j).radmasktm = locallab.spots.at(j).radmasktm && pSpot.radmasktm == otherSpot.radmasktm; locallab.spots.at(j).chromasktm = locallab.spots.at(j).chromasktm && pSpot.chromasktm == otherSpot.chromasktm; @@ -3296,6 +3297,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).enatmMask = mods.locallab.spots.at(i).enatmMask; } + if (locallab.spots.at(i).enatmMaskaft) { + toEdit.locallab.spots.at(i).enatmMaskaft = mods.locallab.spots.at(i).enatmMaskaft; + } + if (locallab.spots.at(i).blendmasktm) { toEdit.locallab.spots.at(i).blendmasktm = mods.locallab.spots.at(i).blendmasktm; } @@ -4804,6 +4809,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : LLmasktmcurve(v), HHmasktmcurve(v), enatmMask(v), + enatmMaskaft(v), blendmasktm(v), radmasktm(v), chromasktm(v), @@ -5068,6 +5074,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) LLmasktmcurve = v; HHmasktmcurve = v; enatmMask = v; + enatmMaskaft = v; blendmasktm = v; radmasktm = v; chromasktm = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 58c1bddd6..80026b749 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -529,6 +529,7 @@ public: bool LLmasktmcurve; bool HHmasktmcurve; bool enatmMask; + bool enatmMaskaft; bool blendmasktm; bool radmasktm; bool chromasktm;