Changes to Exposure tab. Exposure controls (blackpoint, brightness, contrast, S/H compression) are now implemented with NURBS curves. Brightness bug seems fixed as a consequence. Luminance tone curve has been expanded to separate curves for L,a,b; saturation slider has been added, but at the moment saturation limiting has not been implemented in the modified tool.

This commit is contained in:
Emil Martinec
2010-10-17 14:55:40 -05:00
parent 4de32da4c0
commit 9d31c6ad19
27 changed files with 517 additions and 88 deletions

View File

@@ -55,9 +55,12 @@ void ProcParams::setDefaults () {
toneCurve.shcompr = 85;
toneCurve.curve.clear ();
lumaCurve.brightness = 0;
lumaCurve.contrast = 0;
lumaCurve.curve.clear ();
labCurve.brightness = 0;
labCurve.contrast = 0;
labCurve.saturation = 0;
labCurve.lcurve.clear ();
labCurve.acurve.clear ();
labCurve.bcurve.clear ();
sharpening.enabled = true;
sharpening.radius = 1.0;
@@ -212,10 +215,15 @@ int ProcParams::save (Glib::ustring fname) const {
keyFile.set_integer_list("Channel Mixer", "Blue", bmix);
// save luma curve
keyFile.set_integer ("Luminance Curve", "Brightness", lumaCurve.brightness);
keyFile.set_integer ("Luminance Curve", "Contrast", lumaCurve.contrast);
Glib::ArrayHandle<double> lcurve = lumaCurve.curve;
keyFile.set_double_list("Luminance Curve", "Curve", lcurve);
keyFile.set_integer ("Luminance Curve", "Brightness", labCurve.brightness);
keyFile.set_integer ("Luminance Curve", "Contrast", labCurve.contrast);
keyFile.set_integer ("Luminance Curve", "Saturation", labCurve.saturation);
Glib::ArrayHandle<double> lcurve = labCurve.lcurve;
Glib::ArrayHandle<double> acurve = labCurve.acurve;
Glib::ArrayHandle<double> bcurve = labCurve.bcurve;
keyFile.set_double_list("Luminance Curve", "LCurve", lcurve);
keyFile.set_double_list("Luminance Curve", "aCurve", acurve);
keyFile.set_double_list("Luminance Curve", "bCurve", bcurve);
// save sharpening
keyFile.set_boolean ("Sharpening", "Enabled", sharpening.enabled);
@@ -427,10 +435,13 @@ if (keyFile.has_group ("Channel Mixer")) {
// load luma curve
if (keyFile.has_group ("Luminance Curve")) {
if (keyFile.has_key ("Luminance Curve", "Brightness")) lumaCurve.brightness = keyFile.get_integer ("Luminance Curve", "Brightness");
if (keyFile.has_key ("Luminance Curve", "Contrast")) lumaCurve.contrast = keyFile.get_integer ("Luminance Curve", "Contrast");
if (keyFile.has_key ("Luminance Curve", "Brightness")) labCurve.brightness = keyFile.get_integer ("Luminance Curve", "Brightness");
if (keyFile.has_key ("Luminance Curve", "Contrast")) labCurve.contrast = keyFile.get_integer ("Luminance Curve", "Contrast");
if (keyFile.has_key ("Luminance Curve", "Saturation")) labCurve.saturation = keyFile.get_integer ("Luminance Curve", "Saturation");
if (version>200)
if (keyFile.has_key ("Luminance Curve", "Curve")) lumaCurve.curve = keyFile.get_double_list ("Luminance Curve", "Curve");
if (keyFile.has_key ("Luminance Curve", "LCurve")) labCurve.lcurve = keyFile.get_double_list ("Luminance Curve", "LCurve");
if (keyFile.has_key ("Luminance Curve", "aCurve")) labCurve.acurve = keyFile.get_double_list ("Luminance Curve", "aCurve");
if (keyFile.has_key ("Luminance Curve", "bCurve")) labCurve.bcurve = keyFile.get_double_list ("Luminance Curve", "bCurve");
}
// load sharpening
@@ -692,9 +703,12 @@ bool ProcParams::operator== (const ProcParams& other) {
&& toneCurve.autoexp == other.toneCurve.autoexp
&& toneCurve.clip == other.toneCurve.clip
&& toneCurve.expcomp == other.toneCurve.expcomp
&& lumaCurve.curve == other.lumaCurve.curve
&& lumaCurve.brightness == other.lumaCurve.brightness
&& lumaCurve.contrast == other.lumaCurve.contrast
&& labCurve.lcurve == other.labCurve.lcurve
&& labCurve.acurve == other.labCurve.acurve
&& labCurve.bcurve == other.labCurve.bcurve
&& labCurve.brightness == other.labCurve.brightness
&& labCurve.contrast == other.labCurve.contrast
&& labCurve.saturation == other.labCurve.saturation
&& sharpening.enabled == other.sharpening.enabled
&& sharpening.radius == other.sharpening.radius
&& sharpening.amount == other.sharpening.amount