Added Graduated Filter luminance common mask

This commit is contained in:
Desmis 2020-06-24 07:31:48 +02:00
parent ebb8b16583
commit 344864a8ec
11 changed files with 107 additions and 18 deletions

View File

@ -1187,6 +1187,8 @@ HISTORY_MSG_946;Local - Mask Common shadows
HISTORY_MSG_947;Local - Mask Common Contrast curve HISTORY_MSG_947;Local - Mask Common Contrast curve
HISTORY_MSG_948;Local - Mask Common Wavelet curve HISTORY_MSG_948;Local - Mask Common Wavelet curve
HISTORY_MSG_949;Local - Mask Common Threshold levels 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_CAT02PRESET;Cat02 automatic preset HISTORY_MSG_CAT02PRESET;Cat02 automatic preset
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

View File

@ -243,7 +243,7 @@ public:
const LUTf& lmasklocalcurve, bool localmaskutili, const LUTf& lmasklocalcurve, bool localmaskutili,
const LocwavCurve & loclmasCurvecolwav, bool lmasutilicolwav, int level_bl, int level_hl, int level_br, int level_hr, 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, int shortcu, bool delt, const float hueref, const float chromaref, const float lumaref,
float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, bool fftt, float blu_ma, float cont_ma); float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, bool fftt, float blu_ma, float cont_ma, int indic);
void deltaEforMask(float **rdE, int bfw, int bfh, LabImage* bufcolorig, const float hueref, const float chromaref, const float lumaref, void deltaEforMask(float **rdE, int bfw, int bfh, LabImage* bufcolorig, const float hueref, const float chromaref, const float lumaref,
float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, float balance, float balanceh); float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, float balance, float balanceh);

View File

