add output gamma to partialpast and suppress crash when no output file #issue1081

This commit is contained in:
jdc 2011-11-02 02:48:15 +01:00
parent 800e03fdf6
commit 22f9910edb
13 changed files with 129 additions and 73 deletions

View File

@ -527,6 +527,7 @@ PARTIALPASTE_HLRECOVERY;Highlight recovery
PARTIALPASTE_HLRECOVERYTHRESHOLD;Highlight recovery threshold
PARTIALPASTE_HSVEQUALIZER;HSV Equalizer
PARTIALPASTE_ICMSETTINGS;ICM settings
PARTIALPASTE_ICMGAMMA;Output gamma
PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction
PARTIALPASTE_IPTCINFO;IPTC info
PARTIALPASTE_LABCURVE;Lab adjustments

View File

@ -330,7 +330,7 @@ Image16* ImProcFunctions::lab2rgb16b (LabImage* lab, int cx, int cy, int cw, int
int t50;
int select_temp =1;//5003K
double eps=0.000000001;// not divide by zero
//primaries
//primaries for 7 working profiles ==> output profiles
if(profi=="ProPhoto") {p1=0.7347; p2=0.2653; p3=0.1596; p4=0.8404; p5=0.0366; p6=0.0001;select_temp=1;}//Prophoto primaries
else if (profi=="WideGamut") {p1=0.7350; p2=0.2650; p3=0.1150; p4=0.8260; p5=0.1570; p6=0.0180;select_temp=1;}//Widegamut primaries
else if (profi=="Adobe RGB") {p1=0.6400; p2=0.3300; p3=0.2100; p4=0.7100; p5=0.1500; p6=0.0600;select_temp=2;}//Adobe primaries
@ -376,7 +376,7 @@ Image16* ImProcFunctions::lab2rgb16b (LabImage* lab, int cx, int cy, int cw, int
// 7 parameters for smoother curves
cmsWhitePointFromTemp(&xyD, t50);
GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildParametricToneCurve(NULL, 5, Parameters);//5 = more smoother than 4
cmsHPROFILE oprofdef = cmsCreateRGBProfileTHR(NULL, &xyD, &Primaries, GammaTRC);
cmsHPROFILE oprofdef = cmsCreateRGBProfileTHR(NULL, &xyD, &Primaries, GammaTRC); //oprofdef become Outputprofile
cmsFreeToneCurve(GammaTRC[0]);

View File

@ -489,6 +489,8 @@ class ProcParams {
HRecParams hlrecovery; ///< Highlight recovery parameters
ResizeParams resize; ///< Resize parameters
ColorManagementParams icm; ///< profiles/color spaces used during the image processing
ColorManagementParams gam; ///< profiles/color spaces used during the image processing
RAWParams raw; ///< RAW parameters before demosaicing
DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid equalizer parameters
HSVEqualizerParams hsvequalizer; ///< hsv equalizer parameters

View File

@ -33,6 +33,8 @@
namespace rtengine {
extern const Settings* settings;
IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* pl, bool tunnelMetaData) {
errorCode = 0;
@ -217,14 +219,48 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
if(params.icm.gamma != "default" || params.icm.freegamma)
{ // if select gamma output between BT709, sRGB, linear, low, high, 2.2 , 1.8
//or selected Free gamma
Image16* readyImgP;
Image16* readyImg = ipf.lab2rgb16b (labView, cx, cy, cw, ch, params.icm.output, params.icm.working, params.icm.gamma, params.icm.freegamma, params.icm.gampos, params.icm.slpos);
readyImgP=readyImg;
delete labView;
if (pl) pl->setProgress (0.70);
int drapeau=0;
// get the resize parameters
int refw, refh;
double tmpScale;
Glib::ustring chpro, outProfile;
int present_space[7]={0,0,0,0,0,0,0};
std::vector<std::string> opnames = iccStore->getOutputProfiles ();
//test if files are in system
for (int j=0; j<7;j++) {
// one can modify "option" [Color Management] to adapt name of profile if there are different for windows, MacOS, Linux ??
if(j==0) chpro=options.rtSettings.prophoto;
else if(j==1) chpro=options.rtSettings.adobe;
else if(j==2) chpro=options.rtSettings.widegamut;
else if(j==3) chpro=options.rtSettings.beta;
else if(j==4) chpro=options.rtSettings.best;
else if(j==5) chpro=options.rtSettings.bruce;
else if(j==6) chpro=options.rtSettings.srgb;
for (int i=0; i<opnames.size(); i++)
if(chpro.compare(opnames[i]) ==0) present_space[j]=1;
if (present_space[j]==0) {
if (pl) pl->setProgressStr ("Missing file..");pl->setProgress (0.0);// display file not present: not very good display information...!!
if (settings->verbose) printf("Missing file: %s \n", chpro.c_str());} //c_str()
}
// Check that output profiles exist, otherwise use LCMS2
if (params.icm.working=="ProPhoto" && present_space[0]==1) outProfile=options.rtSettings.prophoto;//in option we can change the name of file - if different...
else if (params.icm.working=="Adobe RGB" && present_space[1]==1) outProfile=options.rtSettings.adobe;
else if (params.icm.working=="WideGamut" && present_space[2]==1) outProfile=options.rtSettings.widegamut;
else if (params.icm.working=="Beta RGB" && present_space[3]==1) outProfile=options.rtSettings.beta;
else if (params.icm.working=="BestRGB" && present_space[4]==1) outProfile=options.rtSettings.best;
else if (params.icm.working=="BruceRGB" && present_space[5]==1) outProfile=options.rtSettings.bruce;
else if (params.icm.working== "sRGB" && present_space[6]==1) outProfile=options.rtSettings.srgb;
//OutProfile become Profile's system
else {if (settings->verbose) printf("No file:%s in system - use LCMS2 substitution\n",params.icm.working.c_str() ); drapeau=1; }
if (settings->verbose && drapeau==0) printf("Output profile: %s \n", outProfile.c_str()); //c_str()
if (params.resize.enabled) {
@ -293,34 +329,8 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
ProfileContent pc;
Glib::ustring chpro, outProfile;
int present_space[7]={0,0,0,0,0,0,0};
std::vector<std::string> opnames = iccStore->getOutputProfiles ();
//test if files are in system
for (int j=0; j<7;j++) {
// one can modify "option" [Color Management] to adapt name of profile if there are different for windows, MacOS, Linux ??
if(j==0) chpro=options.rtSettings.prophoto;
else if(j==1) chpro=options.rtSettings.adobe;
else if(j==2) chpro=options.rtSettings.widegamut;
else if(j==3) chpro=options.rtSettings.beta;
else if(j==4) chpro=options.rtSettings.best;
else if(j==5) chpro=options.rtSettings.bruce;
else if(j==6) chpro=options.rtSettings.srgb;
for (int i=0; i<opnames.size(); i++)
if(chpro.compare(opnames[i]) ==0) present_space[j]=1;
if (present_space[j]==0) { if (pl) pl->setProgressStr ("Missing file..");pl->setProgress (0.0);}// display file not present: not very good display information...!!
}
// Check that output profiles exist, otherwise revert to sRGB
if (params.icm.output=="ProPhoto" && present_space[0]==1) outProfile=options.rtSettings.prophoto;
else if (params.icm.output=="Adobe RGB" && present_space[1]==1) outProfile=options.rtSettings.adobe;
else if (params.icm.output=="WideGamut" && present_space[2]==1) outProfile=options.rtSettings.widegamut;
else if (params.icm.output=="Beta RGB" && present_space[3]==1) outProfile=options.rtSettings.beta;
else if (params.icm.output=="BestRGB" && present_space[4]==1) outProfile=options.rtSettings.best;
else if (params.icm.output=="BruceRGB" && present_space[5]==1) outProfile=options.rtSettings.bruce;
else outProfile=options.rtSettings.srgb; //if not found or choice=srgb
pc = iccStore->getContent (outProfile);
if (drapeau==0) pc = iccStore->getContent (outProfile);// use profile in system (Prophoto.icm, sRGB.icm, etc.) if present, otherwise use LCMS2 profile generate by lab2rgb16b
readyImg->setOutputProfile (pc.data, pc.length);
@ -337,7 +347,6 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
}
else
{//if default mode : profil = selection by choice in list (Prophoto.icm, sRGB.icm, etc., etc.) , gamma = gamma of profile or not selected Free gamma
Image16* readyImg = ipf.lab2rgb16 (labView, cx, cy, cw, ch, params.icm.output);
delete labView;
if (pl) pl->setProgress (0.70);

View File

@ -50,8 +50,10 @@
#define ADDSET_VIBRANCE_PASTELS 40
#define ADDSET_VIBRANCE_SATURATED 41
#define ADDSET_VIBRANCE_PSTHRESHOLD 42
#define ADDSET_FREE_OUPUT_GAMMA 43
#define ADDSET_FREE_OUTPUT_SLOPE 44
// When adding items, make sure to update ADDSET_PARAM_NUM
#define ADDSET_PARAM_NUM 43 // THIS IS USED AS A DELIMITER!!
#define ADDSET_PARAM_NUM 45 // THIS IS USED AS A DELIMITER!!
#endif

View File

@ -131,6 +131,7 @@ void BatchToolPanelCoordinator::initSession () {
sharpening->setAdjusterBehavior (false);
sharpenEdge->setAdjusterBehavior (false, false);
sharpenMicro->setAdjusterBehavior (false, false);
icm->setAdjusterBehavior (false, false);
chmixer->setAdjusterBehavior (false);
shadowshighlights->setAdjusterBehavior (false, false, false);
@ -154,6 +155,7 @@ void BatchToolPanelCoordinator::initSession () {
sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_AMOUNT]);
sharpenEdge->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT],options.baBehav[ADDSET_SHARPENEDGE_PASS]);
sharpenMicro->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT],options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]);
icm->setAdjusterBehavior (options.baBehav[ADDSET_FREE_OUPUT_GAMMA],options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]);
chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER]);
shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS], options.baBehav[ADDSET_SH_LOCALCONTRAST]);
@ -194,6 +196,9 @@ void BatchToolPanelCoordinator::initSession () {
if (options.baBehav[ADDSET_VIBRANCE_PASTELS]) pparams.vibrance.pastels = 0;
if (options.baBehav[ADDSET_VIBRANCE_SATURATED]) pparams.vibrance.saturated = 0;
if (options.baBehav[ADDSET_FREE_OUPUT_GAMMA]) pparams.icm.gampos = 0;
if (options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]) pparams.icm.slpos = 0;
if (options.baBehav[ADDSET_CBOOST_AMOUNT]) pparams.colorBoost.amount = 0;
if (options.baBehav[ADDSET_CS_BLUEYELLOW]) pparams.colorShift.a = 0;

