Improvment mask color - structure as tool
This commit is contained in:
parent
61e2e1c4a1
commit
a1d17b3090
@ -1043,6 +1043,7 @@ HISTORY_MSG_802;Local - Contrast threshold
|
||||
HISTORY_MSG_803;Local - Color Merge
|
||||
HISTORY_MSG_804;Local - Color mask Structure
|
||||
HISTORY_MSG_805;Local - Blur Noise mask Structure
|
||||
HISTORY_MSG_806;Local - Color mask Structure as tool
|
||||
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
|
||||
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
|
||||
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
|
||||
@ -2147,6 +2148,8 @@ TP_LOCALLAB_SHAMASKCOL;Shadows mask
|
||||
TP_LOCALLAB_STRUMASKCOL;Structure mask
|
||||
TP_LOCALLAB_HIGHMASKCOL;Highlights mask
|
||||
TP_LOCALLAB_LAPMASKCOL;Laplacian threshold mask
|
||||
TP_LOCALLAB_TOOLMASK;Tools
|
||||
TP_LOCALLAB_TOOLCOL;Structure mask as tool
|
||||
TP_LOCALLAB_LUMADARKEST;Darkest
|
||||
TP_LOCALLAB_LUMAWHITESEST;Whiteest
|
||||
TP_LOCALLAB_SH1;Shadows Highlights
|
||||
@ -2188,7 +2191,7 @@ TP_LOCALLAB_MERNIN;Screen
|
||||
TP_LOCALLAB_MERTEN;Darken only
|
||||
TP_LOCALLAB_MERELE;Lighten only
|
||||
TP_LOCALLAB_MERTWE;Exclusion
|
||||
TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTake into account deltaE image to avoid retouching the selection area when sliders gamma mask, slope mask, chroma mask and contrast curves and levels contrasts curves are used.\nDisabled in Inverse
|
||||
TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTake into account deltaE image to avoid retouching the selection area when sliders gamma mask, slope mask, chroma mask and contrast curves and levels contrasts curves and structure mask (if enabled tool) are used.\nDisabled in Inverse
|
||||
TP_LOCALLAB_WAMASKCOL;Mask Wavelet level
|
||||
TP_LOCALLAB_CSTHRESHOLDBLUR;Mask Wavelet level
|
||||
TP_LOCALLAB_LAPLACC;Mask Laplacian solve PDE
|
||||
|
@ -216,7 +216,7 @@ public:
|
||||
int pitch, int scale, const int luma, const int chroma/*, LUTf & Lcurve, LUTf & abcurve*/);
|
||||
//locallab
|
||||
void maskcalccol(bool invmask, bool pde, int bfw, int bfh, int xstart, int ystart, int sk, int cx, int cy, LabImage* bufcolorig, LabImage* bufmaskblurcol, LabImage* originalmaskcol, LabImage* original, int inv, const struct local_params & lp,
|
||||
float strumask,
|
||||
float strumask, bool astool,
|
||||
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili,
|
||||
const LocLLmaskCurve & locllmasCurve, bool & llmasutili,
|
||||
const LocHHmaskCurve & lochhmasCurve, bool &lhmasutili,
|
||||
|
@ -3184,7 +3184,7 @@ void ImProcFunctions::retinex_pde(float * datain, float * dataout, int bfw, int
|
||||
}
|
||||
|
||||
void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int xstart, int ystart, int sk, int cx, int cy, LabImage* bufcolorig, LabImage* bufmaskblurcol, LabImage* originalmaskcol, LabImage* original, int inv, const struct local_params & lp,
|
||||
float strumask,
|
||||
float strumask, bool astool,
|
||||
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili,
|
||||
const LocLLmaskCurve & locllmasCurve, bool & llmasutili,
|
||||
const LocHHmaskCurve & lochhmasCurve, bool &lhmasutili,
|
||||
@ -3271,7 +3271,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
|
||||
float kmaskH = 0.f;
|
||||
float kmasstru = 0.f;
|
||||
|
||||
if(strumask > 0.f){
|
||||
if(strumask > 0.f && !astool){
|
||||
kmasstru = bufcolorig->L[ir][jr]* blendstru[ir][jr];
|
||||
}
|
||||
|
||||
@ -3329,6 +3329,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
|
||||
|
||||
bufprov->CopyFrom(bufmaskblurcol);
|
||||
|
||||
|
||||
if (rad > 0.f) {
|
||||
guidedFilter(guid, ble, ble, rad * 10.f / sk, 0.001, multiThread, 4);
|
||||
}
|
||||
@ -3346,6 +3347,19 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
|
||||
}
|
||||
}
|
||||
|
||||
if(strumask > 0.f && astool){
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for schedule(dynamic,16)
|
||||
#endif
|
||||
|
||||
for (int ir = 0; ir < bfh; ir++) {
|
||||
for (int jr = 0; jr < bfw; jr++) {
|
||||
bufmaskblurcol->L[ir][jr] *= blendstru[ir][jr];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (lmasklocalcurve && localmaskutili) {
|
||||
#ifdef _OPENMP
|
||||
@ -7608,8 +7622,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
}
|
||||
|
||||
bool blurz = false;
|
||||
bool delt = params->locallab.spots.at(sp).deltae;
|
||||
|
||||
if (((radius > 1.5 * GAUSS_SKIP) || lp.stren > 0.1 || lp.blmet == 1 || lp.guidb > 1 || lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.blurena) {
|
||||
if (((radius > 1.5 * GAUSS_SKIP) || lp.stren > 0.1 || lp.blmet == 1 || lp.guidb > 1 || lp.showmaskblmet == 2 || delt || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.blurena) {
|
||||
blurz = true;
|
||||
}
|
||||
|
||||
@ -7620,7 +7635,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
std::unique_ptr<LabImage> bufmaskorigbl;
|
||||
std::unique_ptr<LabImage> bufmaskblurbl;
|
||||
std::unique_ptr<LabImage> bufgb;
|
||||
std::unique_ptr<LabImage> bufprov;
|
||||
std::unique_ptr<LabImage> bufprov(new LabImage(GW, GH));
|
||||
|
||||
if (denoiz || blurz || lp.denoiena || lp.blurena) {
|
||||
bufgb.reset(new LabImage(GW, GH));
|
||||
@ -7628,7 +7643,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
if (lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) {
|
||||
bufmaskorigbl.reset(new LabImage(GW, GH));
|
||||
bufmaskblurbl.reset(new LabImage(GW, GH));
|
||||
bufprov.reset(new LabImage(GW, GH));
|
||||
originalmaskbl = new LabImage(GW, GH);
|
||||
}
|
||||
|
||||
@ -7720,12 +7734,11 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
Color::Lab2XYZ(L, a, b, X, Y, Z);
|
||||
|
||||
guid[ir][jr] = Y / 32768.f;
|
||||
|
||||
bufprov->L[ir][jr] = bufmaskblurbl->L[ir][jr];
|
||||
bufprov->a[ir][jr] = bufmaskblurbl->a[ir][jr];
|
||||
bufprov->b[ir][jr] = bufmaskblurbl->b[ir][jr];
|
||||
}
|
||||
}
|
||||
std::unique_ptr<LabImage> bufprov(new LabImage(GW, GH));
|
||||
|
||||
bufprov->CopyFrom(bufmaskblurbl.get());
|
||||
|
||||
|
||||
if (lp.radmabl > 0.f) {
|
||||
@ -7806,20 +7819,20 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
}
|
||||
|
||||
// deltae Mask with scope
|
||||
bool delt = params->locallab.spots.at(sp).deltae;
|
||||
// bool delt = params->locallab.spots.at(sp).deltae;
|
||||
int sco = params->locallab.spots.at(sp).scopemask;
|
||||
const int limscope = 80;
|
||||
const float mindE = 2.f + MINSCOPE * sco * lp.thr;
|
||||
const float maxdE = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr);
|
||||
const float mindElim = 2.f + MINSCOPE * limscope * lp.thr;
|
||||
const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr);
|
||||
|
||||
//printf("minde=%f maxde=%f, scopee=%i huref=%f lumaref=%f chromaref=%f\n", mindE, maxdE, sco, hueref, lumaref, chromaref);
|
||||
if (delt && lp.blurmet == 0 && (lp.enablMask || lp.showmaskblmet == 3)) {
|
||||
std::unique_ptr<JaggedArray<float>> rdEBuffer(new JaggedArray<float>(GW, GH));
|
||||
float** rdE = *(rdEBuffer.get());
|
||||
|
||||
deltaEforMask(rdE, GW, GH, bufgb.get(), hueref, chromaref, lumaref, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.balance);
|
||||
// printf("rde1=%f rde2=%f\n", rdE[1][1], rdE[100][100]);
|
||||
// printf("rde1=%f rde2=%f\n", rdE[1][1], rdE[100][100]);
|
||||
std::unique_ptr<LabImage> delta(new LabImage(GW, GH));
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for schedule(dynamic,16)
|
||||
@ -8453,7 +8466,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
int shortcu = 0; //lp.mergemet; //params->locallab.spots.at(sp).shortc;
|
||||
|
||||
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, loctemp.get(), bufmaskorigcb.get(), originalmaskcb.get(), original, inv, lp,
|
||||
0.f,
|
||||
0.f, false,
|
||||
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, multiThread,
|
||||
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,
|
||||
@ -8762,7 +8775,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
float anchorcd = 50.f;
|
||||
|
||||
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgbm.get(), bufmaskorigtm.get(), originalmasktm.get(), original, inv, lp,
|
||||
0.f,
|
||||
0.f, false,
|
||||
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, multiThread,
|
||||
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,
|
||||
@ -8804,7 +8817,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
float anchorcd = 50.f;
|
||||
|
||||
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, tmp1.get(), bufmaskorigtm.get(), originalmasktm.get(), original, inv, lp,
|
||||
0.f,
|
||||
0.f, false,
|
||||
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, multiThread,
|
||||
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,
|
||||
@ -9007,7 +9020,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
int lumask = params->locallab.spots.at(sp).lumask;
|
||||
|
||||
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskorigSH.get(), originalmaskSH.get(), original, inv, lp,
|
||||
0.f,
|
||||
0.f, false,
|
||||
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread,
|
||||
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,
|
||||
@ -9159,7 +9172,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
int lumask = params->locallab.spots.at(sp).lumask;
|
||||
|
||||
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskSH.get(), original, inv, lp,
|
||||
0.f,
|
||||
0.f, false,
|
||||
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, multiThread,
|
||||
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,
|
||||
@ -11233,7 +11246,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
int lumask = params->locallab.spots.at(sp).lumask;
|
||||
|
||||
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, inv, lp,
|
||||
0.f,
|
||||
0.f, false,
|
||||
locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, multiThread,
|
||||
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,
|
||||
@ -11526,7 +11539,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
float anchorcd = 50.f;
|
||||
|
||||
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, inv, lp,
|
||||
0.f,
|
||||
0.f, false,
|
||||
locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, multiThread,
|
||||
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,
|
||||
@ -11790,6 +11803,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
float pde = params->locallab.spots.at(sp).laplac;
|
||||
int shado = params->locallab.spots.at(sp).shadmaskcol;
|
||||
bool delt = params->locallab.spots.at(sp).deltae;
|
||||
bool astool = params->locallab.spots.at(sp).toolcol;
|
||||
int sco = params->locallab.spots.at(sp).scopemask;
|
||||
int level_bl = params->locallab.spots.at(sp).csthresholdcol.getBottomLeft();
|
||||
int level_hl = params->locallab.spots.at(sp).csthresholdcol.getTopLeft();
|
||||
@ -11821,7 +11835,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
|
||||
// if (lp.mergemet != 2) {
|
||||
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, inv, lp,
|
||||
strumask,
|
||||
strumask, astool,
|
||||
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,
|
||||
@ -12590,6 +12604,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
int level_hr = params->locallab.spots.at(sp).csthresholdcol.getTopRight();
|
||||
// bool delt = params->locallab.spots.at(sp).deltae;
|
||||
bool delt = false;
|
||||
bool astool = params->locallab.spots.at(sp).toolcol;
|
||||
int sco = params->locallab.spots.at(sp).scopemask;
|
||||
int shortcu = lp.mergemet; //params->locallab.spots.at(sp).shortc;
|
||||
int lumask = params->locallab.spots.at(sp).lumask;
|
||||
@ -12604,7 +12619,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
float anchorcd = 50.f;
|
||||
|
||||
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, inv, lp,
|
||||
strumask,
|
||||
strumask, astool,
|
||||
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,
|
||||
|
@ -829,6 +829,7 @@ enum ProcEventCode {
|
||||
EvLocallabmerMethod = 802,
|
||||
Evlocallabstrumaskcol = 803,
|
||||
Evlocallabstrumaskbl = 804,
|
||||
EvLocallabtoolcol = 805,
|
||||
NUMOFEVENTS
|
||||
};
|
||||
|
||||
|
@ -2477,6 +2477,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
||||
HHcurve{(double)FCT_MinMaxCPoints, 0.0, 0.50, 0.35, 0.35, 0.166, 0.50, 0.35, 0.35, 0.333, 0.50, 0.35, 0.35, 0.50, 0.50, 0.35, 0.35, 0.666, 0.50, 0.35, 0.35, 0.833, 0.50, 0.35, 0.35},
|
||||
invers(false),
|
||||
special(false),
|
||||
toolcol(true),
|
||||
enaColorMask(false),
|
||||
CCmaskcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.00, 1.0, 0.35, 0.35 },
|
||||
LLmaskcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.00, 1.0, 0.35, 0.35 },
|
||||
@ -2795,6 +2796,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
|
||||
&& HHcurve == other.HHcurve
|
||||
&& invers == other.invers
|
||||
&& special == other.special
|
||||
&& toolcol == other.toolcol
|
||||
&& enaColorMask == other.enaColorMask
|
||||
&& CCmaskcurve == other.CCmaskcurve
|
||||
&& LLmaskcurve == other.LLmaskcurve
|
||||
@ -4110,6 +4112,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHcurve, "Locallab", "HHCurve_" + std::to_string(i), spot.HHcurve, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).invers, "Locallab", "Invers_" + std::to_string(i), spot.invers, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).special, "Locallab", "Special_" + std::to_string(i), spot.special, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).toolcol, "Locallab", "Toolcol_" + std::to_string(i), spot.toolcol, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).enaColorMask, "Locallab", "EnaColorMask_" + std::to_string(i), spot.enaColorMask, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).CCmaskcurve, "Locallab", "CCmaskCurve_" + std::to_string(i), spot.CCmaskcurve, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmaskcurve, "Locallab", "LLmaskCurve_" + std::to_string(i), spot.LLmaskcurve, keyFile);
|
||||
@ -5531,6 +5534,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
||||
assignFromKeyfile(keyFile, "Locallab", "HHCurve_" + std::to_string(i), pedited, spot.HHcurve, spotEdited.HHcurve);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Invers_" + std::to_string(i), pedited, spot.invers, spotEdited.invers);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Special_" + std::to_string(i), pedited, spot.special, spotEdited.special);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Toolcol_" + std::to_string(i), pedited, spot.toolcol, spotEdited.toolcol);
|
||||
assignFromKeyfile(keyFile, "Locallab", "EnaColorMask_" + std::to_string(i), pedited, spot.enaColorMask, spotEdited.enaColorMask);
|
||||
assignFromKeyfile(keyFile, "Locallab", "CCmaskCurve_" + std::to_string(i), pedited, spot.CCmaskcurve, spotEdited.CCmaskcurve);
|
||||
assignFromKeyfile(keyFile, "Locallab", "LLmaskCurve_" + std::to_string(i), pedited, spot.LLmaskcurve, spotEdited.LLmaskcurve);
|
||||
|
@ -1021,6 +1021,7 @@ struct LocallabParams {
|
||||
std::vector<double> HHcurve;
|
||||
bool invers;
|
||||
bool special;
|
||||
bool toolcol;
|
||||
bool enaColorMask;
|
||||
std::vector<double> CCmaskcurve;
|
||||
std::vector<double> LLmaskcurve;
|
||||
|
@ -832,7 +832,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
LUMINANCECURVE, //EvLocallabconthrcol
|
||||
LUMINANCECURVE, //EvLocallabmerMethod
|
||||
LUMINANCECURVE, //EvLocallabstrumaskcol
|
||||
LUMINANCECURVE //EvLocallabstrumaskbl
|
||||
LUMINANCECURVE, //EvLocallabstrumaskbl
|
||||
LUMINANCECURVE // EvLocallabtoolcol
|
||||
};
|
||||
|
||||
namespace rtengine
|
||||
|
@ -471,6 +471,7 @@ detailthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAILTHR"), 0, 100, 1, 0))),
|
||||
curvactiv(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_CURV")))),
|
||||
invers(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))),
|
||||
special(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SPECIAL")))),
|
||||
toolcol(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))),
|
||||
enaColorMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
|
||||
// Exposure
|
||||
enaExpMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
|
||||
@ -556,6 +557,7 @@ lumacontrastMinusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACO
|
||||
lumaneutralButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMANEUTRAL")))),
|
||||
lumacontrastPlusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS")))),
|
||||
gridFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABGRID")))),
|
||||
toolcolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")))),
|
||||
mergecolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_MERGECOLFRA")))),
|
||||
merge1colFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_MERGE1COLFRA")))),
|
||||
pdeFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_PDEFRA")))),
|
||||
@ -776,6 +778,7 @@ pe(nullptr)
|
||||
|
||||
inversConn = invers->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversChanged));
|
||||
specialConn = special->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::specialChanged));
|
||||
toolcolConn = toolcol->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::toolcolChanged));
|
||||
|
||||
|
||||
mergecolMethod->append(M("TP_LOCALLAB_MERONE"));
|
||||
@ -943,17 +946,24 @@ pe(nullptr)
|
||||
maskcolBox->pack_start(*enaColorMask, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*maskCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||
maskcolBox->pack_start(*strumaskcol, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*toolcol);
|
||||
|
||||
maskcolBox->pack_start(*separatorstru, Gtk::PACK_SHRINK, 2);
|
||||
toolcolFrame->set_label_align(0.025, 0.5);
|
||||
ToolParamBlock* const toolcolBox = Gtk::manage(new ToolParamBlock());
|
||||
|
||||
maskcolBox->pack_start(*blendmaskcol, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*radmaskcol, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*lapmaskcol, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*chromaskcol, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*gammaskcol, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*slomaskcol, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*shadmaskcol, Gtk::PACK_SHRINK, 0);
|
||||
maskcolBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||
maskcolBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||
maskcolBox->pack_start(*csThresholdcol, Gtk::PACK_SHRINK, 0);
|
||||
toolcolBox->pack_start(*radmaskcol, Gtk::PACK_SHRINK, 0);
|
||||
toolcolBox->pack_start(*lapmaskcol, Gtk::PACK_SHRINK, 0);
|
||||
toolcolBox->pack_start(*chromaskcol, Gtk::PACK_SHRINK, 0);
|
||||
toolcolBox->pack_start(*gammaskcol, Gtk::PACK_SHRINK, 0);
|
||||
toolcolBox->pack_start(*slomaskcol, Gtk::PACK_SHRINK, 0);
|
||||
toolcolBox->pack_start(*shadmaskcol, Gtk::PACK_SHRINK, 0);
|
||||
toolcolBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||
toolcolBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||
toolcolBox->pack_start(*csThresholdcol, Gtk::PACK_SHRINK, 0);
|
||||
toolcolFrame->add(*toolcolBox);
|
||||
maskcolBox->pack_start(*toolcolFrame);
|
||||
|
||||
mergecolFrame->add(*maskcolBox);
|
||||
ToolParamBlock* const mask7Box = Gtk::manage(new ToolParamBlock());
|
||||
@ -3694,6 +3704,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pp->locallab.spots.at(pp->locallab.selspot).HHcurve = HHshape->getCurve();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).invers = invers->get_active();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).special = special->get_active();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).toolcol = toolcol->get_active();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).enaColorMask = enaColorMask->get_active();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).CCmaskcurve = CCmaskshape->getCurve();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).LLmaskcurve = LLmaskshape->getCurve();
|
||||
@ -4090,6 +4101,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pe->locallab.spots.at(pp->locallab.selspot).HHcurve = pe->locallab.spots.at(pp->locallab.selspot).HHcurve || !HHshape->isUnChanged();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).invers = pe->locallab.spots.at(pp->locallab.selspot).invers || !invers->get_inconsistent();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).special = pe->locallab.spots.at(pp->locallab.selspot).special || !special->get_inconsistent();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).toolcol = pe->locallab.spots.at(pp->locallab.selspot).toolcol || !toolcol->get_inconsistent();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).enaColorMask = pe->locallab.spots.at(pp->locallab.selspot).enaColorMask || !enaColorMask->get_inconsistent();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).CCmaskcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskcurve || !CCmaskshape->isUnChanged();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).LLmaskcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskcurve || !LLmaskshape->isUnChanged();
|
||||
@ -4418,6 +4430,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).HHcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHcurve || !HHshape->isUnChanged();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).invers = pedited->locallab.spots.at(pp->locallab.selspot).invers || !invers->get_inconsistent();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).special = pedited->locallab.spots.at(pp->locallab.selspot).special || !special->get_inconsistent();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).toolcol = pedited->locallab.spots.at(pp->locallab.selspot).toolcol || !toolcol->get_inconsistent();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).enaColorMask = pedited->locallab.spots.at(pp->locallab.selspot).enaColorMask || !enaColorMask->get_inconsistent();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).CCmaskcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskcurve || !CCmaskshape->isUnChanged();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcurve || !LLmaskshape->isUnChanged();
|
||||
@ -5684,6 +5697,29 @@ void Locallab::specialChanged()
|
||||
}
|
||||
}
|
||||
|
||||
void Locallab::toolcolChanged()
|
||||
{
|
||||
|
||||
if (multiImage) {
|
||||
if (toolcol->get_inconsistent()) {
|
||||
toolcol->set_inconsistent(false);
|
||||
toolcolConn.block(true);
|
||||
toolcol->set_active(false);
|
||||
toolcolConn.block(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (getEnabled() && expcolor->getEnabled()) {
|
||||
if (listener) {
|
||||
if (toolcol->get_active()) {
|
||||
listener->panelChanged(EvLocallabtoolcol, M("GENERAL_ENABLED"));
|
||||
} else {
|
||||
listener->panelChanged(EvLocallabtoolcol, M("GENERAL_DISABLED"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Locallab::enaColorMaskChanged()
|
||||
{
|
||||
// printf("enaColorMaskChanged\n");
|
||||
@ -8681,6 +8717,7 @@ void Locallab::enableListener()
|
||||
mergecolMethodConn.block(false);
|
||||
inversConn.block(false);
|
||||
specialConn.block(false);
|
||||
toolcolConn.block(false);
|
||||
showmaskcolMethodConn.block(false);
|
||||
showmaskcolMethodConninv.block(false);
|
||||
enaColorMaskConn.block(false);
|
||||
@ -8765,6 +8802,7 @@ void Locallab::disableListener()
|
||||
mergecolMethodConn.block(true);
|
||||
inversConn.block(true);
|
||||
specialConn.block(true);
|
||||
toolcolConn.block(true);
|
||||
showmaskcolMethodConn.block(true);
|
||||
showmaskcolMethodConninv.block(true);
|
||||
enaColorMaskConn.block(true);
|
||||
@ -8932,6 +8970,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
HHshape->setCurve(pp->locallab.spots.at(index).HHcurve);
|
||||
invers->set_active(pp->locallab.spots.at(index).invers);
|
||||
special->set_active(pp->locallab.spots.at(index).special);
|
||||
toolcol->set_active(pp->locallab.spots.at(index).toolcol);
|
||||
enaColorMask->set_active(pp->locallab.spots.at(index).enaColorMask);
|
||||
CCmaskshape->setCurve(pp->locallab.spots.at(index).CCmaskcurve);
|
||||
LLmaskshape->setCurve(pp->locallab.spots.at(index).LLmaskcurve);
|
||||
@ -9362,6 +9401,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
HHshape->setUnChanged(!spotState->HHcurve);
|
||||
invers->set_inconsistent(multiImage && !spotState->invers);
|
||||
special->set_inconsistent(multiImage && !spotState->special);
|
||||
toolcol->set_inconsistent(multiImage && !spotState->toolcol);
|
||||
enaColorMask->set_inconsistent(multiImage && !spotState->enaColorMask);
|
||||
CCmaskshape->setUnChanged(!spotState->CCmaskcurve);
|
||||
LLmaskshape->setUnChanged(!spotState->LLmaskcurve);
|
||||
|
@ -337,8 +337,9 @@ private:
|
||||
Gtk::CheckButton* const curvactiv;
|
||||
Gtk::CheckButton* const invers;
|
||||
Gtk::CheckButton* const special;
|
||||
Gtk::CheckButton* const toolcol;
|
||||
Gtk::CheckButton* const enaColorMask;
|
||||
sigc::connection curvactivConn, inversConn, enaColorMaskConn, specialConn;
|
||||
sigc::connection curvactivConn, inversConn, enaColorMaskConn, specialConn, toolcolConn;
|
||||
// Exposure
|
||||
Gtk::CheckButton* const enaExpMask;
|
||||
sigc::connection enaExpMaskConn;
|
||||
@ -472,6 +473,7 @@ private:
|
||||
Gtk::Button* const lumacontrastPlusButton;
|
||||
sigc::connection lumacontrastMinusPressedConn, lumaneutralPressedConn, lumacontrastPlusPressedConn;
|
||||
Gtk::Frame* const gridFrame;
|
||||
Gtk::Frame* const toolcolFrame;
|
||||
Gtk::Frame* const mergecolFrame;
|
||||
Gtk::Frame* const merge1colFrame;
|
||||
Gtk::Frame* const pdeFrame;
|
||||
@ -527,6 +529,7 @@ private:
|
||||
void curvactivChanged();
|
||||
void inversChanged();
|
||||
void specialChanged();
|
||||
void toolcolChanged();
|
||||
void enaColorMaskChanged();
|
||||
// Exposure
|
||||
void enaExpMaskChanged();
|
||||
|
@ -1013,6 +1013,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
||||
locallab.spots.at(j).HHcurve = locallab.spots.at(j).HHcurve && pSpot.HHcurve == otherSpot.HHcurve;
|
||||
locallab.spots.at(j).invers = locallab.spots.at(j).invers && pSpot.invers == otherSpot.invers;
|
||||
locallab.spots.at(j).special = locallab.spots.at(j).special && pSpot.special == otherSpot.special;
|
||||
locallab.spots.at(j).toolcol = locallab.spots.at(j).toolcol && pSpot.toolcol == otherSpot.toolcol;
|
||||
locallab.spots.at(j).enaColorMask = locallab.spots.at(j).enaColorMask && pSpot.enaColorMask == otherSpot.enaColorMask;
|
||||
locallab.spots.at(j).CCmaskcurve = locallab.spots.at(j).CCmaskcurve && pSpot.CCmaskcurve == otherSpot.CCmaskcurve;
|
||||
locallab.spots.at(j).LLmaskcurve = locallab.spots.at(j).LLmaskcurve && pSpot.LLmaskcurve == otherSpot.LLmaskcurve;
|
||||
@ -2981,6 +2982,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
||||
toEdit.locallab.spots.at(i).special = mods.locallab.spots.at(i).special;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).toolcol) {
|
||||
toEdit.locallab.spots.at(i).toolcol = mods.locallab.spots.at(i).toolcol;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).enaColorMask) {
|
||||
toEdit.locallab.spots.at(i).enaColorMask = mods.locallab.spots.at(i).enaColorMask;
|
||||
}
|
||||
@ -4966,6 +4971,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
|
||||
HHcurve(v),
|
||||
invers(v),
|
||||
special(v),
|
||||
toolcol(v),
|
||||
enaColorMask(v),
|
||||
CCmaskcurve(v),
|
||||
LLmaskcurve(v),
|
||||
@ -5282,6 +5288,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
|
||||
HHcurve = v;
|
||||
invers = v;
|
||||
special = v;
|
||||
toolcol = v;
|
||||
enaColorMask = v;
|
||||
CCmaskcurve = v;
|
||||
LLmaskcurve = v;
|
||||
|
@ -444,6 +444,7 @@ public:
|
||||
bool HHcurve;
|
||||
bool invers;
|
||||
bool special;
|
||||
bool toolcol;
|
||||
bool enaColorMask;
|
||||
bool CCmaskcurve;
|
||||
bool LLmaskcurve;
|
||||
|
Loading…
x
Reference in New Issue
Block a user