Add chroma to blur levels

This commit is contained in:
Desmis 2019-12-22 06:47:08 +01:00
parent 8d38dda3ce
commit e1a938e3a4
11 changed files with 146 additions and 16 deletions

View File

@ -1115,6 +1115,7 @@ HISTORY_MSG_876;Local - LC mask radius
HISTORY_MSG_877;Local - LC mask chroma
HISTORY_MSG_878;Local - LC mask curve contrast
HISTORY_MSG_879;Local - LC Chroma levels
HISTORY_MSG_880;Local - LC Chroma blur levels
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
@ -2210,7 +2211,7 @@ TP_LOCALLAB_BLUR;Gaussian Blur - Noise - Grain
TP_LOCALLAB_BLURCBDL;Blur levels 0-1-2-3-4
TP_LOCALLAB_BLURCOL;Radius Mask Blur
TP_LOCALLAB_BLURDE;Blur Shape detection
TP_LOCALLAB_BLURLC;Luminance Residual Image Only
TP_LOCALLAB_BLURLC;Luminance Only
TP_LOCALLAB_BLURLEVELFRA;Blur Levels
TP_LOCALLAB_BLURRESIDFRA;Blur Residual
TP_LOCALLAB_BUTTON_ADD;Add
@ -2226,6 +2227,7 @@ TP_LOCALLAB_CHROMA;Chrominance
TP_LOCALLAB_CHROMACBDL;Chroma
TP_LOCALLAB_CHROMACB_TOOLTIP;Acts as an amplifier-reducer action compare to sliders of luminance.\nUnder 100 reduce, above 100 amplifie
TP_LOCALLAB_CHROMALEV;Chroma levels
TP_LOCALLAB_CHROMABLU;Chroma levels
TP_LOCALLAB_CHROMASKCOL;Chroma mask
TP_LOCALLAB_CHROMASK_TOOLTIP;You can use this slider to desaturated background (inverse mask - curve near 0).\nAlso to attenuate or enhance the action of a mask on the chroma
TP_LOCALLAB_CHRRT;Chroma

View File

@ -321,7 +321,7 @@ public:
const LocwavCurve & loclevwavCurve, bool & loclevwavutili, bool wavcurvelev,
const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon,
const LocwavCurve & loccompwavCurve, bool & loccompwavutili, bool wavcurvecomp,
float sigm, int & maxlvl, float fatdet, float fatanch, float chromalev);
float sigm, int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc);
void transit_shapedetect2(int call, int senstype, const LabImage * bufexporig, const LabImage * bufexpfin, LabImage * originalmask, const float hueref, const float chromaref, const float lumaref, float sobelref, float meansobel, float ** blend2, struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk);

View File

