From 60728717a6ba1fe4e6554400607e15b07546aec6 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 27 Jun 2020 14:16:07 +0200 Subject: [PATCH] differentiate the action luma and chroma blend --- rtdata/languages/default | 6 +++-- rtengine/improcfun.h | 2 +- rtengine/iplocallab.cc | 56 +++++++++++++++++++++------------------- rtengine/procevents.h | 1 + rtengine/procparams.cc | 4 +++ rtengine/procparams.h | 1 + rtengine/refreshmap.cc | 4 ++- rtgui/locallabtools.h | 1 + rtgui/locallabtools2.cc | 16 +++++++++++- rtgui/paramsedited.cc | 7 +++++ rtgui/paramsedited.h | 1 + 11 files changed, 67 insertions(+), 32 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index e1c7c9ddc..ffdeec93b 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1167,7 +1167,7 @@ HISTORY_MSG_926;Local - Show mask type HISTORY_MSG_927;Local - Shadow mask HISTORY_MSG_928;Local - Common color mask HISTORY_MSG_929;Local - Mask common scope -HISTORY_MSG_930;Local - Mask Common blend +HISTORY_MSG_930;Local - Mask Common blend luma HISTORY_MSG_931;Local - Mask Common enable HISTORY_MSG_932;Local - Mask Common radius soft HISTORY_MSG_933;Local - Mask Common laplacian @@ -1190,6 +1190,7 @@ HISTORY_MSG_949;Local - Mask Common Threshold levels HISTORY_MSG_950;Local - Mask Common GF strength HISTORY_MSG_951;Local - Mask Common GF angle HISTORY_MSG_952;Local - Mask Common soft radius +HISTORY_MSG_953;Local - Mask Common blend chroma HISTORY_MSG_CAT02PRESET;Cat02 automatic preset HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction @@ -2336,7 +2337,8 @@ TP_LOCALLAB_BASELOG;Logarithm base TP_LOCALLAB_BILATERAL;Bilateral filter TP_LOCALLAB_BLACK_EV;Black Ev TP_LOCALLAB_BLENDMASKCOL;Blend -TP_LOCALLAB_BLENDMASKMAK;Add / substract mask +TP_LOCALLAB_BLENDMASKMASK;Add / substract mask Luminance +TP_LOCALLAB_BLENDMASKMASKAB;Add / substract mask Chrominance TP_LOCALLAB_BLENDMASK_TOOLTIP;If blend = 0 only shape detection is improved.\nIf blend > 0 the mask is added to the image. If blend < 0 the mask is subtracted from the image TP_LOCALLAB_BLENDMASKMASK_TOOLTIP;If this slider = 0 no action.\nAdd or subtract the mask from the original image TP_LOCALLAB_BLGUID;Guided Filter diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 682c97b90..3af1e0ec6 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -239,7 +239,7 @@ public: const LocCCmaskCurve & locccmasCurve, bool lcmasutili, const LocLLmaskCurve & locllmasCurve, bool llmasutili, const LocHHmaskCurve & lochhmasCurve, bool lhmasutili, const LocHHmaskCurve & lochhhmasCurve, bool lhhmasutili, - bool multiThread, bool enaMask, bool showmaske, bool deltaE, bool modmask, bool zero, bool modif, float chrom, float rad, float lap, float gamma, float slope, float blendm, int shado, float amountcd, float anchorcd, + bool multiThread, bool enaMask, bool showmaske, bool deltaE, bool modmask, bool zero, bool modif, float chrom, float rad, float lap, float gamma, float slope, float blendm, float blendmab, int shado, float amountcd, float anchorcd, 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, diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 32fa07612..df6eaf567 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -3207,7 +3207,7 @@ void ImProcFunctions::blendstruc(int bfw, int bfh, LabImage* bufcolorig, float r } -static void blendmask(const local_params& lp, int xstart, int ystart, int cx, int cy, int bfw, int bfh, LabImage* bufexporig, LabImage* original, LabImage* bufmaskor, LabImage* originalmas, float bl, int inv) +static void blendmask(const local_params& lp, int xstart, int ystart, int cx, int cy, int bfw, int bfh, LabImage* bufexporig, LabImage* original, LabImage* bufmaskor, LabImage* originalmas, float bl, float blab, int inv) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) @@ -3231,8 +3231,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in if (inv == 0) { if (zone > 0) { bufexporig->L[y][x] += (bl * bufmaskor->L[y][x]); - bufexporig->a[y][x] *= (1.f + bl * bufmaskor->a[y][x]); - bufexporig->b[y][x] *= (1.f + bl * bufmaskor->b[y][x]); + bufexporig->a[y][x] *= (1.f + blab * bufmaskor->a[y][x]); + bufexporig->b[y][x] *= (1.f + blab * bufmaskor->b[y][x]); bufexporig->L[y][x] = CLIP(bufexporig->L[y][x]); bufexporig->a[y][x] = clipC(bufexporig->a[y][x]); @@ -3243,8 +3243,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in originalmas->b[y][x] = clipC(bufexporig->b[y][x] * (1.f - bufmaskor->b[y][x])); original->L[y + ystart][x + xstart] += (bl * localFactor * bufmaskor->L[y][x]); - original->a[y + ystart][x + xstart] *= (1.f + bl * localFactor * bufmaskor->a[y][x]); - original->b[y + ystart][x + xstart] *= (1.f + bl * localFactor * bufmaskor->b[y][x]); + original->a[y + ystart][x + xstart] *= (1.f + blab * localFactor * bufmaskor->a[y][x]); + original->b[y + ystart][x + xstart] *= (1.f + blab * localFactor * bufmaskor->b[y][x]); original->L[y + ystart][x + xstart] = CLIP(original->L[y + ystart][x + xstart]); original->a[y + ystart][x + xstart] = clipC(original->a[y + ystart][x + xstart]); original->b[y + ystart][x + xstart] = clipC(original->b[y + ystart][x + xstart]); @@ -3255,8 +3255,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in if (zone < 2) { bufexporig->L[y][x] += (bl * bufmaskor->L[y][x]); - bufexporig->a[y][x] *= (1.f + bl * bufmaskor->a[y][x]); - bufexporig->b[y][x] *= (1.f + bl * bufmaskor->b[y][x]); + bufexporig->a[y][x] *= (1.f + blab * bufmaskor->a[y][x]); + bufexporig->b[y][x] *= (1.f + blab * bufmaskor->b[y][x]); bufexporig->L[y][x] = CLIP(bufexporig->L[y][x]); bufexporig->a[y][x] = clipC(bufexporig->a[y][x]); @@ -3269,8 +3269,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in switch (zone) { case 0: { original->L[y + ystart][x + xstart] += (bl * bufmaskor->L[y][x]); - original->a[y + ystart][x + xstart] *= (1.f + bl * bufmaskor->a[y][x]); - original->b[y + ystart][x + xstart] *= (1.f + bl * bufmaskor->b[y][x]); + original->a[y + ystart][x + xstart] *= (1.f + blab * bufmaskor->a[y][x]); + original->b[y + ystart][x + xstart] *= (1.f + blab * bufmaskor->b[y][x]); original->L[y + ystart][x + xstart] = CLIP(original->L[y + ystart][x + xstart]); original->a[y + ystart][x + xstart] = clipC(original->a[y + ystart][x + xstart]); original->b[y + ystart][x + xstart] = clipC(original->b[y + ystart][x + xstart]); @@ -3279,8 +3279,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in case 1: { original->L[y + ystart][x + xstart] += (bl * localFactor * bufmaskor->L[y][x]); - original->a[y + ystart][x + xstart] *= (1.f + bl * localFactor * bufmaskor->a[y][x]); - original->b[y + ystart][x + xstart] *= (1.f + bl * localFactor * bufmaskor->b[y][x]); + original->a[y + ystart][x + xstart] *= (1.f + blab * localFactor * bufmaskor->a[y][x]); + original->b[y + ystart][x + xstart] *= (1.f + blab * localFactor * bufmaskor->b[y][x]); original->L[y + ystart][x + xstart] = CLIP(original->L[y + ystart][x + xstart]); original->a[y + ystart][x + xstart] = clipC(original->a[y + ystart][x + xstart]); original->b[y + ystart][x + xstart] = clipC(original->b[y + ystart][x + xstart]); @@ -3733,7 +3733,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int const LocCCmaskCurve & locccmasCurve, bool lcmasutili, const LocLLmaskCurve & locllmasCurve, bool llmasutili, const LocHHmaskCurve & lochhmasCurve, bool lhmasutili, const LocHHmaskCurve & lochhhmasCurve, bool lhhmasutili, - bool multiThread, bool enaMask, bool showmaske, bool deltaE, bool modmask, bool zero, bool modif, float chrom, float rad, float lap, float gamma, float slope, float blendm, int shado, float amountcd, float anchorcd, + bool multiThread, bool enaMask, bool showmaske, bool deltaE, bool modmask, bool zero, bool modif, float chrom, float rad, float lap, float gamma, float slope, float blendm, float blendmab, int shado, float amountcd, float anchorcd, 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, @@ -4303,7 +4303,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int if (zero || modif || modmask || deltaE || enaMask) { originalmaskcol->CopyFrom(bufcolorig, multiThread); - blendmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufcolorig, original, bufmaskblurcol, originalmaskcol, blendm, inv); + blendmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufcolorig, original, bufmaskblurcol, originalmaskcol, blendm, blendmab, inv); } } } @@ -10141,10 +10141,10 @@ void ImProcFunctions::Lab_Local( } if (lp.showmaskblmet == 0 || lp.showmaskblmet == 1 || lp.showmaskblmet == 2 || lp.showmaskblmet == 4 || lp.enablMask) { - blendmask(lp, 0, 0, cx, cy, GW, GH, bufgb.get(), original, bufmaskorigbl.get(), originalmaskbl, lp.blendmabl, invers); + blendmask(lp, 0, 0, cx, cy, GW, GH, bufgb.get(), original, bufmaskorigbl.get(), originalmaskbl, lp.blendmabl, lp.blendmabl, invers); } else if (lp.showmaskblmet == 3) { showmask(lumask, lp, 0, 0, cx, cy, GW, GH, bufgb.get(), transformed, bufmaskorigbl.get(), invers); - return; + return; } } @@ -10809,7 +10809,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, loctemp.get(), bufmaskorigcb.get(), originalmaskcb.get(), original, reserved, inv, lp, 0.f, false, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskcblocalcurve, localmaskcbutili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskcblocalcurve, localmaskcbutili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.0f, 0.f, -1 ); @@ -11025,7 +11025,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskorigvib.get(), originalmaskvib.get(), original, reserved, inv, lp, 0.f, false, locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskviblocalcurve, localmaskvibutili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskviblocalcurve, localmaskvibutili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 ); @@ -11256,7 +11256,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgbm.get(), bufmaskorigtm.get(), originalmasktm.get(), original, reserved, inv, lp, 0.f, false, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 ); @@ -11297,7 +11297,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, tmp1.get(), bufmaskorigtm.get(), originalmasktm.get(), original, reserved, inv, lp, 0.f, false, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 ); @@ -11480,7 +11480,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskorigSH.get(), originalmaskSH.get(), original, reserved, inv, lp, 0.f, false, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 ); @@ -11631,7 +11631,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskSH.get(), original, reserved, inv, lp, 0.f, false, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 ); @@ -11902,7 +11902,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgb.get(), bufmaskoriglc.get(), originalmasklc.get(), original, reserved, inv, lp, 0.f, false, locccmaslcCurve, lcmaslcutili, locllmaslcCurve, llmaslcutili, lochhmaslcCurve, lhmaslcutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasklclocalcurve, localmasklcutili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasklclocalcurve, localmasklcutili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 ); @@ -13066,7 +13066,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, reserved, inv, lp, 0.f, false, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, 0 ); @@ -13330,7 +13330,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, reserved, inv, lp, 0.f, false, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, 0 ); @@ -13517,7 +13517,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, reserved, inv, lp, strumask, astool, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav, level_bl, level_hl, level_br, level_hr, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftColorMask, lp.blurcolmask, lp.contcolmask, -1 @@ -14471,7 +14471,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, reserved, inv, lp, strumask, params->locallab.spots.at(sp).toolcol, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav, level_bl, level_hl, level_br, level_hr, shortcu, false, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftColorMask, lp.blurcolmask, lp.contcolmask, -1 @@ -14563,8 +14563,10 @@ void ImProcFunctions::Lab_Local( const float gamma = params->locallab.spots.at(sp).gammask; const float slope = params->locallab.spots.at(sp).slopmask; float blendm = params->locallab.spots.at(sp).blendmask; + float blendmab = params->locallab.spots.at(sp).blendmaskab; if (lp.showmask_met == 2) { blendm = 0.f;//normalize behavior mask with others no action of blend + blendmab = 0.f; } const float lap = params->locallab.spots.at(sp).lapmask; const bool pde = params->locallab.spots.at(sp).laplac; @@ -14589,7 +14591,7 @@ void ImProcFunctions::Lab_Local( maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, reserved, inv, lp, strumask, astool, locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili, lochhhmas_Curve, lhhmas_utili, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasklocal_curve, localmask_utili, loclmasCurve_wav, lmasutili_wav, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendmab, shado, amountcd, anchorcd, lmasklocal_curve, localmask_utili, loclmasCurve_wav, lmasutili_wav, level_bl, level_hl, level_br, level_hr, shortcu, delt, hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftma, lp.blurma, lp.contma, 12 diff --git a/rtengine/procevents.h b/rtengine/procevents.h index cea95c451..afc6036f2 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -975,6 +975,7 @@ enum ProcEventCode { Evlocallabstr_mask = 949, Evlocallabang_mask = 950, Evlocallabsoftradiusmask = 951, + Evlocallabblendmaskab = 952, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 474814642..689f4dacf 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -3739,6 +3739,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : expmask(false), sensimask(60), blendmask(-10), + blendmaskab(-10), softradiusmask(1.0), enamask(false), fftmask(true), @@ -4310,6 +4311,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && expmask == other.expmask && sensimask == other.sensimask && blendmask == other.blendmask + && blendmaskab == other.blendmaskab && softradiusmask == other.softradiusmask && enamask == other.enamask && fftmask == other.fftmask @@ -5832,6 +5834,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->complexmask, "Locallab", "Complexmask_" + index_str, spot.complexmask, keyFile); saveToKeyfile(!pedited || spot_edited->sensimask, "Locallab", "Sensimask_" + index_str, spot.sensimask, keyFile); saveToKeyfile(!pedited || spot_edited->blendmask, "Locallab", "Blendmaskmask_" + index_str, spot.blendmask, keyFile); + saveToKeyfile(!pedited || spot_edited->blendmaskab, "Locallab", "Blendmaskmaskab_" + index_str, spot.blendmaskab, keyFile); saveToKeyfile(!pedited || spot_edited->softradiusmask, "Locallab", "Softradiusmask_" + index_str, spot.softradiusmask, keyFile); saveToKeyfile(!pedited || spot_edited->enamask, "Locallab", "Enamask_" + index_str, spot.enamask, keyFile); saveToKeyfile(!pedited || spot_edited->fftmask, "Locallab", "Fftmask_" + index_str, spot.fftmask, keyFile); @@ -7573,6 +7576,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Complexmask_" + index_str, pedited, spot.complexmask, spotEdited.complexmask); assignFromKeyfile(keyFile, "Locallab", "Sensimask_" + index_str, pedited, spot.sensimask, spotEdited.sensimask); assignFromKeyfile(keyFile, "Locallab", "Blendmaskmask_" + index_str, pedited, spot.blendmask, spotEdited.blendmask); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskmaskab_" + index_str, pedited, spot.blendmaskab, spotEdited.blendmaskab); assignFromKeyfile(keyFile, "Locallab", "Softradiusmask_" + index_str, pedited, spot.softradiusmask, spotEdited.softradiusmask); assignFromKeyfile(keyFile, "Locallab", "Enamask_" + index_str, pedited, spot.enamask, spotEdited.enamask); assignFromKeyfile(keyFile, "Locallab", "Fftmask_" + index_str, pedited, spot.fftmask, spotEdited.fftmask); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 08fc55d02..1d08049cd 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1427,6 +1427,7 @@ struct LocallabParams { bool expmask; int sensimask; int blendmask; + int blendmaskab; double softradiusmask; bool enamask; bool fftmask; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index b3a111b1b..855f09572 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -978,7 +978,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // EvlocallabcsThresholdmask LUMINANCECURVE, // Evlocallabstr_mask LUMINANCECURVE, // Evlocallabang_mask - LUMINANCECURVE // Evlocallabsoftradiusmask + LUMINANCECURVE, // Evlocallabsoftradiusmask + LUMINANCECURVE // Evlocallabblendmaskab + }; diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 4171c30b8..d3672b819 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -1206,6 +1206,7 @@ class LocallabMask: private: Adjuster* const sensimask; Adjuster* const blendmask; + Adjuster* const blendmaskab; Adjuster* const softradiusmask; MyComboBoxText* const showmask_Method; diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index 9bbf5e50e..fee80a664 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -4731,7 +4731,8 @@ LocallabMask::LocallabMask(): // Comon mask specific widgets sensimask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))), - blendmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKMAK"), -100, 100, 1, -10))), + blendmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKMASK"), -100, 100, 1, -10))), + blendmaskab(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKMASKAB"), -100, 100, 1, -10))), softradiusmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 1.))), showmask_Method(Gtk::manage(new MyComboBoxText())), @@ -4773,6 +4774,7 @@ LocallabMask::LocallabMask(): sensimask->setAdjusterListener(this); blendmask->setAdjusterListener(this); + blendmaskab->setAdjusterListener(this); // softradiusmask->setLogScale(10, -10); softradiusmask->setAdjusterListener(this); showmask_Method->append(M("TP_LOCALLAB_SHOWMNONE")); @@ -4848,6 +4850,7 @@ LocallabMask::LocallabMask(): pack_start(*sensimask, Gtk::PACK_SHRINK, 0); pack_start(*blendmask, Gtk::PACK_SHRINK, 0); + pack_start(*blendmaskab, Gtk::PACK_SHRINK, 0); pack_start(*softradiusmask, Gtk::PACK_SHRINK, 0); ToolParamBlock* const maskmaskBox = Gtk::manage(new ToolParamBlock()); maskmaskBox->pack_start(*showmask_Method, Gtk::PACK_SHRINK, 4); @@ -4926,6 +4929,7 @@ void LocallabMask::updateAdviceTooltips(const bool showTooltips) exp->set_tooltip_text(M("TP_LOCALLAB_MASKCOM_TOOLTIP")); sensimask->set_tooltip_text(M("TP_LOCALLAB_SENSIMASK_TOOLTIP")); blendmask->set_tooltip_text(M("TP_LOCALLAB_BLENDMASKMASK_TOOLTIP")); + blendmaskab->set_tooltip_text(M("TP_LOCALLAB_BLENDMASKMASK_TOOLTIP")); CCmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP")); LLmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP")); HHmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP")); @@ -5009,6 +5013,7 @@ void LocallabMask::read(const rtengine::procparams::ProcParams* pp, const Params blurmask->setValue(spot.blurmask); blendmask->setValue(spot.blendmask); + blendmaskab->setValue(spot.blendmaskab); softradiusmask->setValue(spot.softradiusmask); enamask->set_active(spot.enamask); CCmask_shape->setCurve(spot.CCmask_curve); @@ -5055,6 +5060,7 @@ void LocallabMask::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped spot.sensimask = sensimask->getIntValue(); spot.blendmask = blendmask->getIntValue(); + spot.blendmaskab = blendmaskab->getIntValue(); spot.softradiusmask = softradiusmask->getValue(); spot.enamask = enamask->get_active(); spot.CCmask_curve = CCmask_shape->getCurve(); @@ -5112,6 +5118,7 @@ void LocallabMask::setDefaults(const rtengine::procparams::ProcParams* defParams strumaskmask->setDefault(defSpot.strumaskmask); toolmask->set_active(defSpot.toolmask); blendmask->setDefault((double)defSpot.blendmask); + blendmaskab->setDefault((double)defSpot.blendmaskab); softradiusmask->setDefault((double)defSpot.softradiusmask); radmask->setDefault(defSpot.radmask); lapmask->setDefault(defSpot.lapmask); @@ -5341,6 +5348,13 @@ void LocallabMask::adjusterChanged(Adjuster* a, double newval) } } + if (a == blendmaskab) { + if (listener) { + listener->panelChanged(Evlocallabblendmaskab, + blendmaskab->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == softradiusmask) { if (listener) { listener->panelChanged(Evlocallabsoftradiusmask, diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 2031a7e8a..5e4b25042 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1483,6 +1483,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).expmask = locallab.spots.at(j).expmask && pSpot.expmask == otherSpot.expmask; locallab.spots.at(j).sensimask = locallab.spots.at(j).sensimask && pSpot.sensimask == otherSpot.sensimask; locallab.spots.at(j).blendmask = locallab.spots.at(j).blendmask && pSpot.blendmask == otherSpot.blendmask; + locallab.spots.at(j).blendmaskab = locallab.spots.at(j).blendmaskab && pSpot.blendmaskab == otherSpot.blendmaskab; locallab.spots.at(j).softradiusmask = locallab.spots.at(j).softradiusmask && pSpot.softradiusmask == otherSpot.softradiusmask; locallab.spots.at(j).enamask = locallab.spots.at(j).enamask && pSpot.enamask == otherSpot.enamask; locallab.spots.at(j).fftmask = locallab.spots.at(j).fftmask && pSpot.fftmask == otherSpot.fftmask; @@ -4831,6 +4832,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).blendmask = mods.locallab.spots.at(i).blendmask; } + if (locallab.spots.at(i).blendmaskab) { + toEdit.locallab.spots.at(i).blendmaskab = mods.locallab.spots.at(i).blendmaskab; + } + if (locallab.spots.at(i).softradiusmask) { toEdit.locallab.spots.at(i).softradiusmask = mods.locallab.spots.at(i).softradiusmask; } @@ -6494,6 +6499,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : expmask(v), sensimask(v), blendmask(v), + blendmaskab(v), softradiusmask(v), enamask(v), fftmask(v), @@ -6983,6 +6989,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) expmask = v; sensimask = v; blendmask = v; + blendmaskab = v; softradiusmask = v; enamask = v; fftmask = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index e6e6a2b2b..327f3a370 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -841,6 +841,7 @@ public: bool expmask; bool sensimask; bool blendmask; + bool blendmaskab; bool softradiusmask; bool enamask; bool fftmask;