View File

@ -127,16 +127,16 @@ ICMPanel::ICMPanel () : Gtk::VBox(), FoldableToolPanel(this), iunchanged(NULL),
freegamma->set_active (false);
pack_start( *freegamma);
g_ampos = Gtk::manage(new Adjuster (M("TP_GAMMA_CURV"),1,3.5,0.01,2.22));
g_ampos->setAdjusterListener (this);
if (g_ampos->delay < 1000) g_ampos->delay = 1000;
g_ampos->show();
s_lpos = Gtk::manage(new Adjuster (M("TP_GAMMA_SLOP"),0,15,0.01,4.5));
s_lpos->setAdjusterListener (this);
if (s_lpos->delay < 1000) s_lpos->delay = 1000;
s_lpos->show();
pack_start( *g_ampos, Gtk::PACK_SHRINK, 4);//gamma
pack_start( *s_lpos, Gtk::PACK_SHRINK, 4);//slope
gampos = Gtk::manage(new Adjuster (M("TP_GAMMA_CURV"),1,3.5,0.01,2.22));
gampos->setAdjusterListener (this);
if (gampos->delay < 1000) gampos->delay = 1000;
gampos->show();
slpos = Gtk::manage(new Adjuster (M("TP_GAMMA_SLOP"),0,15,0.01,4.5));
slpos->setAdjusterListener (this);
if (slpos->delay < 1000) slpos->delay = 1000;
slpos->show();
pack_start( *gampos, Gtk::PACK_SHRINK, 4);//gamma
pack_start( *slpos, Gtk::PACK_SHRINK, 4);//slope
gamcsconn = freegamma->signal_toggled().connect ( sigc::mem_fun(*this, &ICMPanel::GamChanged));
@ -243,8 +243,8 @@ void ICMPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
wgamma->set_active_text(M("GENERAL_UNCHANGED"));
wgamma->set_active_text(M("GENERAL_UNCHANGED"));
}
g_ampos->setEditedState (pedited->icm.gampos ? Edited : UnEdited);
s_lpos->setEditedState (pedited->icm.slpos ? Edited : UnEdited);
gampos->setEditedState (pedited->icm.gampos ? Edited : UnEdited);
slpos->setEditedState (pedited->icm.slpos ? Edited : UnEdited);
}
@ -253,8 +253,8 @@ void ICMPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
gamcsconn.block (false);
lastgamfree = pp->icm.freegamma;
g_ampos->setValue (pp->icm.gampos);
s_lpos->setValue (pp->icm.slpos);
gampos->setValue (pp->icm.gampos);
slpos->setValue (pp->icm.slpos);
ipc.block (false);
@ -290,8 +290,8 @@ void ICMPanel::write (ProcParams* pp, ParamsEdited* pedited) {
pp->icm.output = onames->get_active_text();
pp->icm.freegamma = freegamma->get_active();
pp->icm.blendCMSMatrix = ckbBlendCMSMatrix->get_active ();
pp->icm.gampos =(double) g_ampos->getValue();
pp->icm.slpos =(double) s_lpos->getValue();
pp->icm.gampos =(double) gampos->getValue();
pp->icm.slpos =(double) slpos->getValue();
if (pedited) {
pedited->icm.input = !iunchanged->get_active ();
@ -300,35 +300,42 @@ void ICMPanel::write (ProcParams* pp, ParamsEdited* pedited) {
pedited->icm.blendCMSMatrix = !ckbBlendCMSMatrix->get_inconsistent ();
pedited->icm.gamma = wgamma->get_active_text()!=M("GENERAL_UNCHANGED");
pedited->icm.freegamma =!freegamma->get_inconsistent();
pedited->icm.gampos = g_ampos->getEditedState ();
pedited->icm.slpos = s_lpos->getEditedState ();
pedited->icm.gampos = gampos->getEditedState ();
pedited->icm.slpos = slpos->getEditedState ();
}
}
void ICMPanel::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) {
g_ampos->setDefault (defParams->icm.gampos);
s_lpos->setDefault (defParams->icm.slpos);
gampos->setDefault (defParams->icm.gampos);
slpos->setDefault (defParams->icm.slpos);
if (pedited) {
g_ampos->setDefaultEditedState (pedited->icm.gampos ? Edited : UnEdited);
s_lpos->setDefaultEditedState (pedited->icm.slpos ? Edited : UnEdited);
gampos->setDefaultEditedState (pedited->icm.gampos ? Edited : UnEdited);
slpos->setDefaultEditedState (pedited->icm.slpos ? Edited : UnEdited);
}
else {
g_ampos->setDefaultEditedState (Irrelevant);
s_lpos->setDefaultEditedState (Irrelevant);
gampos->setDefaultEditedState (Irrelevant);
slpos->setDefaultEditedState (Irrelevant);
}
}
void ICMPanel::setAdjusterBehavior (bool gammaadd, bool slopeadd) {
gampos->setAddMode (gammaadd);
slpos->setAddMode (slopeadd);
}
void ICMPanel::adjusterChanged (Adjuster* a, double newval) {
if (listener && freegamma->get_active()) {
Glib::ustring costr = Glib::ustring::format ((int)a->getValue());
if (a==g_ampos)
if (a==gampos)
listener->panelChanged (EvGAMPOS, costr);
else if (a==s_lpos)
else if (a==slpos)
listener->panelChanged (EvSLPOS, costr);
}
@ -468,8 +475,8 @@ void ICMPanel::setBatchMode (bool batchMode) {
onames->append_text (M("GENERAL_UNCHANGED"));
wnames->append_text (M("GENERAL_UNCHANGED"));
wgamma->append_text (M("GENERAL_UNCHANGED"));
g_ampos->showEditedCB ();
s_lpos->showEditedCB ();
gampos->showEditedCB ();
slpos->showEditedCB ();
}

View File

@ -35,8 +35,8 @@ class ICMPanelListener {
class ICMPanel : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel {
protected:
Adjuster* g_ampos;
Adjuster* s_lpos;
Adjuster* gampos;
Adjuster* slpos;
bool lastgamfree;
sigc::connection gamcsconn;
//bool freegamma;
@ -74,6 +74,7 @@ class ICMPanel : public Gtk::VBox, public AdjusterListener, public FoldableToolP
void setBatchMode (bool batchMode);
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL);
void adjusterChanged (Adjuster* a, double newval);
void setAdjusterBehavior (bool gammaadd, bool slopeadd);
void wpChanged ();
void opChanged ();

View File

@ -212,7 +212,9 @@ void Options::setDefaults () {
0, // ADDSET_SHARPENMICRO_UNIFORMITY
1, // ADDSET_VIBRANCE_PASTELS
1, // ADDSET_VIBRANCE_SATURATED
0 // ADDSET_VIBRANCE_SATURATED
0, // ADDSET_VIBRANCE_PSTHRESHOLD
0, // ADDSET_FREE_OUPUT_GAMMA
0, // ADDSET_FREE_OUTPUT_SLOPE
};
baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM);

View File

@ -431,6 +431,11 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (vibrance.protectskins) toEdit.vibrance.protectskins = mods.vibrance.protectskins;
if (vibrance.avoidcolorshift) toEdit.vibrance.avoidcolorshift = mods.vibrance.avoidcolorshift;
if (vibrance.pastsattog) toEdit.vibrance.pastsattog = mods.vibrance.pastsattog;
if (colorBoost.amount) toEdit.colorBoost.amount = dontforceSet && options.baBehav[ADDSET_CBOOST_AMOUNT] ? toEdit.colorBoost.amount + mods.colorBoost.amount : mods.colorBoost.amount;
if (colorBoost.avoidclip) toEdit.colorBoost.avoidclip = mods.colorBoost.avoidclip;
if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter;
@ -509,8 +514,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (icm.blendCMSMatrix) toEdit.icm.blendCMSMatrix = mods.icm.blendCMSMatrix;
if (icm.working) toEdit.icm.working = mods.icm.working;
if (icm.output) toEdit.icm.output = mods.icm.output;
if (icm.gampos) toEdit.icm.gampos = mods.icm.gampos;
if (icm.slpos) toEdit.icm.slpos = mods.icm.slpos;
//if (icm.gampos) toEdit.icm.gampos = mods.icm.gampos;
//if (icm.slpos) toEdit.icm.slpos = mods.icm.slpos;
if (icm.gampos) toEdit.icm.gampos = dontforceSet && options.baBehav[ADDSET_FREE_OUPUT_GAMMA] ? toEdit.icm.gampos + mods.icm.gampos : mods.icm.gampos;
if (icm.slpos) toEdit.icm.slpos = dontforceSet && options.baBehav[ADDSET_FREE_OUTPUT_SLOPE] ? toEdit.icm.slpos + mods.icm.slpos : mods.icm.slpos;
if (icm.gamma) toEdit.icm.gamma = mods.icm.gamma;
if (icm.freegamma) toEdit.icm.freegamma = mods.icm.freegamma;
if (raw.ccSteps) toEdit.raw.ccSteps = mods.raw.ccSteps;

View File

@ -80,6 +80,7 @@ PartialPasteDlg::PartialPasteDlg () {
exifch = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXIFCHANGES")));
iptc = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IPTCINFO")));
icm = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMSETTINGS")));
gam = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMGAMMA")));
// options in raw:
raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR")));
@ -158,6 +159,7 @@ PartialPasteDlg::PartialPasteDlg () {
vboxes[5]->pack_start (*exifch, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*iptc, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*icm, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*gam, Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*raw, Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*hseps[6], Gtk::PACK_SHRINK, 2);
@ -262,6 +264,7 @@ PartialPasteDlg::PartialPasteDlg () {
exifchConn = exifch->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
iptcConn = iptc->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
icmConn = icm->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
gamcsconn = gam->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
raw_dmethodConn = raw_dmethod->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_ccStepsConn = raw_ccSteps->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
@ -459,16 +462,19 @@ void PartialPasteDlg::colorToggled () {
vibranceConn.block (true);
chmixerConn.block (true);
hsveqConn.block (true);
gamcsconn.block (true);
color->set_inconsistent (false);
vibrance->set_active (color->get_active ());
chmixer->set_active (color->get_active ());
hsveq->set_active (color->get_active ());
icm->set_active (color->get_active ());
vibranceConn.block (false);
chmixerConn.block (false);
hsveqConn.block (false);
gamcsconn.block (false);
}
void PartialPasteDlg::lensToggled () {
@ -519,16 +525,19 @@ void PartialPasteDlg::metaicmToggled () {
exifchConn.block (true);
iptcConn.block (true);
icmConn.block (true);
gamcsconn.block (true);
metaicm->set_inconsistent (false);
exifch->set_active (metaicm->get_active ());
iptc->set_active (metaicm->get_active ());
icm->set_active (metaicm->get_active ());
gam->set_active (metaicm->get_active ());
exifchConn.block (false);
iptcConn.block (false);
icmConn.block (false);
gamcsconn.block (false);
}
@ -551,6 +560,8 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r
if (vibrance->get_active ()) dst->vibrance = src->vibrance;
if (chmixer->get_active ()) dst->chmixer = src->chmixer;
if (hsveq->get_active ()) dst->hsvequalizer = src->hsvequalizer;
if (icm->get_active ()) dst->icm = src->icm;
if (distortion->get_active ()) dst->distortion = src->distortion;
if (cacorr->get_active ()) dst->cacorrection = src->cacorrection;
if (vignetting->get_active ()) dst->vignetting = src->vignetting;
@ -565,6 +576,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r
if (exifch->get_active ()) dst->exif = src->exif;
if (iptc->get_active ()) dst->iptc = src->iptc;
if (icm->get_active ()) dst->icm = src->icm;
if (gam->get_active ()) dst->gam = src->gam;
if (raw_dmethod->get_active ()) dst->raw.dmethod =src->raw.dmethod;
if (raw_ccSteps->get_active ()) dst->raw.ccSteps =src->raw.ccSteps;

View File

@ -58,6 +58,7 @@ class PartialPasteDlg : public Gtk::Dialog {
Gtk::CheckButton* vibrance;
Gtk::CheckButton* chmixer;
Gtk::CheckButton* hsveq;
// Gtk::CheckButton* icm;
// options in lens:
Gtk::CheckButton* distortion;
@ -76,6 +77,7 @@ class PartialPasteDlg : public Gtk::Dialog {
Gtk::CheckButton* exifch;
Gtk::CheckButton* iptc;
Gtk::CheckButton* icm;
Gtk::CheckButton* gam;
// options in raw:
Gtk::CheckButton* raw_expos;
@ -107,7 +109,7 @@ class PartialPasteDlg : public Gtk::Dialog {
sigc::connection vibranceConn, chmixerConn, hsveqConn;
sigc::connection distortionConn, cacorrConn, vignettingConn;
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn;
sigc::connection exifchConn, iptcConn, icmConn;
sigc::connection exifchConn, iptcConn, icmConn, gamcsconn;
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_all_enhanceConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;

View File

@ -195,6 +195,12 @@ Gtk::Widget* Preferences::getBatchProcPanel () {
appendBehavList (mi, M("TP_VIBRANCE_SATURATED"), ADDSET_VIBRANCE_SATURATED, false);
appendBehavList (mi, M("TP_VIBRANCE_PSTHRESHOLD"), ADDSET_VIBRANCE_PSTHRESHOLD, false);
mi = behModel->append ();
mi->set_value (behavColumns.label, M("TP_GAMMA_OUTPUT"));
appendBehavList (mi, M("TP_GAMMA_CURV"), ADDSET_FREE_OUPUT_GAMMA, false);
appendBehavList (mi, M("TP_GAMMA_SLOP"), ADDSET_FREE_OUTPUT_SLOPE, false);
mi = behModel->append ();
mi->set_value (behavColumns.label, M("TP_CHMIXER_LABEL"));
appendBehavList (mi, M("TP_CHMIXER_RED")+", "+M("TP_CHMIXER_GREEN")+", "+M("TP_CHMIXER_BLUE"), ADDSET_CHMIXER, false);