@ -4078,7 +4078,7 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int
bool wavcurvecon = false;
bool loccompwavutili = false;
bool wavcurvecomp = false;
wavcontrast4(bufmaskblurcol->L, nullptr, nullptr, contrast, 0.f, 0.f, 0.f, bfw, bfh, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurvecolwav, lmasutilicolwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, 1.f, maxlvl, 0.f, 0.f, 1.f);
wavcontrast4(bufmaskblurcol->L, nullptr, nullptr, contrast, 0.f, 0.f, 0.f, bfw, bfh, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurvecolwav, lmasutilicolwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false);
}
@ -6938,7 +6938,7 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
const LocwavCurve & locwavCurve, bool & locwavutili, const LocwavCurve & loclevwavCurve, bool & loclevwavutili, bool wavcurvelev,
const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon,
const LocwavCurve & loccompwavCurve, bool & loccompwavutili, bool wavcurvecomp,
float sigm, int & maxlvl, float fatdet, float fatanch, float chromalev)
float sigm, int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc)
{
wavelet_decomposition *wdspot = new wavelet_decomposition(tmp[0], bfw, bfh, level_br, 1, sk, numThreads, 6);
@ -6946,9 +6946,11 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
if (wdspot->memoryAllocationFailed) {
return;
}
wavelet_decomposition *wdspota;
wavelet_decomposition *wdspotb;
if(chromalev != 1.f) {
wavelet_decomposition *wdspota = nullptr;
wavelet_decomposition *wdspotb = nullptr;
if (chromalev != 1.f || chromablu != 1.f) {
wdspota = new wavelet_decomposition(tmpa[0], bfw, bfh, level_br, 1, sk, numThreads, 6);
//first decomposition for compress dynamic range positive values and other process
@ -7088,11 +7090,12 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
float **wav_b = nullptr;
float **wav_L = wdspot->level_coeffs(level);
if(chromalev != 1.f) {
wav_a = wdspota->level_coeffs(level);
wav_b = wdspotb->level_coeffs(level);
if (chromalev != 1.f) {
wav_a = wdspota->level_coeffs(level);
wav_b = wdspotb->level_coeffs(level);
}
float rap = mean[level] - 2.f * sigm * sigma[level];
if (rap > 0.f) {
@ -7158,7 +7161,8 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
float alpha = max((1024.f + 15.f * (float) cpMul * beta) / 1024.f, 0.02f) ;
wav_L[dir][i] *= alpha;
if(chromalev != 1.f) {
if (chromalev != 1.f) {
wav_a[dir][i] *= alpha * chromalev;
wav_b[dir][i] *= alpha * chromalev;
}
@ -7188,6 +7192,8 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
int leve = maxlvl;
float ****templevel = nullptr;
float ****templevela = nullptr;
float ****templevelb = nullptr;
if (wavcurvelev || wavcurvecomp) {
fatParams.enabled = wavcurvecomp;
@ -7207,19 +7213,53 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
}
}
if (chromablu != 1.f) {
templevela = new float***[dir];
templevelb = new float***[dir];
//allocate memory for 3 DIR n levels, H_L, W_L
for (int d = 0; d < dir; d++) {
templevela[d] = new float**[leve];
templevelb[d] = new float**[leve];
for (int k = 0; k < leve; k++) {
templevela[d][k] = new float*[H_L];
templevelb[d][k] = new float*[H_L];
for (int i = 0; i < H_L; i++) {
templevela[d][k][i] = new float[W_L];
templevelb[d][k][i] = new float[W_L];
}
}
}
}
//fill array templevel with wavelet value level dir
for (int dir = 1; dir < 4; dir++) {
for (int level = level_bl; level < maxlvl; ++level) {
int W_L = wdspot->level_W(level);
int H_L = wdspot->level_H(level);
float **wav_a = nullptr;
float **wav_b = nullptr;
float **wav_L = wdspot->level_coeffs(level);
// float **wav_LN = wdspotneg->level_coeffs(level);
if (chromablu != 1.f) {
wav_a = wdspota->level_coeffs(level);
wav_b = wdspotb->level_coeffs(level);
}
for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) {
float val = wav_L[dir][y * W_L + x];
if (chromablu != 1.f) {
float vala = wav_a[dir][y * W_L + x];
float valb = wav_b[dir][y * W_L + x];
templevela[dir - 1][level][y][x] = vala;
templevelb[dir - 1][level][y][x] = valb;
}
// if (val >= 0.f) {
templevel[dir - 1][level][y][x] = val;
// } else {
@ -7269,6 +7309,13 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
#pragma omp parallel
{
gaussianBlur(templevel[dir - 1][level], templevel[dir - 1][level], W_L, H_L, radlevblur * klev);
if (chromablu != 1.f && !blurlc) {
gaussianBlur(templevela[dir - 1][level], templevela[dir - 1][level], W_L, H_L, radlevblur * klev * chromablu);
gaussianBlur(templevelb[dir - 1][level], templevelb[dir - 1][level], W_L, H_L, radlevblur * klev * chromablu);
}
}
}
}
@ -7281,10 +7328,22 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
int W_L = wdspot->level_W(level);
int H_L = wdspot->level_H(level);
float **wav_L = wdspot->level_coeffs(level);
float **wav_a = nullptr;
float **wav_b = nullptr;
// float **wav_LN = wdspotneg->level_coeffs(level);
if (chromablu != 1.f) {
wav_a = wdspota->level_coeffs(level);
wav_b = wdspotb->level_coeffs(level);
}
for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) {
wav_L[dir][y * W_L + x] = templevel[dir - 1][level][y][x];
if (chromablu != 1.f) {
wav_a[dir][y * W_L + x] = templevela[dir - 1][level][y][x];
wav_b[dir][y * W_L + x] = templevelb[dir - 1][level][y][x];
}
}
}
}
@ -7313,6 +7372,34 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
delete [] templevel;
if (chromablu != 1.f) {
for (int i = 0; i < dir; i++) {
for (int j = 0; j < leve; j++) {
for (int l = 0; l < H_L; l++) {
delete [] templevela[i][j][l];
delete [] templevelb[i][j][l];
}
}
}
for (int i = 0; i < dir; i++) {
for (int j = 0; j < leve; j++) {
delete [] templevela[i][j];
delete [] templevelb[i][j];
}
}
for (int i = 0; i < dir; i++) {
delete [] templevela[i];
delete [] templevelb[i];
}
delete [] templevela;
delete [] templevelb;
}
}
}
@ -7388,12 +7475,14 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
//reconstruct all and compress dynamic range positive
wdspot->reconstruct(tmp[0], 1.f);
if(chromalev != 1.f) {
if (chromalev != 1.f || chromablu != 1.f) {
wdspota->reconstruct(tmpa[0], 1.f);
wdspotb->reconstruct(tmpb[0], 1.f);
delete wdspota;
delete wdspotb;
}
delete wdspot;
//compress dynamic range negative in case of - seems no need
@ -9502,7 +9591,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
bool wavcurvecon = false;
bool loccompwavutili = false;
bool wavcurvecomp = false;
wavcontrast4(bufmaskblurbl->L, nullptr, nullptr, contrast, 0.f, 0.f, 0.f, GW, GH, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurveblwav, lmasutiliblwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, 1.f, maxlvl, 0.f, 0.f, 1.f);
wavcontrast4(bufmaskblurbl->L, nullptr, nullptr, contrast, 0.f, 0.f, 0.f, GW, GH, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurveblwav, lmasutiliblwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false);
}
int shado = params->locallab.spots.at(sp).shadmaskbl;
@ -11431,8 +11520,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
const float fatanch = params->locallab.spots.at(sp).fatanch;
const float fatres = params->locallab.spots.at(sp).fatres;
const float chrol = params->locallab.spots.at(sp).chromalev;
const float chrobl = params->locallab.spots.at(sp).chromablu;
wavcontrast4(tmp1->L, tmp1->a, tmp1->b, contrast, fatres, radblur, radlevblur, tmp1->W, tmp1->H, level_bl, level_hl, level_br, level_hr, sk, numThreads, locwavCurve, locwavutili, loclevwavCurve, loclevwavutili, wavcurvelev, locconwavCurve, locconwavutili, wavcurvecon, loccompwavCurve, loccompwavutili, wavcurvecomp, sigma, maxlvl, fatdet, fatanch, chrol);
wavcontrast4(tmp1->L, tmp1->a, tmp1->b, contrast, fatres, radblur, radlevblur, tmp1->W, tmp1->H, level_bl, level_hl, level_br, level_hr, sk, numThreads, locwavCurve, locwavutili, loclevwavCurve, loclevwavutili, wavcurvelev, locconwavCurve, locconwavutili, wavcurvecon, loccompwavCurve, loccompwavutili, wavcurvecomp, sigma, maxlvl, fatdet, fatanch, chrol, chrobl, blurlc);
const float satur = params->locallab.spots.at(sp).residchro;

