From 80706b0da12c1940b8e7e07ca5941641f82c595d Mon Sep 17 00:00:00 2001 From: michael Date: Fri, 8 Jul 2011 06:49:10 -0400 Subject: [PATCH] Partial paste support for gradient sharpening, microcotrast and raw black levels --- rtdata/languages/default | 5 ++++- rtgui/partialpastedlg.cc | 48 +++++++++++++++++++++++++++++++++++++--- rtgui/partialpastedlg.h | 7 ++++-- 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 7f4d1fe05..229c5e396 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -508,6 +508,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;FF Auto Select PARTIALPASTE_FLATFIELDBLURRADIUS;FF Blur Radius PARTIALPASTE_FLATFIELDBLURTYPE;FF Blur Type PARTIALPASTE_FLATFIELDFILE;Flat field (FF) File +PARTIALPASTE_GRADIENTSHARPEN;Gradient Sharpening (border) PARTIALPASTE_HLRECONSTRUCTION;Highlight reconstruction PARTIALPASTE_HLRECOVERY;Highlight recovery PARTIALPASTE_HLRECOVERYAMOUNT;Highlight recovery amount @@ -521,6 +522,7 @@ PARTIALPASTE_LENSGROUP;Lens related settings PARTIALPASTE_LUMADENOISE;Luminance noise reduction PARTIALPASTE_LUMINANCEGROUP;Luminance related settings PARTIALPASTE_METAICMGROUP;Metadata/ICM settings +PARTIALPASTE_MICROCONTRAST;Microcontrast PARTIALPASTE_PERSPECTIVE;Perspective PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Apply hot/dead pixel filter @@ -529,6 +531,7 @@ PARTIALPASTE_RAWCACORR_AUTO;CA auto correction PARTIALPASTE_RAWCACORR_CABLUE;CA Blue PARTIALPASTE_RAWCACORR_CARED;CA Red PARTIALPASTE_RAWEXPOS_LINEAR;Raw white point linear corr. factor +PARTIALPASTE_RAWEXPOS_BLACK;Black Level PARTIALPASTE_RAWEXPOS_PRESER;Raw white point HL preserving corr. (EV) PARTIALPASTE_RAWGROUP;Raw settings PARTIALPASTE_RAW_DCBENHANCE;Apply DCB enhancement step @@ -538,7 +541,7 @@ PARTIALPASTE_RAW_FALSECOLOR;Demosaic False color suppression steps PARTIALPASTE_RESIZE;Resize PARTIALPASTE_ROTATION;Rotation PARTIALPASTE_SHADOWSHIGHLIGHTS;Shadows/Highlights -PARTIALPASTE_SHARPENING;Sharpening +PARTIALPASTE_SHARPENING;Sharpening (USM/RL) PARTIALPASTE_VIGNETTING;Vignetting correction PARTIALPASTE_WAVELETEQUALIZER;Wavelet equalizer PARTIALPASTE_WHITEBALANCE;White balance diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index d382fdf8c..1af1ba8f5 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -43,7 +43,9 @@ PartialPasteDlg::PartialPasteDlg () { // options in detail: sharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENING"))); - impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE"))); + gradsharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENTSHARPEN"))); + microcontrast = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_MICROCONTRAST"))); + impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE"))); //lumaden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LUMADENOISE"))); dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER"))); //waveq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_WAVELETEQUALIZER"))); @@ -78,6 +80,7 @@ PartialPasteDlg::PartialPasteDlg () { // options in raw: raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR"))); raw_preser = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_PRESER"))); + raw_black = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_BLACK"))); raw_ca_autocorrect = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_AUTO"))); raw_cared = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_CARED"))); raw_cablue = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_CABLUE"))); @@ -114,6 +117,8 @@ PartialPasteDlg::PartialPasteDlg () { vboxes[1]->pack_start (*detail, Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*hseps[1], Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*sharpen, Gtk::PACK_SHRINK, 2); + vboxes[1]->pack_start (*gradsharpen, Gtk::PACK_SHRINK, 2); + vboxes[1]->pack_start (*microcontrast, Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*impden, Gtk::PACK_SHRINK, 2); //vboxes[1]->pack_start (*lumaden, Gtk::PACK_SHRINK, 2); //vboxes[1]->pack_start (*colorden, Gtk::PACK_SHRINK, 2); @@ -156,17 +161,23 @@ PartialPasteDlg::PartialPasteDlg () { vboxes[6]->pack_start (*raw_ccSteps, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*raw_dcb_iterations, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*raw_dcb_enhance, Gtk::PACK_SHRINK, 2); + vboxes[6]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0); vboxes[6]->pack_start (*raw_linenoise, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*raw_greenthresh, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*raw_hotdeadpix_filt, Gtk::PACK_SHRINK, 2); + vboxes[6]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0); vboxes[6]->pack_start (*raw_expos, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*raw_preser, Gtk::PACK_SHRINK, 2); + vboxes[6]->pack_start (*raw_black, Gtk::PACK_SHRINK, 2); + vboxes[6]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0); vboxes[6]->pack_start (*df_file, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*df_AutoSelect, Gtk::PACK_SHRINK, 2); + vboxes[6]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0); vboxes[6]->pack_start (*ff_file, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*ff_AutoSelect, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*ff_BlurType, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*ff_BlurRadius, Gtk::PACK_SHRINK, 2); + vboxes[6]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0); vboxes[6]->pack_start (*raw_ca_autocorrect, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*raw_cared, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*raw_cablue, Gtk::PACK_SHRINK, 2); @@ -220,6 +231,8 @@ PartialPasteDlg::PartialPasteDlg () { labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); sharpenConn = sharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); + gradsharpenConn = gradsharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); + microcontrastConn = microcontrast->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); impdenConn = impden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); //lumadenConn = lumaden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); //colordenConn = colorden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); @@ -254,6 +267,7 @@ PartialPasteDlg::PartialPasteDlg () { raw_dcb_enhanceConn = raw_dcb_enhance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_exposConn = raw_expos->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_preserConn = raw_preser->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); + raw_blackConn = raw_black->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_ca_autocorrectConn = raw_ca_autocorrect->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_caredConn = raw_cared->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_cablueConn = raw_cablue->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); @@ -321,6 +335,7 @@ void PartialPasteDlg::rawToggled () { raw_dcb_enhanceConn.block (true); raw_exposConn.block (true); raw_preserConn.block (true); + raw_blackConn.block (true); raw_ca_autocorrectConn.block (true); raw_caredConn.block (true); raw_cablueConn.block (true); @@ -342,6 +357,7 @@ void PartialPasteDlg::rawToggled () { raw_dcb_enhance->set_active (raw->get_active ()); raw_expos->set_active (raw->get_active ()); raw_preser->set_active (raw->get_active ()); + raw_black->set_active (raw->get_active ()); raw_ca_autocorrect->set_active (raw->get_active ()); raw_cared->set_active (raw->get_active ()); raw_cablue->set_active (raw->get_active ()); @@ -361,6 +377,7 @@ void PartialPasteDlg::rawToggled () { raw_dcb_enhanceConn.block (false); raw_exposConn.block (false); raw_preserConn.block (false); + raw_blackConn.block (false); raw_ca_autocorrectConn.block (false); raw_caredConn.block (false); raw_cablueConn.block (false); @@ -401,7 +418,9 @@ void PartialPasteDlg::basicToggled () { void PartialPasteDlg::detailToggled () { sharpenConn.block (true); - impdenConn.block (true); + gradsharpenConn.block(true); + microcontrastConn.block(true); + impdenConn.block (true); dirpyrdenConn.block (true); //lumadenConn.block (true); //colordenConn.block (true); @@ -412,6 +431,8 @@ void PartialPasteDlg::detailToggled () { detail->set_inconsistent (false); sharpen->set_active (detail->get_active ()); + gradsharpen->set_active (detail->get_active ()); + microcontrast->set_active (detail->get_active ()); impden->set_active (detail->get_active ()); dirpyrden->set_active (detail->get_active ()); //lumaden->set_active (detail->get_active ()); @@ -421,7 +442,9 @@ void PartialPasteDlg::detailToggled () { //waveq->set_active (detail->get_active ()); sharpenConn.block (false); - impdenConn.block (false); + gradsharpenConn.block(false); + microcontrastConn.block(false); + impdenConn.block (false); dirpyrdenConn.block (false); //lumadenConn.block (false); //colordenConn.block (false); @@ -520,6 +543,18 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r if (labcurve->get_active ()) dst->labCurve = src->labCurve; if (sharpen->get_active ()) dst->sharpening = src->sharpening; + if (gradsharpen->get_active ()){ + dst->clarity.enabled = src->clarity.enabled; + dst->clarity.clstrength = src->clarity.clstrength; + dst->clarity.clpasses = src->clarity.clpasses; + dst->clarity.clthreechannels = src->clarity.clthreechannels; + } + if (microcontrast->get_active ()){ + dst->clarity.enabledtwo = src->clarity.enabledtwo; + dst->clarity.MLmicromatrix = src->clarity.MLmicromatrix; + dst->clarity.mlstrength = src->clarity.mlstrength; + dst->clarity.uniformity = src->clarity.uniformity; + } if (impden->get_active ()) dst->impulseDenoise = src->impulseDenoise; //if (lumaden->get_active ()) dst->lumaDenoise = src->lumaDenoise; if (dirpyreq->get_active ()) dst->dirpyrequalizer = src->dirpyrequalizer; @@ -554,6 +589,13 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r if (raw_dcb_enhance->get_active ()) dst->raw.dcb_enhance =src->raw.dcb_enhance; if (raw_expos->get_active ()) dst->raw.expos =src->raw.expos; if (raw_preser->get_active ()) dst->raw.preser =src->raw.preser; + if (raw_black->get_active ()){ + dst->raw.blackzero =src->raw.blackzero; + dst->raw.blackone =src->raw.blackone; + dst->raw.blacktwo =src->raw.blacktwo; + dst->raw.blackthree =src->raw.blackthree; + dst->raw.twogreen =src->raw.twogreen; + } if (raw_ca_autocorrect->get_active ()) dst->raw.ca_autocorrect =src->raw.ca_autocorrect; if (raw_cared->get_active ()) dst->raw.cared =src->raw.cared; if (raw_cablue->get_active ()) dst->raw.cablue =src->raw.cablue; diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h index e15390216..a920f7cf8 100644 --- a/rtgui/partialpastedlg.h +++ b/rtgui/partialpastedlg.h @@ -46,6 +46,8 @@ class PartialPasteDlg : public Gtk::Dialog { // options in detail: Gtk::CheckButton* sharpen; + Gtk::CheckButton* gradsharpen; + Gtk::CheckButton* microcontrast; Gtk::CheckButton* impden; Gtk::CheckButton* lumaden; Gtk::CheckButton* waveq; @@ -81,6 +83,7 @@ class PartialPasteDlg : public Gtk::Dialog { // options in raw: Gtk::CheckButton* raw_expos; Gtk::CheckButton* raw_preser; + Gtk::CheckButton* raw_black; Gtk::CheckButton* raw_ca_autocorrect; Gtk::CheckButton* raw_cared; Gtk::CheckButton* raw_cablue; @@ -101,13 +104,13 @@ class PartialPasteDlg : public Gtk::Dialog { sigc::connection everythingConn, basicConn, detailConn, colorConn, lensConn, compositionConn, metaicmConn, rawConn;; sigc::connection wbConn, exposureConn, hlrecConn, shConn, labcurveConn; - sigc::connection sharpenConn, impdenConn, lumadenConn, dirpyrdenConn, colordenConn, waveqConn, defringeConn, dirpyreqConn; + sigc::connection sharpenConn, gradsharpenConn, microcontrastConn, impdenConn, lumadenConn, dirpyrdenConn, colordenConn, waveqConn, defringeConn, dirpyreqConn; sigc::connection chmixerConn, colorshiftConn, colorboostConn, hsveqConn; sigc::connection distortionConn, cacorrConn, vignettingConn; sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn; sigc::connection exifchConn, iptcConn, icmConn; sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn; - sigc::connection raw_caredConn, raw_cablueConn, raw_ca_autocorrectConn, raw_hotdeadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_dmethodConn, raw_dcb_iterationsConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn; + sigc::connection raw_caredConn, raw_cablueConn, raw_ca_autocorrectConn, raw_hotdeadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_dmethodConn, raw_dcb_iterationsConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn; public: PartialPasteDlg ();