From e6bcb496564173ff6628ceeed6facb3ea3fc9603 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 3 Jan 2020 15:29:29 +0100 Subject: [PATCH] 2nd compress dynamic wavelet pyramid --- rtdata/languages/default | 2 ++ rtengine/improcfun.h | 2 +- rtengine/iplocallab.cc | 30 +++++++++++++++++++++++++----- rtengine/procevents.h | 1 + rtengine/procparams.cc | 4 ++++ rtengine/procparams.h | 1 + rtengine/refreshmap.cc | 3 ++- rtgui/locallab.cc | 24 +++++++++++++++++++++++- rtgui/locallab.h | 1 + rtgui/paramsedited.cc | 7 +++++++ rtgui/paramsedited.h | 1 + 11 files changed, 68 insertions(+), 8 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 9dffe942a..0de47b99a 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1123,6 +1123,7 @@ HISTORY_MSG_883;Local - Contrast By Levels HISTORY_MSG_884;Local - Contrast Dynamic Range Laplacian HISTORY_MSG_885;Local - Contrast Dynamic Range Wavelet HISTORY_MSG_886;Local - Contrast Wavelet Curve Compression +HISTORY_MSG_887;Local - Contrast Wavelet Compression Residual HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2488,6 +2489,7 @@ TP_LOCALLAB_REN_DIALOG_NAME;Renaming Control Spot TP_LOCALLAB_RESID;Residual Image TP_LOCALLAB_RESIDBLUR;Blur Residual Image TP_LOCALLAB_RESIDCHRO;Residual image Chroma +TP_LOCALLAB_RESIDCOMP;Compress Residual image TP_LOCALLAB_RESIDCONT;Residual image Contrast TP_LOCALLAB_RETI;Dehaze - Retinex Strong local contrast TP_LOCALLAB_RETIFRA;Retinex diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 8f64fc2ee..cf7fefecd 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -324,7 +324,7 @@ public: const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon, const LocwavCurve & loccompwavCurve, bool & loccompwavutili, bool wavcurvecomp, const LocwavCurve & loccomprewavCurve, bool & loccomprewavutili, bool wavcurvecompre, - float sigm, float offs,int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena); + float sigm, float offs,int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress); void wavcont(wavelet_decomposition &wdspot, float ****templevel, int level_bl, int maxlvl, const LocwavCurve & loclevwavCurve, bool & loclevwavutili, diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 3394b23bd..64af73588 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -4130,7 +4130,7 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int bool wavcurvecomp = false; bool loccomprewavutili = false; bool wavcurvecompre = 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, dummy, loccomprewavutili, wavcurvecompre, 1.f, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false, false, false, false, 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, dummy, loccomprewavutili, wavcurvecompre, 1.f, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false, false, false, false, false, 0.f); } @@ -7114,6 +7114,7 @@ void ImProcFunctions::Compresslevels(float **Source, int W_L, int H_L, float Com } } } + } @@ -7180,7 +7181,7 @@ void ImProcFunctions::wavcont(wavelet_decomposition &wdspot, float ****templevel } if (process == 3) { //Dynamic compression wavelet - + for (int dir = 1; dir < 4; dir++) { for (int level = level_bl; level < maxlvl; ++level) { int W_L = wdspot.level_W(level); @@ -7195,6 +7196,11 @@ void ImProcFunctions::wavcont(wavelet_decomposition &wdspot, float ****templevel float Compression = expf(-klev); float DetailBoost = klev; + + if (klev < 0.0f) { + DetailBoost = 0.0f; + } + Compresslevels(templevel[dir - 1][level], W_L, H_L, Compression, DetailBoost); } } @@ -7228,7 +7234,7 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon, const LocwavCurve & loccompwavCurve, bool & loccompwavutili, bool wavcurvecomp, const LocwavCurve & loccomprewavCurve, bool & loccomprewavutili, bool wavcurvecompre, - float sigm, float offs, int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena) + float sigm, float offs, int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress) { wavelet_decomposition *wdspot = new wavelet_decomposition(tmp[0], bfw, bfh, maxlvl, 1, sk, numThreads, 6); @@ -7307,6 +7313,19 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f } } + if (compress != 0.f && compreena) { + + float Compression = expf(-compress); + float DetailBoost = compress; + + if (compress < 0.0f) { + DetailBoost = 0.0f; + } + + CompressDR(wav_L0, W_L, H_L, Compression, DetailBoost); + + } + if (contrast != 0.) { double avedbl = 0.0; // use double precision for large summations @@ -9662,7 +9681,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bool wavcurvecomp = false; bool loccomprewavutili = false; bool wavcurvecompre = 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, dummy, loccomprewavutili, wavcurvecompre, 1.f, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false, false, false, false, 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, dummy, loccomprewavutili, wavcurvecompre, 1.f, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false, false, false, false, false, 0.f); } int shado = params->locallab.spots.at(sp).shadmaskbl; @@ -11612,8 +11631,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o const bool levelena = params->locallab.spots.at(sp).wavcont; const bool comprena = params->locallab.spots.at(sp).wavcomp; const bool compreena = params->locallab.spots.at(sp).wavcompre; + const float compress = params->locallab.spots.at(sp).residcomp; - 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, loccomprewavCurve, loccomprewavutili, wavcurvecompre, sigma, offs, maxlvl, fatdet, fatanch, chrol, chrobl, blurlc, blurena, levelena, comprena, compreena); + 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, loccomprewavCurve, loccomprewavutili, wavcurvecompre, sigma, offs, maxlvl, fatdet, fatanch, chrol, chrobl, blurlc, blurena, levelena, comprena, compreena, compress); const float satur = params->locallab.spots.at(sp).residchro; diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 1146999fc..73873de8a 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -912,6 +912,7 @@ enum ProcEventCode { Evlocallabwavcomp = 883, Evlocallabwavcompre = 884, EvlocallabwavCurvecompre = 885, + Evlocallabresidcomp = 886, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 8bf0f3b9d..06c4e20b9 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2726,6 +2726,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : residblur(0.0), levelblur(0.0), residchro(0.0), + residcomp(0.0), sigma(1.0), offset(1.0), chromalev(1.0), @@ -3139,6 +3140,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && residblur == other.residblur && levelblur == other.levelblur && residchro == other.residchro + && residcomp == other.residcomp && sigma == other.sigma && offset == other.offset && chromalev == other.chromalev @@ -4531,6 +4533,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).residblur, "Locallab", "Residblur_" + std::to_string(i), spot.residblur, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).levelblur, "Locallab", "Levelblur_" + std::to_string(i), spot.levelblur, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).residchro, "Locallab", "Residchro_" + std::to_string(i), spot.residchro, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).residcomp, "Locallab", "Residcomp_" + std::to_string(i), spot.residcomp, 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).offset, "Locallab", "Offset_" + std::to_string(i), spot.offset, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromalev, "Locallab", "Chromalev_" + std::to_string(i), spot.chromalev, keyFile); @@ -6074,6 +6077,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Residblur_" + std::to_string(i), pedited, spot.residblur, spotEdited.residblur); assignFromKeyfile(keyFile, "Locallab", "Levelblur_" + std::to_string(i), pedited, spot.levelblur, spotEdited.levelblur); assignFromKeyfile(keyFile, "Locallab", "Residchro_" + std::to_string(i), pedited, spot.residchro, spotEdited.residchro); + assignFromKeyfile(keyFile, "Locallab", "Residcomp_" + std::to_string(i), pedited, spot.residcomp, spotEdited.residcomp); assignFromKeyfile(keyFile, "Locallab", "Sigma_" + std::to_string(i), pedited, spot.sigma, spotEdited.sigma); assignFromKeyfile(keyFile, "Locallab", "Offset_" + std::to_string(i), pedited, spot.offset, spotEdited.offset); assignFromKeyfile(keyFile, "Locallab", "Chromalev_" + std::to_string(i), pedited, spot.chromalev, spotEdited.chromalev); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 7badbb1bd..bdaa32bd6 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1269,6 +1269,7 @@ struct LocallabParams { double residblur; double levelblur; double residchro; + double residcomp; double sigma; double offset; double chromalev; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 6f385d149..e49ffcfe9 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -915,7 +915,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //Evlocallabwavcont LUMINANCECURVE, //Evlocallabwavcomp LUMINANCECURVE, //Evlocallabwavcompre - LUMINANCECURVE //EvlocallabwavCurvecompre + LUMINANCECURVE, //EvlocallabwavCurvecompre + LUMINANCECURVE //Evlocallabresidcomp }; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 22b962092..f796fa079 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -578,7 +578,8 @@ clarilres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARILRES"), -20., 100., 0.5, clarisoft(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), -10.0, 1000.0, 0.5, 1.))), claricres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARICRES"), -20., 100., 0.5, 0.))), 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))), +residchro(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCHRO"), -100., 100., 1., 0.))), +residcomp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCOMP"), -1., 1., 0.01, 0.))), sigma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))), offset(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OFFSETWAV"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), chromalev(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMALEV"), 0.01, 2., 0.01, 1.))), @@ -2942,6 +2943,7 @@ pe(nullptr) residblur->setAdjusterListener(this); levelblur->setAdjusterListener(this); residchro->setAdjusterListener(this); + residcomp->setAdjusterListener(this); sigma->setAdjusterListener(this); offset->setAdjusterListener(this); chromalev->setAdjusterListener(this); @@ -3018,6 +3020,7 @@ pe(nullptr) wavcompre->set_active (false); compreFrame->set_label_widget(*wavcompre); compreBox->pack_start(*LocalcurveEditorwavcompre, Gtk::PACK_SHRINK, 4); + compreBox->pack_start(*residcomp); compreFrame->add(*compreBox); // ToolParamBlock* const compBox = Gtk::manage(new ToolParamBlock()); @@ -5328,6 +5331,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pp->locallab.spots.at(pp->locallab.selspot).residblur = residblur->getValue(); pp->locallab.spots.at(pp->locallab.selspot).levelblur = levelblur->getValue(); pp->locallab.spots.at(pp->locallab.selspot).residchro = residchro->getValue(); + pp->locallab.spots.at(pp->locallab.selspot).residcomp = residcomp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).sigma = sigma->getValue(); pp->locallab.spots.at(pp->locallab.selspot).offset = offset->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromalev = chromalev->getValue(); @@ -5744,6 +5748,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pe->locallab.spots.at(pp->locallab.selspot).residblur = pe->locallab.spots.at(pp->locallab.selspot).residblur || residblur->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).levelblur = pe->locallab.spots.at(pp->locallab.selspot).levelblur || levelblur->getEditedState(); 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).residcomp = pe->locallab.spots.at(pp->locallab.selspot).residcomp || residcomp->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).offset = pe->locallab.spots.at(pp->locallab.selspot).offset || offset->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromalev = pe->locallab.spots.at(pp->locallab.selspot).chromalev || chromalev->getEditedState(); @@ -6159,6 +6164,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited pedited->locallab.spots.at(pp->locallab.selspot).residblur = pedited->locallab.spots.at(pp->locallab.selspot).residblur || residblur->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).levelblur = pedited->locallab.spots.at(pp->locallab.selspot).levelblur || levelblur->getEditedState(); 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).residcomp = pedited->locallab.spots.at(pp->locallab.selspot).residcomp || residcomp->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).offset = pedited->locallab.spots.at(pp->locallab.selspot).offset || offset->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromalev = pedited->locallab.spots.at(pp->locallab.selspot).chromalev || chromalev->getEditedState(); @@ -6749,6 +6755,7 @@ void Locallab::localcontMethodChanged() residblur->hide(); levelblur->hide(); residchro->hide(); + residcomp->hide(); sigma->hide(); offset->hide(); chromalev->hide(); @@ -6780,6 +6787,7 @@ void Locallab::localcontMethodChanged() residblur->show(); levelblur->show(); residchro->show(); + residcomp->show(); sigma->show(); offset->show(); chromalev->show(); @@ -8950,6 +8958,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c residblur->setDefault(defSpot->residblur); levelblur->setDefault(defSpot->levelblur); residchro->setDefault(defSpot->residchro); + residcomp->setDefault(defSpot->residcomp); sigma->setDefault(defSpot->sigma); offset->setDefault(defSpot->offset); chromalev->setDefault(defSpot->chromalev); @@ -9192,6 +9201,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c residblur->setDefaultEditedState(Irrelevant); levelblur->setDefaultEditedState(Irrelevant); residchro->setDefaultEditedState(Irrelevant); + residcomp->setDefaultEditedState(Irrelevant); sigma->setDefaultEditedState(Irrelevant); offset->setDefaultEditedState(Irrelevant); chromalev->setDefaultEditedState(Irrelevant); @@ -9439,6 +9449,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c residblur->setDefaultEditedState(defSpotState->residblur ? Edited : UnEdited); levelblur->setDefaultEditedState(defSpotState->levelblur ? Edited : UnEdited); residchro->setDefaultEditedState(defSpotState->residchro ? Edited : UnEdited); + residcomp->setDefaultEditedState(defSpotState->residcomp ? Edited : UnEdited); sigma->setDefaultEditedState(defSpotState->sigma ? Edited : UnEdited); offset->setDefaultEditedState(defSpotState->offset ? Edited : UnEdited); chromalev->setDefaultEditedState(defSpotState->chromalev ? Edited : UnEdited); @@ -10614,6 +10625,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } } + if (a == residcomp) { + if (listener) { + listener->panelChanged(Evlocallabresidcomp, residcomp->getTextValue()); + } + } + if (a == sigma) { if (listener) { listener->panelChanged(Evlocallabsigma, sigma->getTextValue()); @@ -11146,6 +11163,7 @@ void Locallab::setBatchMode(bool batchMode) residblur->showEditedCB(); levelblur->showEditedCB(); residchro->showEditedCB(); + residcomp->showEditedCB(); sigma->showEditedCB(); offset->showEditedCB(); chromalev->showEditedCB(); @@ -12219,6 +12237,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con residblur->setValue(pp->locallab.spots.at(index).residblur); levelblur->setValue(pp->locallab.spots.at(index).levelblur); residchro->setValue(pp->locallab.spots.at(index).residchro); + residcomp->setValue(pp->locallab.spots.at(index).residcomp); sigma->setValue(pp->locallab.spots.at(index).sigma); offset->setValue(pp->locallab.spots.at(index).offset); chromalev->setValue(pp->locallab.spots.at(index).chromalev); @@ -12740,6 +12759,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con residblur->setEditedState(spotState->residblur ? Edited : UnEdited); levelblur->setEditedState(spotState->levelblur ? Edited : UnEdited); residchro->setEditedState(spotState->residchro ? Edited : UnEdited); + residcomp->setEditedState(spotState->residcomp ? Edited : UnEdited); sigma->setEditedState(spotState->sigma ? Edited : UnEdited); offset->setEditedState(spotState->offset ? Edited : UnEdited); chromalev->setEditedState(spotState->chromalev ? Edited : UnEdited); @@ -13271,6 +13291,7 @@ void Locallab::updateSpecificGUIState() residblur->hide(); levelblur->hide(); residchro->hide(); + residcomp->hide(); sigma->hide(); offset->hide(); chromalev->hide(); @@ -13309,6 +13330,7 @@ void Locallab::updateSpecificGUIState() fatanch->show(); fatres->show(); residchro->show(); + residcomp->show(); clarilres->show(); claricres->show(); clarisoft->show(); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 3d583fd6a..4714f27a2 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -371,6 +371,7 @@ private: Adjuster* const claricres; Adjuster* const sensilc; Adjuster* const residchro; + Adjuster* const residcomp; Adjuster* const sigma; Adjuster* const offset; Adjuster* const chromalev; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 15efff4b0..4f1a6fa71 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1262,6 +1262,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).residblur = locallab.spots.at(j).residblur && pSpot.residblur == otherSpot.residblur; locallab.spots.at(j).levelblur = locallab.spots.at(j).levelblur && pSpot.levelblur == otherSpot.levelblur; locallab.spots.at(j).residchro = locallab.spots.at(j).residchro && pSpot.residchro == otherSpot.residchro; + locallab.spots.at(j).residcomp = locallab.spots.at(j).residcomp && pSpot.residcomp == otherSpot.residcomp; locallab.spots.at(j).sigma = locallab.spots.at(j).sigma && pSpot.sigma == otherSpot.sigma; locallab.spots.at(j).offset = locallab.spots.at(j).offset && pSpot.offset == otherSpot.offset; locallab.spots.at(j).chromalev = locallab.spots.at(j).chromalev && pSpot.chromalev == otherSpot.chromalev; @@ -4030,6 +4031,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).residchro = mods.locallab.spots.at(i).residchro; } + if (locallab.spots.at(i).residcomp) { + toEdit.locallab.spots.at(i).residcomp = mods.locallab.spots.at(i).residcomp; + } + if (locallab.spots.at(i).sigma) { toEdit.locallab.spots.at(i).sigma = mods.locallab.spots.at(i).sigma; } @@ -5636,6 +5641,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : residblur(v), levelblur(v), residchro(v), + residcomp(v), sigma(v), offset(v), chromalev(v), @@ -6039,6 +6045,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) residblur = v; levelblur = v; residchro = v; + residcomp = v; sigma = v; offset = v; chromalev = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index ee946b606..957571d79 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -695,6 +695,7 @@ public: bool residblur; bool levelblur; bool residchro; + bool residcomp; bool sigma; bool offset; bool chromalev;