View File

@ -905,6 +905,7 @@ enum ProcEventCode {
Evlocallabchromasklc = 876,
EvlocallabLmasklcshape = 877,
Evlocallabchromalev = 878,
Evlocallabchromablu = 879,
NUMOFEVENTS
};

View File

@ -2728,6 +2728,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
residchro(0.0),
sigma(1.0),
chromalev(1.0),
chromablu(1.0),
fatdet(40.0),
fatanch(50.0),
fatres(0.0),
@ -3134,6 +3135,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& residchro == other.residchro
&& sigma == other.sigma
&& chromalev == other.chromalev
&& chromablu == other.chromablu
&& fatdet == other.fatdet
&& fatanch == other.fatanch
&& fatres == other.fatres
@ -4519,6 +4521,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).residchro, "Locallab", "Residchro_" + std::to_string(i), spot.residchro, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sigma, "Locallab", "Sigma_" + std::to_string(i), spot.sigma, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromalev, "Locallab", "Chromalev_" + std::to_string(i), spot.chromalev, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromablu, "Locallab", "Chromablu_" + std::to_string(i), spot.chromablu, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatdet, "Locallab", "Fatdet_" + std::to_string(i), spot.fatdet, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatanch, "Locallab", "Fatanch_" + std::to_string(i), spot.fatanch, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatres, "Locallab", "Fatres_" + std::to_string(i), spot.fatres, keyFile);
@ -6055,6 +6058,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Residchro_" + std::to_string(i), pedited, spot.residchro, spotEdited.residchro);
assignFromKeyfile(keyFile, "Locallab", "Sigma_" + std::to_string(i), pedited, spot.sigma, spotEdited.sigma);
assignFromKeyfile(keyFile, "Locallab", "Chromalev_" + std::to_string(i), pedited, spot.chromalev, spotEdited.chromalev);
assignFromKeyfile(keyFile, "Locallab", "Chromablu_" + std::to_string(i), pedited, spot.chromablu, spotEdited.chromablu);
assignFromKeyfile(keyFile, "Locallab", "Fatdet_" + std::to_string(i), pedited, spot.fatdet, spotEdited.fatdet);
assignFromKeyfile(keyFile, "Locallab", "Fatanch_" + std::to_string(i), pedited, spot.fatanch, spotEdited.fatanch);
assignFromKeyfile(keyFile, "Locallab", "Fatres_" + std::to_string(i), pedited, spot.fatres, spotEdited.fatres);