@ -406,6 +406,8 @@ struct local_params {
float slomaexp; float slomaexp;
float strmaexp; float strmaexp;
float angmaexp; float angmaexp;
float str_mas;
float ang_mas;
float strexp; float strexp;
float angexp; float angexp;
float strSH; float strSH;
@ -1009,6 +1011,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
float slomaskexpo = ((float) locallab.spots.at(sp).slomaskexp); float slomaskexpo = ((float) locallab.spots.at(sp).slomaskexp);
float strmaskexpo = ((float) locallab.spots.at(sp).strmaskexp); float strmaskexpo = ((float) locallab.spots.at(sp).strmaskexp);
float angmaskexpo = ((float) locallab.spots.at(sp).angmaskexp); float angmaskexpo = ((float) locallab.spots.at(sp).angmaskexp);
float strmask = ((float) locallab.spots.at(sp).str_mask);
float angmask = ((float) locallab.spots.at(sp).ang_mask);
float strexpo = ((float) locallab.spots.at(sp).strexp); float strexpo = ((float) locallab.spots.at(sp).strexp);
float angexpo = ((float) locallab.spots.at(sp).angexp); float angexpo = ((float) locallab.spots.at(sp).angexp);
float strSH = ((float) locallab.spots.at(sp).strSH); float strSH = ((float) locallab.spots.at(sp).strSH);
@ -1147,6 +1151,9 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.slomaexp = slomaskexpo; lp.slomaexp = slomaskexpo;
lp.strmaexp = strmaskexpo; lp.strmaexp = strmaskexpo;
lp.angmaexp = angmaskexpo; lp.angmaexp = angmaskexpo;
lp.str_mas = strmask;
lp.ang_mas = angmask;
lp.strexp = strexpo; lp.strexp = strexpo;
lp.angexp = angexpo; lp.angexp = angexpo;
lp.strSH = strSH; lp.strSH = strSH;
@ -3068,6 +3075,9 @@ void calclocalGradientParams(const struct local_params& lp, struct grad_params&
} else if (indic == 11) { } else if (indic == 11) {
stops = lp.strlog; stops = lp.strlog;
angs = lp.anglog; angs = lp.anglog;
} else if (indic == 12) {
stops = -lp.str_mas;
angs = lp.ang_mas;
} }
@ -3726,7 +3736,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
const LocwavCurve & loclmasCurvecolwav, bool lmasutilicolwav, int level_bl, int level_hl, int level_br, int level_hr, 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, int shortcu, bool delt, const float hueref, const float chromaref, const float lumaref,
float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope,
bool fftt, float blu_ma, float cont_ma bool fftt, float blu_ma, float cont_ma, int indic
) )
@ -4244,8 +4254,8 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
struct grad_params gp; struct grad_params gp;
if (lp.strmaexp != 0.f) { if ((indic == 0 && lp.strmaexp != 0.f) || (indic ==12 && lp.str_mas != 0.f)) {
calclocalGradientParams(lp, gp, ystart, xstart, bfw, bfh, 0); calclocalGradientParams(lp, gp, ystart, xstart, bfw, bfh, indic);
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) if (multiThread) #pragma omp parallel for schedule(dynamic,16) if (multiThread)
#endif #endif
@ -10799,7 +10809,7 @@ void ImProcFunctions::Lab_Local(
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmaskcblocalcurve, localmaskcbutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.0f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.0f, 0.f, -1
); );
if (lp.showmaskcbmet == 3) { if (lp.showmaskcbmet == 3) {
@ -11015,7 +11025,7 @@ void ImProcFunctions::Lab_Local(
locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmaskviblocalcurve, localmaskvibutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
); );
if (lp.showmaskvibmet == 3) { if (lp.showmaskvibmet == 3) {
@ -11246,7 +11256,7 @@ void ImProcFunctions::Lab_Local(
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
); );
if (lp.showmasktmmet == 3) { if (lp.showmasktmmet == 3) {
@ -11287,7 +11297,7 @@ void ImProcFunctions::Lab_Local(
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
); );
if (lp.showmasktmmet == 3) {//display mask if (lp.showmasktmmet == 3) {//display mask
@ -11470,7 +11480,7 @@ void ImProcFunctions::Lab_Local(
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
); );
if (lp.showmaskSHmet == 3) { if (lp.showmaskSHmet == 3) {
@ -11621,7 +11631,7 @@ void ImProcFunctions::Lab_Local(
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
); );
@ -11892,7 +11902,7 @@ void ImProcFunctions::Lab_Local(
locccmaslcCurve, lcmaslcutili, locllmaslcCurve, llmaslcutili, lochhmaslcCurve, lhmaslcutili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmasklclocalcurve, localmasklcutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
); );
if (lp.showmasklcmet == 3) { if (lp.showmasklcmet == 3) {
@ -13056,7 +13066,7 @@ void ImProcFunctions::Lab_Local(
locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, 0
); );
if (lp.showmaskexpmet == 3) { if (lp.showmaskexpmet == 3) {
@ -13320,7 +13330,7 @@ void ImProcFunctions::Lab_Local(
locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, lochhhmasCurve, lhhmasutili, multiThread, 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, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, 0
); );
if (lp.showmaskexpmetinv == 1) { if (lp.showmaskexpmetinv == 1) {
@ -13508,7 +13518,7 @@ void ImProcFunctions::Lab_Local(
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, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav,
level_bl, level_hl, level_br, level_hr, level_bl, level_hl, level_br, level_hr,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftColorMask, lp.blurcolmask, lp.contcolmask maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftColorMask, lp.blurcolmask, lp.contcolmask, -1
); );
if (lp.showmaskcolmet == 3) { if (lp.showmaskcolmet == 3) {
@ -14462,7 +14472,7 @@ void ImProcFunctions::Lab_Local(
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, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav,
level_bl, level_hl, level_br, level_hr, level_bl, level_hl, level_br, level_hr,
shortcu, false, hueref, chromaref, lumaref, shortcu, false, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftColorMask, lp.blurcolmask, lp.contcolmask maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftColorMask, lp.blurcolmask, lp.contcolmask, -1
); );
if (lp.showmaskcolmetinv == 1) { if (lp.showmaskcolmetinv == 1) {
@ -14577,7 +14587,7 @@ void ImProcFunctions::Lab_Local(
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, shado, amountcd, anchorcd, lmasklocal_curve, localmask_utili, loclmasCurve_wav, lmasutili_wav,
level_bl, level_hl, level_br, level_hr, level_bl, level_hl, level_br, level_hr,
shortcu, delt, hueref, chromaref, lumaref, shortcu, delt, hueref, chromaref, lumaref,
maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftma, lp.blurma, lp.contma maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftma, lp.blurma, lp.contma, 12
); );

View File

@ -972,6 +972,8 @@ enum ProcEventCode {
EvlocallabLmask_shape = 946, EvlocallabLmask_shape = 946,
EvlocallabLLmask_shapewav = 947, EvlocallabLLmask_shapewav = 947,
EvlocallabcsThresholdmask = 948, EvlocallabcsThresholdmask = 948,
Evlocallabstr_mask = 949,
Evlocallabang_mask = 950,
NUMOFEVENTS NUMOFEVENTS
}; };

View File

@ -3796,6 +3796,8 @@ LocallabParams::LocallabSpot::LocallabSpot() :
gammask(1.0), gammask(1.0),
slopmask(0.0), slopmask(0.0),
shadmask(0.0), shadmask(0.0),
str_mask(0),
ang_mask(0),
HHhmask_curve{ HHhmask_curve{
static_cast<double>(FCT_MinMaxCPoints), static_cast<double>(FCT_MinMaxCPoints),
0.0, 0.0,
@ -4322,6 +4324,8 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& gammask == other.gammask && gammask == other.gammask
&& slopmask == other.slopmask && slopmask == other.slopmask
&& shadmask == other.shadmask && shadmask == other.shadmask
&& str_mask == other.str_mask
&& ang_mask == other.ang_mask
&& HHhmask_curve == other.HHhmask_curve && HHhmask_curve == other.HHhmask_curve
&& Lmask_curve == other.Lmask_curve && Lmask_curve == other.Lmask_curve
&& LLmask_curvewav == other.LLmask_curvewav && LLmask_curvewav == other.LLmask_curvewav
@ -5841,6 +5845,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->gammask, "Locallab", "Gammask_" + index_str, spot.gammask, keyFile); saveToKeyfile(!pedited || spot_edited->gammask, "Locallab", "Gammask_" + index_str, spot.gammask, keyFile);
saveToKeyfile(!pedited || spot_edited->slopmask, "Locallab", "Slopmask_" + index_str, spot.slopmask, keyFile); saveToKeyfile(!pedited || spot_edited->slopmask, "Locallab", "Slopmask_" + index_str, spot.slopmask, keyFile);
saveToKeyfile(!pedited || spot_edited->shadmask, "Locallab", "Shadmask_" + index_str, spot.shadmask, keyFile); saveToKeyfile(!pedited || spot_edited->shadmask, "Locallab", "Shadmask_" + index_str, spot.shadmask, keyFile);
saveToKeyfile(!pedited || spot_edited->str_mask, "Locallab", "Str_mask_" + index_str, spot.str_mask, keyFile);
saveToKeyfile(!pedited || spot_edited->ang_mask, "Locallab", "Ang_mask_" + index_str, spot.ang_mask, keyFile);
saveToKeyfile(!pedited || spot_edited->HHhmask_curve, "Locallab", "HHhmask_Curve_" + index_str, spot.HHhmask_curve, keyFile); saveToKeyfile(!pedited || spot_edited->HHhmask_curve, "Locallab", "HHhmask_Curve_" + index_str, spot.HHhmask_curve, keyFile);
saveToKeyfile(!pedited || spot_edited->Lmask_curve, "Locallab", "Lmask_Curve_" + index_str, spot.Lmask_curve, keyFile); saveToKeyfile(!pedited || spot_edited->Lmask_curve, "Locallab", "Lmask_Curve_" + index_str, spot.Lmask_curve, keyFile);
saveToKeyfile(!pedited || spot_edited->LLmask_curvewav, "Locallab", "LLmask_Curvewav_" + index_str, spot.LLmask_curvewav, keyFile); saveToKeyfile(!pedited || spot_edited->LLmask_curvewav, "Locallab", "LLmask_Curvewav_" + index_str, spot.LLmask_curvewav, keyFile);
@ -7579,6 +7585,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Gammask_" + index_str, pedited, spot.gammask, spotEdited.gammask); assignFromKeyfile(keyFile, "Locallab", "Gammask_" + index_str, pedited, spot.gammask, spotEdited.gammask);
assignFromKeyfile(keyFile, "Locallab", "Slopmask_" + index_str, pedited, spot.slopmask, spotEdited.slopmask); assignFromKeyfile(keyFile, "Locallab", "Slopmask_" + index_str, pedited, spot.slopmask, spotEdited.slopmask);
assignFromKeyfile(keyFile, "Locallab", "Shadmask_" + index_str, pedited, spot.shadmask, spotEdited.shadmask); assignFromKeyfile(keyFile, "Locallab", "Shadmask_" + index_str, pedited, spot.shadmask, spotEdited.shadmask);
assignFromKeyfile(keyFile, "Locallab", "Str_mask_" + index_str, pedited, spot.str_mask, spotEdited.str_mask);
assignFromKeyfile(keyFile, "Locallab", "Ang_mask_" + index_str, pedited, spot.ang_mask, spotEdited.ang_mask);
assignFromKeyfile(keyFile, "Locallab", "HHhmask_Curve_" + index_str, pedited, spot.HHhmask_curve, spotEdited.HHhmask_curve); assignFromKeyfile(keyFile, "Locallab", "HHhmask_Curve_" + index_str, pedited, spot.HHhmask_curve, spotEdited.HHhmask_curve);
assignFromKeyfile(keyFile, "Locallab", "Lmask_Curve_" + index_str, pedited, spot.Lmask_curve, spotEdited.Lmask_curve); assignFromKeyfile(keyFile, "Locallab", "Lmask_Curve_" + index_str, pedited, spot.Lmask_curve, spotEdited.Lmask_curve);
assignFromKeyfile(keyFile, "Locallab", "LLmask_Curvewav_" + index_str, pedited, spot.LLmask_curvewav, spotEdited.LLmask_curvewav); assignFromKeyfile(keyFile, "Locallab", "LLmask_Curvewav_" + index_str, pedited, spot.LLmask_curvewav, spotEdited.LLmask_curvewav);

View File

@ -1442,6 +1442,8 @@ struct LocallabParams {
double gammask; double gammask;
double slopmask; double slopmask;
double shadmask; double shadmask;
int str_mask;
int ang_mask;
std::vector<double> HHhmask_curve; std::vector<double> HHhmask_curve;
std::vector<double> Lmask_curve; std::vector<double> Lmask_curve;
std::vector<double> LLmask_curvewav; std::vector<double> LLmask_curvewav;

View File

@ -975,7 +975,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // Evlocallabshadmask LUMINANCECURVE, // Evlocallabshadmask
LUMINANCECURVE, // EvlocallabLmask_shape LUMINANCECURVE, // EvlocallabLmask_shape
LUMINANCECURVE, // EvlocallabLLmask_shapewav LUMINANCECURVE, // EvlocallabLLmask_shapewav
LUMINANCECURVE // EvlocallabcsThresholdmask LUMINANCECURVE, // EvlocallabcsThresholdmask
LUMINANCECURVE, // Evlocallabstr_mask
LUMINANCECURVE // Evlocallabang_mask
}; };

View File

@ -1233,6 +1233,9 @@ private:
CurveEditorGroup* const mask2CurveEditorGwav; CurveEditorGroup* const mask2CurveEditorGwav;
FlatCurveEditor* const LLmask_shapewav; FlatCurveEditor* const LLmask_shapewav;
ThresholdAdjuster* const csThresholdmask; ThresholdAdjuster* const csThresholdmask;
Gtk::Frame* const gradFramemask;
Adjuster* const str_mask;
Adjuster* const ang_mask;
sigc::connection showmask_MethodConn, enamaskConn, toolmaskConn, fftmaskConn; sigc::connection showmask_MethodConn, enamaskConn, toolmaskConn, fftmaskConn;

View File

@ -4760,7 +4760,10 @@ LocallabMask::LocallabMask():
Lmask_shape(static_cast<DiagonalCurveEditor*>(mask2CurveEditorG->addCurve(CT_Diagonal, "L(L)"))), Lmask_shape(static_cast<DiagonalCurveEditor*>(mask2CurveEditorG->addCurve(CT_Diagonal, "L(L)"))),
mask2CurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))), mask2CurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))),
LLmask_shapewav(static_cast<FlatCurveEditor*>(mask2CurveEditorGwav->addCurve(CT_Flat, "L(L)", nullptr, false, false))), LLmask_shapewav(static_cast<FlatCurveEditor*>(mask2CurveEditorGwav->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
csThresholdmask(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))) csThresholdmask(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))),
gradFramemask(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADFRA")))),
str_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2., 2., 0.05, 0.))),
ang_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180., 180., 0.1, 0.)))
{ {
// Parameter Mask common specific widgets // Parameter Mask common specific widgets
@ -4861,6 +4864,18 @@ LocallabMask::LocallabMask():
blurFrame->add(*blurmBox); blurFrame->add(*blurmBox);
maskmaskBox->pack_start(*blurFrame, Gtk::PACK_SHRINK, 0); maskmaskBox->pack_start(*blurFrame, Gtk::PACK_SHRINK, 0);
gradFramemask->set_label_align(0.025, 0.5);
str_mask->setAdjusterListener(this);
ang_mask->setAdjusterListener(this);
ang_mask->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP"));
ToolParamBlock* const gradmaskBox = Gtk::manage(new ToolParamBlock());
gradmaskBox->pack_start(*str_mask);
gradmaskBox->pack_start(*ang_mask);
gradFramemask->add(*gradmaskBox);
Gtk::Frame* const toolmaskFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK"))); Gtk::Frame* const toolmaskFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")));
toolmaskFrame->set_label_align(0.025, 0.5); toolmaskFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const toolmaskBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const toolmaskBox = Gtk::manage(new ToolParamBlock());
@ -4875,6 +4890,7 @@ LocallabMask::LocallabMask():
toolmaskBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor toolmaskBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
toolmaskBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor toolmaskBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
toolmaskBox->pack_start(*csThresholdmask, Gtk::PACK_SHRINK, 0); toolmaskBox->pack_start(*csThresholdmask, Gtk::PACK_SHRINK, 0);
toolmaskBox->pack_start(*gradFramemask, Gtk::PACK_SHRINK, 0);
toolmaskFrame->add(*toolmaskBox); toolmaskFrame->add(*toolmaskBox);
maskmaskBox->pack_start(*toolmaskFrame); maskmaskBox->pack_start(*toolmaskFrame);
pack_start(*maskmaskBox); pack_start(*maskmaskBox);
@ -5014,6 +5030,8 @@ void LocallabMask::read(const rtengine::procparams::ProcParams* pp, const Params
gammask->setValue(spot.gammask); gammask->setValue(spot.gammask);
slopmask->setValue(spot.slopmask); slopmask->setValue(spot.slopmask);
shadmask->setValue(spot.shadmask); shadmask->setValue(spot.shadmask);
str_mask->setValue(spot.str_mask);
ang_mask->setValue(spot.ang_mask);
HHhmask_shape->setCurve(spot.HHhmask_curve); HHhmask_shape->setCurve(spot.HHhmask_curve);
fftmask->set_active(spot.fftmask); fftmask->set_active(spot.fftmask);
Lmask_shape->setCurve(spot.Lmask_curve); Lmask_shape->setCurve(spot.Lmask_curve);
@ -5057,6 +5075,8 @@ void LocallabMask::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped
spot.gammask = gammask->getValue(); spot.gammask = gammask->getValue();
spot.slopmask = slopmask->getValue(); spot.slopmask = slopmask->getValue();
spot.shadmask = shadmask->getValue(); spot.shadmask = shadmask->getValue();
spot.str_mask = str_mask->getIntValue();
spot.ang_mask = ang_mask->getIntValue();
spot.HHhmask_curve = HHhmask_shape->getCurve(); spot.HHhmask_curve = HHhmask_shape->getCurve();
spot.fftmask = fftmask->get_active(); spot.fftmask = fftmask->get_active();
spot.contmask = contmask->getValue(); spot.contmask = contmask->getValue();
@ -5105,6 +5125,8 @@ void LocallabMask::setDefaults(const rtengine::procparams::ProcParams* defParams
lapmask->setDefault(defSpot.lapmask); lapmask->setDefault(defSpot.lapmask);
slopmask->setDefault(defSpot.slopmask); slopmask->setDefault(defSpot.slopmask);
shadmask->setDefault(defSpot.shadmask); shadmask->setDefault(defSpot.shadmask);
str_mask->setDefault(defSpot.str_mask);
ang_mask->setDefault(defSpot.ang_mask);
HHhmask_shape->setCurve(defSpot.HHhmask_curve); HHhmask_shape->setCurve(defSpot.HHhmask_curve);
contmask->setDefault(defSpot.contmask); contmask->setDefault(defSpot.contmask);
blurmask->setDefault(defSpot.blurmask); blurmask->setDefault(defSpot.blurmask);
@ -5123,8 +5145,11 @@ void LocallabMask::updateGUIToMode(const modeType new_type)
gammask->hide(); gammask->hide();
slopmask->hide(); slopmask->hide();
shadmask->hide(); shadmask->hide();
str_mask->hide();
ang_mask->hide();
struFrame->hide(); struFrame->hide();
blurFrame->hide(); blurFrame->hide();
gradFramemask->hide();
mask_HCurveEditorG->hide(); mask_HCurveEditorG->hide();
// mask2CurveEditorG->hide(); // mask2CurveEditorG->hide();
mask2CurveEditorGwav->hide(); mask2CurveEditorGwav->hide();
@ -5136,8 +5161,11 @@ void LocallabMask::updateGUIToMode(const modeType new_type)
gammask->show(); gammask->show();
slopmask->show(); slopmask->show();
shadmask->show(); shadmask->show();
str_mask->show();
ang_mask->show();
struFrame->show(); struFrame->show();
blurFrame->show(); blurFrame->show();
gradFramemask->show();
mask_HCurveEditorG->show(); mask_HCurveEditorG->show();
// mask2CurveEditorG->show(); // mask2CurveEditorG->show();
mask2CurveEditorGwav->show(); mask2CurveEditorGwav->show();
@ -5158,6 +5186,8 @@ void LocallabMask::convertParamToNormal()
gammask->setValue(defSpot.gammask); gammask->setValue(defSpot.gammask);
slopmask->setValue(defSpot.slopmask); slopmask->setValue(defSpot.slopmask);
shadmask->setValue(defSpot.shadmask); shadmask->setValue(defSpot.shadmask);
str_mask->setValue(defSpot.str_mask);
ang_mask->setValue(defSpot.ang_mask);
strumaskmask->setValue(defSpot.strumaskmask); strumaskmask->setValue(defSpot.strumaskmask);
toolmask->set_active(defSpot.toolmask); toolmask->set_active(defSpot.toolmask);
fftmask->set_active(defSpot.fftmask); fftmask->set_active(defSpot.fftmask);
@ -5358,6 +5388,20 @@ void LocallabMask::adjusterChanged(Adjuster* a, double newval)
} }
} }
if (a == str_mask) {
if (listener) {
listener->panelChanged(Evlocallabstr_mask,
str_mask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == ang_mask) {
if (listener) {
listener->panelChanged(Evlocallabang_mask,
ang_mask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
} }
} }

View File

@ -1498,6 +1498,8 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).gammask = locallab.spots.at(j).gammask && pSpot.gammask == otherSpot.gammask; locallab.spots.at(j).gammask = locallab.spots.at(j).gammask && pSpot.gammask == otherSpot.gammask;
locallab.spots.at(j).slopmask = locallab.spots.at(j).slopmask && pSpot.slopmask == otherSpot.slopmask; locallab.spots.at(j).slopmask = locallab.spots.at(j).slopmask && pSpot.slopmask == otherSpot.slopmask;
locallab.spots.at(j).shadmask = locallab.spots.at(j).shadmask && pSpot.shadmask == otherSpot.shadmask; locallab.spots.at(j).shadmask = locallab.spots.at(j).shadmask && pSpot.shadmask == otherSpot.shadmask;
locallab.spots.at(j).str_mask = locallab.spots.at(j).str_mask && pSpot.str_mask == otherSpot.str_mask;
locallab.spots.at(j).ang_mask = locallab.spots.at(j).ang_mask && pSpot.ang_mask == otherSpot.ang_mask;
locallab.spots.at(j).HHhmask_curve = locallab.spots.at(j).HHhmask_curve && pSpot.HHhmask_curve == otherSpot.HHhmask_curve; locallab.spots.at(j).HHhmask_curve = locallab.spots.at(j).HHhmask_curve && pSpot.HHhmask_curve == otherSpot.HHhmask_curve;
locallab.spots.at(j).Lmask_curve = locallab.spots.at(j).Lmask_curve && pSpot.Lmask_curve == otherSpot.Lmask_curve; locallab.spots.at(j).Lmask_curve = locallab.spots.at(j).Lmask_curve && pSpot.Lmask_curve == otherSpot.Lmask_curve;
locallab.spots.at(j).LLmask_curvewav = locallab.spots.at(j).LLmask_curvewav && pSpot.LLmask_curvewav == otherSpot.LLmask_curvewav; locallab.spots.at(j).LLmask_curvewav = locallab.spots.at(j).LLmask_curvewav && pSpot.LLmask_curvewav == otherSpot.LLmask_curvewav;
@ -4888,6 +4890,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).shadmask = mods.locallab.spots.at(i).shadmask; toEdit.locallab.spots.at(i).shadmask = mods.locallab.spots.at(i).shadmask;
} }
if (locallab.spots.at(i).str_mask) {
toEdit.locallab.spots.at(i).str_mask = mods.locallab.spots.at(i).str_mask;
}
if (locallab.spots.at(i).ang_mask) {
toEdit.locallab.spots.at(i).ang_mask = mods.locallab.spots.at(i).ang_mask;
}
if (locallab.spots.at(i).HHhmask_curve) { if (locallab.spots.at(i).HHhmask_curve) {
toEdit.locallab.spots.at(i).HHhmask_curve = mods.locallab.spots.at(i).HHhmask_curve; toEdit.locallab.spots.at(i).HHhmask_curve = mods.locallab.spots.at(i).HHhmask_curve;
} }
@ -6494,6 +6504,8 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
gammask(v), gammask(v),
slopmask(v), slopmask(v),
shadmask(v), shadmask(v),
str_mask(v),
ang_mask(v),
HHhmask_curve(v), HHhmask_curve(v),
Lmask_curve(v), Lmask_curve(v),
LLmask_curvewav(v), LLmask_curvewav(v),
@ -6980,6 +6992,8 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
gammask = v; gammask = v;
slopmask = v; slopmask = v;
shadmask = v; shadmask = v;
str_mask = v;
ang_mask = v;
HHhmask_curve =(v); HHhmask_curve =(v);
Lmask_curve =(v); Lmask_curve =(v);
LLmask_curvewav =(v); LLmask_curvewav =(v);

View File

@ -856,6 +856,8 @@ public:
bool gammask; bool gammask;
bool slopmask; bool slopmask;
bool shadmask; bool shadmask;
bool str_mask;
bool ang_mask;
bool HHhmask_curve; bool HHhmask_curve;
bool Lmask_curve; bool Lmask_curve;
bool LLmask_curvewav; bool LLmask_curvewav;