Black and white channel-mixer new algorithm for orange Yellow Cyan Purple Magenta

This commit is contained in:
jdc
2014-02-03 06:39:06 +01:00
parent 143cf516d5
commit aa986a4c76
12 changed files with 119 additions and 25 deletions

View File

@@ -235,6 +235,22 @@ BlackWhite::BlackWhite (): Gtk::VBox(), FoldableToolPanel(this) {
filterSep2 = Gtk::manage (new Gtk::HSeparator());
mixerVBox->pack_start (*filterSep2);
algoHBox = Gtk::manage (new Gtk::HBox ());
algoHBox->set_border_width (0);
algoHBox->set_spacing (2);
algoHBox->set_tooltip_markup (M("TP_BWMIX_ALGO_TOOLTIP"));
alLabel = Gtk::manage (new Gtk::Label (M("TP_BWMIX_ALGO")+":"));
algoHBox->pack_start (*alLabel, Gtk::PACK_SHRINK);
algo = Gtk::manage (new MyComboBoxText ());
algo->append_text (M("TP_BWMIX_ALGO_LI"));
algo->append_text (M("TP_BWMIX_ALGO_SP"));
algo->set_active (1);
algoHBox->pack_start (*algo);
mixerVBox->pack_start(*algoHBox);
algoconn = algo->signal_changed().connect ( sigc::mem_fun(*this, &BlackWhite::algoChanged) );
mixerOrange= Gtk::manage(new Adjuster (/*M("TP_BWMIX_ORANGE")*/"", -100, 200, 1, 33, imgIcon[1]));
if (mixerOrange->delay < 50) mixerOrange->delay = 50;
mixerOrange->setAdjusterListener (this);
@@ -493,6 +509,17 @@ void BlackWhite::read (const ProcParams* pp, const ParamsEdited* pedited) {
autoch->set_active (pp->blackwhite.autoc);
lastAuto = pp->blackwhite.autoc;
algoconn.block(true);
if (pedited && !pedited->blackwhite.algo)
algo->set_active (2);
else if (pp->blackwhite.algo=="LI")
algo->set_active (0);
else if (pp->blackwhite.algo=="SP")
algo->set_active (1);
algoconn.block(false);
algoChanged();
if (pedited) {
luminanceCurve->setUnChanged (!pedited->blackwhite.luminanceCurve);
beforeCurve->setUnChanged (!pedited->blackwhite.beforeCurve);
@@ -581,6 +608,8 @@ void BlackWhite::write (ProcParams* pp, ParamsEdited* pedited) {
pedited->blackwhite.beforeCurve = !beforeCurve->isUnChanged ();
pedited->blackwhite.beforeCurveMode = beforeCurveMode->get_active_row_number() != 4;
pedited->blackwhite.afterCurve = !afterCurve->isUnChanged ();
pedited->blackwhite.algo = algo->get_active_text()!=M("GENERAL_UNCHANGED");
// pedited->blackwhite.afterCurveMode = afterCurveMode->get_active_row_number() != 1;
}
if (method->get_active_row_number()==0)
@@ -590,10 +619,20 @@ void BlackWhite::write (ProcParams* pp, ParamsEdited* pedited) {
else if (method->get_active_row_number()==2)
pp->blackwhite.method = "ChannelMixer";
if (algo->get_active_row_number()==0)
pp->blackwhite.algo = "LI";
else if (algo->get_active_row_number()==1)
pp->blackwhite.algo = "SP";
pp->blackwhite.setting = getSettingString();
pp->blackwhite.filter = getFilterString();
}
void BlackWhite::algoChanged () {
if (listener && (multiImage||enabled->get_active()) ) {
listener->panelChanged (EvBWMethodalg, algo->get_active_text ());}
}
void BlackWhite::curveChanged (CurveEditor* ce) {
if (listener) {
if (ce == beforeCurve)
@@ -1045,7 +1084,7 @@ void BlackWhite::updateRGBLabel () {
}
double mixR, mixG, mixB;
Glib::ustring sSetting = getSettingString();
Color::computeBWMixerConstants(sSetting, getFilterString(), r, g, b,
Color::computeBWMixerConstants(sSetting, getFilterString(),getalgoString(), r, g, b,
mixerOrange->getValue(), mixerYellow->getValue(), mixerCyan->getValue(), mixerPurple->getValue(), mixerMagenta->getValue(),
autoch->get_active(), enabledcc->get_active(), kcorrec, mixR, mixG, mixB);
RGBLabels->set_text(
@@ -1095,6 +1134,7 @@ void BlackWhite::setBatchMode (bool batchMode) {
beforeCurveMode->append_text (M("GENERAL_UNCHANGED"));
afterCurveCEG->setBatchMode (batchMode);
// afterCurveMode->append_text (M("GENERAL_UNCHANGED"));
algo->append_text (M("GENERAL_UNCHANGED"));
showLuminance();
showFilter();
@@ -1185,6 +1225,8 @@ void BlackWhite::showMixer(int nChannels, bool RGBIsSensitive) {
mixerGreen->show(); mixerGreen->set_sensitive (RGBIsSensitive);
mixerBlue->show(); mixerBlue->set_sensitive (RGBIsSensitive);
filterSep2->hide();
algo->hide();
alLabel->hide();
mixerOrange->hide();
mixerYellow->hide();
mixerCyan->hide();
@@ -1197,6 +1239,8 @@ void BlackWhite::showMixer(int nChannels, bool RGBIsSensitive) {
mixerBlue->show(); mixerBlue->set_sensitive (true);
filterSep2->show();
mixerOrange->show();
algo->show();
alLabel->show();
mixerYellow->show();
mixerCyan->show();
mixerMagenta->show();
@@ -1219,6 +1263,15 @@ void BlackWhite::hideGamma() {
gammaFrame->hide();
}
Glib::ustring BlackWhite::getalgoString() {
Glib::ustring retVal;
if (algo->get_active_row_number()==0)
retVal = "LI";
else if (algo->get_active_row_number()==1)
retVal = "SP";
return retVal;
}
Glib::ustring BlackWhite::getSettingString() {
Glib::ustring retVal;
if (setting->get_active_row_number()==0)

View File

@@ -44,6 +44,10 @@ class BlackWhite : public Gtk::VBox, public AdjusterListener, public FoldableToo
Gtk::HBox* autoHBox;
Gtk::Button* neutral;
Gtk::Label* RGBLabels;
MyComboBoxText* algo;
sigc::connection algoconn;
Gtk::Label* alLabel;
Gtk::HBox* algoHBox;
Adjuster *mixerRed;
Adjuster *mixerGreen;
@@ -125,9 +129,12 @@ class BlackWhite : public Gtk::VBox, public AdjusterListener, public FoldableToo
bool curveMode1Changed_ ();
void curveMode1Changed2 ();
bool curveMode1Changed2_ ();
void algoChanged ();
Glib::ustring getSettingString ();
Glib::ustring getFilterString ();
Glib::ustring getalgoString ();
};
#endif

View File

@@ -243,6 +243,7 @@ void ParamsEdited::set (bool v) {
blackwhite.afterCurve = v;
blackwhite.afterCurveMode = v;
blackwhite.autoc = v;
blackwhite.algo = v;
resize.scale = v;
resize.appliesTo = v;
@@ -528,6 +529,7 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
blackwhite.afterCurve = blackwhite.afterCurve && p.blackwhite.afterCurve == other.blackwhite.afterCurve;
blackwhite.afterCurveMode = blackwhite.afterCurveMode && p.blackwhite.afterCurveMode == other.blackwhite.afterCurveMode;
blackwhite.autoc = blackwhite.autoc && p.blackwhite.autoc == other.blackwhite.autoc;
blackwhite.algo = blackwhite.algo && p.blackwhite.algo == other.blackwhite.algo;
resize.scale = resize.scale && p.resize.scale == other.resize.scale;
resize.appliesTo = resize.appliesTo && p.resize.appliesTo == other.resize.appliesTo;
resize.method = resize.method && p.resize.method == other.resize.method;
@@ -807,6 +809,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (blackwhite.beforeCurveMode) toEdit.blackwhite.beforeCurveMode = mods.blackwhite.beforeCurveMode;
if (blackwhite.afterCurve) toEdit.blackwhite.afterCurve = mods.blackwhite.afterCurve;
if (blackwhite.afterCurveMode) toEdit.blackwhite.afterCurveMode = mods.blackwhite.afterCurveMode;
if (blackwhite.algo) toEdit.blackwhite.algo = mods.blackwhite.algo;
if (resize.scale) toEdit.resize.scale = mods.resize.scale;
if (resize.appliesTo) toEdit.resize.appliesTo = mods.resize.appliesTo;

View File

@@ -384,6 +384,8 @@ class BlackWhiteParamsEdited {
bool afterCurve;
bool afterCurveMode;
bool autoc;
bool algo;
};
class CACorrParamsEdited {