View File

@ -1271,6 +1271,7 @@ struct LocallabParams {
double residchro;
double sigma;
double chromalev;
double chromablu;
double fatdet;
double fatanch;
double fatres;

View File

@ -908,7 +908,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // Evlocallabradmasklc
LUMINANCECURVE, //Evlocallabchromasklc
LUMINANCECURVE, //EvlocallabLmasklcshape
LUMINANCECURVE //Evlocallabchromalev
LUMINANCECURVE, //Evlocallabchromalev
LUMINANCECURVE //Evlocallabchromablu
};

View File

@ -576,6 +576,7 @@ sensilc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIS"), 0, 100, 1, 19))),
residchro(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCHRO"), -100, 100, 1, 0))),
sigma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
chromalev(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMALEV"), 0.01, 2., 0.01, 1.))),
chromablu(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMABLU"), 0.01, 2., 0.01, 1.))),
fatdet(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))),
fatanch(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))),
fatres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATRES"), 0., 100., 1., 0.))),
@ -2899,6 +2900,7 @@ pe(nullptr)
residchro->setAdjusterListener(this);
sigma->setAdjusterListener(this);
chromalev->setAdjusterListener(this);
chromablu->setAdjusterListener(this);
fatdet->setAdjusterListener(this);
fatanch->setAdjusterListener(this);
fatres->setAdjusterListener(this);
@ -2930,6 +2932,7 @@ pe(nullptr)
blurlevelFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const blurlevcontBox = Gtk::manage(new ToolParamBlock());
blurlevcontBox->pack_start(*levelblur);
blurlevcontBox->pack_start(*chromablu);
blurlevcontBox->pack_start(*LocalcurveEditorwavlev, Gtk::PACK_SHRINK, 4);
blurlevcontBox->pack_start(*separatorblu);
blurlevcontBox->pack_start(*residblur);
@ -5253,6 +5256,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pp->locallab.spots.at(pp->locallab.selspot).residchro = residchro->getValue();
pp->locallab.spots.at(pp->locallab.selspot).sigma = sigma->getValue();
pp->locallab.spots.at(pp->locallab.selspot).chromalev = chromalev->getValue();
pp->locallab.spots.at(pp->locallab.selspot).chromablu = chromablu->getValue();
pp->locallab.spots.at(pp->locallab.selspot).fatdet = fatdet->getValue();
pp->locallab.spots.at(pp->locallab.selspot).fatanch = fatanch->getValue();
pp->locallab.spots.at(pp->locallab.selspot).fatres = fatres->getValue();
@ -5662,6 +5666,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pe->locallab.spots.at(pp->locallab.selspot).residchro = pe->locallab.spots.at(pp->locallab.selspot).residchro || residchro->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).sigma = pe->locallab.spots.at(pp->locallab.selspot).sigma || sigma->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).chromalev = pe->locallab.spots.at(pp->locallab.selspot).chromalev || chromalev->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).chromablu = pe->locallab.spots.at(pp->locallab.selspot).chromablu || chromablu->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).fatdet = pe->locallab.spots.at(pp->locallab.selspot).fatdet || fatdet->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).fatanch = pe->locallab.spots.at(pp->locallab.selspot).fatanch || fatanch->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).fatres = pe->locallab.spots.at(pp->locallab.selspot).fatres || fatres->getEditedState();
@ -6070,6 +6075,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pedited->locallab.spots.at(pp->locallab.selspot).residchro = pedited->locallab.spots.at(pp->locallab.selspot).residchro || residchro->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).sigma = pedited->locallab.spots.at(pp->locallab.selspot).sigma || sigma->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).chromalev = pedited->locallab.spots.at(pp->locallab.selspot).chromalev || chromalev->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).chromablu = pedited->locallab.spots.at(pp->locallab.selspot).chromablu || chromablu->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).fatdet = pedited->locallab.spots.at(pp->locallab.selspot).fatdet || fatdet->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).fatanch = pedited->locallab.spots.at(pp->locallab.selspot).fatanch || fatanch->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).fatres = pedited->locallab.spots.at(pp->locallab.selspot).fatres || fatres->getEditedState();
@ -6647,6 +6653,7 @@ void Locallab::localcontMethodChanged()
residchro->hide();
sigma->hide();
chromalev->hide();
chromablu->hide();
fatdet->hide();
fatanch->hide();
fatres->hide();
@ -6674,6 +6681,7 @@ void Locallab::localcontMethodChanged()
residchro->show();
sigma->show();
chromalev->show();
chromablu->show();
fatdet->show();
fatanch->show();
fatres->show();
@ -8748,6 +8756,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
residchro->setDefault(defSpot->residchro);
sigma->setDefault(defSpot->sigma);
chromalev->setDefault(defSpot->chromalev);
chromablu->setDefault(defSpot->chromablu);
fatdet->setDefault(defSpot->fatdet);
fatanch->setDefault(defSpot->fatanch);
fatres->setDefault(defSpot->fatres);
@ -8988,6 +8997,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
residchro->setDefaultEditedState(Irrelevant);
sigma->setDefaultEditedState(Irrelevant);
chromalev->setDefaultEditedState(Irrelevant);
chromablu->setDefaultEditedState(Irrelevant);
fatdet->setDefaultEditedState(Irrelevant);
fatanch->setDefaultEditedState(Irrelevant);
fatres->setDefaultEditedState(Irrelevant);
@ -9233,6 +9243,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
residchro->setDefaultEditedState(defSpotState->residchro ? Edited : UnEdited);
sigma->setDefaultEditedState(defSpotState->sigma ? Edited : UnEdited);
chromalev->setDefaultEditedState(defSpotState->chromalev ? Edited : UnEdited);
chromablu->setDefaultEditedState(defSpotState->chromablu ? Edited : UnEdited);
fatdet->setDefaultEditedState(defSpotState->fatdet ? Edited : UnEdited);
fatanch->setDefaultEditedState(defSpotState->fatanch ? Edited : UnEdited);
fatres->setDefaultEditedState(defSpotState->fatres ? Edited : UnEdited);
@ -10416,6 +10427,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
}
}
if (a == chromablu) {
if (listener) {
listener->panelChanged(Evlocallabchromablu, chromablu->getTextValue());
}
}
if (a == fatdet) {
if (listener) {
listener->panelChanged(Evlocallabfatdet, fatdet->getTextValue());
@ -10926,6 +10943,7 @@ void Locallab::setBatchMode(bool batchMode)
residchro->showEditedCB();
sigma->showEditedCB();
chromalev->showEditedCB();
chromablu->showEditedCB();
fatdet->showEditedCB();
fatanch->showEditedCB();
fatres->showEditedCB();
@ -11989,6 +12007,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
residchro->setValue(pp->locallab.spots.at(index).residchro);
sigma->setValue(pp->locallab.spots.at(index).sigma);
chromalev->setValue(pp->locallab.spots.at(index).chromalev);
chromablu->setValue(pp->locallab.spots.at(index).chromablu);
fatdet->setValue(pp->locallab.spots.at(index).fatdet);
fatanch->setValue(pp->locallab.spots.at(index).fatanch);
fatres->setValue(pp->locallab.spots.at(index).fatres);
@ -12502,6 +12521,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
residchro->setEditedState(spotState->residchro ? Edited : UnEdited);
sigma->setEditedState(spotState->sigma ? Edited : UnEdited);
chromalev->setEditedState(spotState->chromalev ? Edited : UnEdited);
chromablu->setEditedState(spotState->chromablu ? Edited : UnEdited);
fatdet->setEditedState(spotState->fatdet ? Edited : UnEdited);
fatanch->setEditedState(spotState->fatanch ? Edited : UnEdited);
fatres->setEditedState(spotState->fatres ? Edited : UnEdited);
@ -13026,6 +13046,7 @@ void Locallab::updateSpecificGUIState()
residchro->hide();
sigma->hide();
chromalev->hide();
chromablu->hide();
fatdet->hide();
fatanch->hide();
fatres->hide();
@ -13052,6 +13073,7 @@ void Locallab::updateSpecificGUIState()
levelblur->show();
sigma->show();
chromalev->show();
chromablu->show();
fatdet->show();
fatanch->show();
fatres->show();

View File

@ -371,6 +371,7 @@ private:
Adjuster* const residchro;
Adjuster* const sigma;
Adjuster* const chromalev;
Adjuster* const chromablu;
Adjuster* const fatdet;
Adjuster* const fatanch;
Adjuster* const fatres;

View File

@ -1264,6 +1264,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).residchro = locallab.spots.at(j).residchro && pSpot.residchro == otherSpot.residchro;
locallab.spots.at(j).sigma = locallab.spots.at(j).sigma && pSpot.sigma == otherSpot.sigma;
locallab.spots.at(j).chromalev = locallab.spots.at(j).chromalev && pSpot.chromalev == otherSpot.chromalev;
locallab.spots.at(j).chromablu = locallab.spots.at(j).chromablu && pSpot.chromablu == otherSpot.chromablu;
locallab.spots.at(j).fatdet = locallab.spots.at(j).fatdet && pSpot.fatdet == otherSpot.fatdet;
locallab.spots.at(j).fatanch = locallab.spots.at(j).fatanch && pSpot.fatanch == otherSpot.fatanch;
locallab.spots.at(j).fatres = locallab.spots.at(j).fatres && pSpot.fatres == otherSpot.fatres;
@ -4031,6 +4032,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).chromalev = mods.locallab.spots.at(i).chromalev;
}
if (locallab.spots.at(i).chromablu) {
toEdit.locallab.spots.at(i).chromablu = mods.locallab.spots.at(i).chromablu;
}
if (locallab.spots.at(i).fatdet) {
toEdit.locallab.spots.at(i).fatdet = mods.locallab.spots.at(i).fatdet;
}
@ -5603,6 +5608,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
residchro(v),
sigma(v),
chromalev(v),
chromablu(v),
fatdet(v),
fatanch(v),
fatres(v),
@ -5999,6 +6005,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
residchro = v;
sigma = v;
chromalev = v;
chromablu = v;
fatdet = v;
fatanch = v;
fatres = v;

View File

@ -697,6 +697,7 @@ public:
bool residchro;
bool sigma;
bool chromalev;
bool chromablu;
bool fatdet;
bool fatanch;
bool fatres;