diff --git a/rtdata/languages/default b/rtdata/languages/default index 1cf6793c6..e21fa3df5 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2157,7 +2157,8 @@ TP_LOCALLAB_MERGETYPE;Merge image and mask TP_LOCALLAB_MERGETYPE_TOOLTIP;None, use all mask in LCH mode.\nShort curves 'L' mask, use a short circuit for mask 2, 3, 4, 6, 7.\nOriginal mask 7, blend current image with original TP_LOCALLAB_MERGENONE;None TP_LOCALLAB_MERGEONE;Short Curves 'L' Mask -TP_LOCALLAB_MERGETWO;Original (Mask 7) +TP_LOCALLAB_MERGETWO;Original(Mask 7) +TP_LOCALLAB_MERGETHR;Original(Mask 7) + Mask LCH TP_LOCALLAB_MERGE1COLFRA;Merge with Original TP_LOCALLAB_OPACOL;Opacity TP_LOCALLAB_MERGECOLFRA;Mask LCH diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index ad1a3982d..63186c7c9 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -593,6 +593,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.mergemet = 1; } else if (locallab.spots.at(sp).mergeMethod == "orig") { lp.mergemet = 2; + } else if (locallab.spots.at(sp).mergeMethod == "origmas") { + lp.mergemet = 3; } if (locallab.spots.at(sp).mergecolMethod == "one") { @@ -11415,7 +11417,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float b_base = lp.lowB / scaling; bool ctoning = (a_scale != 0.f || b_scale != 0.f || a_base != 0.f || b_base != 0.f); - if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || ctoning || lp.mergemet == 2 || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.enaColorMask || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4 || lp.showmaskcolmet == 5) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili + if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || ctoning || lp.mergemet >= 2 || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.enaColorMask || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4 || lp.showmaskcolmet == 5) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili /* //test for fftw blur with tiles fftw_tile_blur....not good we can see tiles - very long time int GW = original->W; @@ -11651,8 +11653,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); float amountcd = 0.f; float anchorcd = 50.f; - - maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, inv, lp, + if(lp.mergemet != 2) { + maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, inv, lp, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, multiThread, enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav, level_bl, level_hl, level_br, level_hr, @@ -11660,12 +11662,12 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco ); - if (lp.showmaskcolmet == 3) { - showmask(lumask, lp, xstart, ystart, cx, cy, bfw, bfh, bufcolorig.get(), transformed, bufmaskblurcol.get(), 0); + if (lp.showmaskcolmet == 3) { + showmask(lumask, lp, xstart, ystart, cx, cy, bfw, bfh, bufcolorig.get(), transformed, bufmaskblurcol.get(), 0); - return; + return; + } } - if (lp.showmaskcolmet == 4) { return; } @@ -11759,7 +11761,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } - if (lp.mergemet == 2) { //merge result with original + if (lp.mergemet >= 2) { //merge result with original std::unique_ptr bufcolreserv; bufcolreserv.reset(new LabImage(bfw, bfh)); //printf("method=%i \n", lp.mergecolMethod); diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc index add028256..a3af8a214 100644 --- a/rtgui/controlspotpanel.cc +++ b/rtgui/controlspotpanel.cc @@ -289,6 +289,7 @@ ControlSpotPanel::ControlSpotPanel(): mergeMethod_->append(M("TP_LOCALLAB_MERGENONE")); mergeMethod_->append(M("TP_LOCALLAB_MERGEONE")); mergeMethod_->append(M("TP_LOCALLAB_MERGETWO")); + mergeMethod_->append(M("TP_LOCALLAB_MERGETHR")); mergeMethod_->set_active(0); mergeMethodconn_ = mergeMethod_->signal_changed().connect( sigc::mem_fun( diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 23ca569e7..1b28955b4 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -2897,7 +2897,10 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited) r->mergeMethod = 2; merge1colFrame->show(); mergecolFrame->hide(); - + } else if (pp->locallab.spots.at(i).mergeMethod == "origmas") { + r->mergeMethod = 3; + merge1colFrame->show(); + mergecolFrame->show(); } r->sensiexclu = pp->locallab.spots.at(i).sensiexclu; @@ -3027,6 +3030,10 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) r->mergeMethod = 2; merge1colFrame->show(); mergecolFrame->hide(); + } else if (newSpot->mergeMethod == "origmas") { + r->mergeMethod = 3; + merge1colFrame->show(); + mergecolFrame->show(); } @@ -3265,6 +3272,10 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) r->mergeMethod = 2; merge1colFrame->show(); mergecolFrame->hide(); + } else if (newSpot->mergeMethod == "origmas") { + r->mergeMethod = 3; + merge1colFrame->show(); + mergecolFrame->show(); } r->sensiexclu = newSpot->sensiexclu; @@ -3420,6 +3431,10 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).mergeMethod = "orig"; merge1colFrame->show(); mergecolFrame->hide(); + } else if (r->mergeMethod == 3) { + pp->locallab.spots.at(pp->locallab.selspot).mergeMethod = "origmas"; + merge1colFrame->show(); + mergecolFrame->show(); }