Version: 0.8.2-rc1 (using KDE KDE 3.5.2) Installed from: Ubuntu Packages OS: Linux Digikam (along with most other apps such as Gimp, Krita etc.) uses various sliders to adjust colours, brightness etc. These are all labelled in non-photographic units. It would be much nicer (particularly for digikam, which is supposedly a photo-centric piece of software) if, as much as possible, adjustment could be done in terms of camera-related parameters. So, adjust exposure in EVs (+/-1EV corresponding to +/-1 stop of aperture or exposure time) etc. It's not a biggie, and mostly I am fairly happy with digikam, but the little bit of extra familiarity would be nice.
SVN commit 622055 by cgilles: digikam from trunk : Improvement of Brighness/Contrast/gamma image editor tool : - Simplification of BCG filter algorithm. - Speed-up computation of filter. - Fix Over-Exposure indicator prediction. - Fix BCG matrix computation with negative values (it's a side-effect bug with old algorithm introduced by Renchi Raju) - Add a new feature : Under-Exposure indicator! - All settings value excursions are now the same than Photoshop. CCBUGS: 128135 M +37 -28 imageplugins/imageeffect_bcg.cpp M +20 -18 imageplugins/imageeffect_bcg.h M +60 -106 libs/dimg/filters/bcgmodifier.cpp M +7 -9 libs/dimg/filters/bcgmodifier.h
SVN commit 622058 by cgilles: digikam from trunk : Adjust Levels image editor tool : Fix Gamma excursion values to be homogenous with BCG image editor tool. CCBUGS: 128135 M +6 -7 adjustlevels.cpp M +31 -33 adjustlevels.h --- trunk/extragear/graphics/digikamimageplugins/adjustlevels/adjustlevels.cpp #622057:622058 @@ -1,10 +1,9 @@ /* ============================================================ - * File : adjustlevels.cpp - * Author: Gilles Caulier <caulier dot gilles at kdemail dot net> - * Date : 2004-07-20 + * Authors: Gilles Caulier <caulier dot gilles at kdemail dot net> + * Date : 2004-07-20 * Description : image histogram adjust levels. * - * Copyright 2004-2006 by Gilles Caulier + * Copyright 2004-2007 by Gilles Caulier * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General @@ -64,6 +63,7 @@ #include "version.h" #include "adjustlevels.h" +#include "adjustlevels.moc" namespace DigikamAdjustLevelsImagesPlugin { @@ -92,7 +92,7 @@ digikamimageplugins_version, I18N_NOOP("An image-histogram-levels adjustment plugin for digiKam."), KAboutData::License_GPL, - "(c) 2004-2006, Gilles Caulier", + "(c) 2004-2007, Gilles Caulier", 0, "http://extragear.kde.org/apps/digikamimageplugins"); @@ -207,7 +207,7 @@ QToolTip::add( m_minInput, i18n( "Minimal intensity input." ) ); m_gammaInput = new KDoubleNumInput(gboxSettings); m_gammaInput->setPrecision(2); - m_gammaInput->setRange(0.1, 10.0, 0.1); + m_gammaInput->setRange(0.1, 3.0, 0.01); m_gammaInput->setValue(1.0); QToolTip::add( m_gammaInput, i18n( "Gamma input value." ) ); QWhatsThis::add( m_gammaInput, i18n("<p>Select here the gamma input value.")); @@ -730,5 +730,4 @@ } // NameSpace DigikamAdjustLevelsImagesPlugin -#include "adjustlevels.moc" --- trunk/extragear/graphics/digikamimageplugins/adjustlevels/adjustlevels.h #622057:622058 @@ -1,10 +1,9 @@ /* ============================================================ - * File : adjustlevels.h - * Author: Gilles Caulier <caulier dot gilles at kdemail dot net> - * Date : 2004-07-20 + * Authors: Gilles Caulier <caulier dot gilles at kdemail dot net> + * Date : 2004-07-20 * Description : image histogram adjust levels. * - * Copyright 2004-2006 by Gilles Caulier + * Copyright 2004-2007 by Gilles Caulier * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General @@ -48,8 +47,36 @@ AdjustLevelDialog(QWidget *parent, QString title, QFrame* banner); ~AdjustLevelDialog(); +protected: + + void finalRendering(); + private: + + void adjustSliders(int minIn, double gamIn, int maxIn, int minOut, int maxOut); +private slots: + + void slotDefault(); + void slotUser2(); + void slotUser3(); + void slotEffect(); + void slotResetCurrentChannel(); + void slotAutoLevels(); + void slotChannelChanged(int channel); + void slotScaleChanged(int scale); + void slotAdjustSliders(); + void slotGammaInputchanged(double val); + void slotAdjustMinInputSpinBox(int val); + void slotAdjustMaxInputSpinBox(int val); + void slotAdjustMinOutputSpinBox(int val); + void slotAdjustMaxOutputSpinBox(int val); + void slotSpotColorChanged(const Digikam::DColor &color); + void slotColorSelectedFromTarget(const Digikam::DColor &color); + void slotPickerColorButtonActived(); + +private: + enum HistogramScale { Linear=0, @@ -109,35 +136,6 @@ Digikam::ImageLevels *m_levels; Digikam::DImg m_originalImage; - -protected: - - void finalRendering(); - -private: - - void adjustSliders(int minIn, double gamIn, int maxIn, int minOut, int maxOut); - -private slots: - - void slotDefault(); - void slotUser2(); - void slotUser3(); - void slotEffect(); - void slotResetCurrentChannel(); - void slotAutoLevels(); - void slotChannelChanged(int channel); - void slotScaleChanged(int scale); - void slotAdjustSliders(); - void slotGammaInputchanged(double val); - void slotAdjustMinInputSpinBox(int val); - void slotAdjustMaxInputSpinBox(int val); - void slotAdjustMinOutputSpinBox(int val); - void slotAdjustMaxOutputSpinBox(int val); - void slotSpotColorChanged(const Digikam::DColor &color); - void slotColorSelectedFromTarget(const Digikam::DColor &color); - void slotPickerColorButtonActived(); - }; } // NameSpace DigikamAdjustLevelsImagesPlugin
SVN commit 622059 by cgilles: digikam from trunk : White Balance image editor tool : - Fix Gamma excursion values to be homogenous with BCG image editor tool. - Annotate than Exposure settings is in E.V - Annotate than Temperature settings is in °K CCBUGS: 128135 M +9 -10 imageeffect_whitebalance.cpp [UTF-8 ENCODING PROBLEMS] M +29 -30 imageeffect_whitebalance.h --- trunk/extragear/graphics/digikamimageplugins/whitebalance/imageeffect_whitebalance.cpp #622058:622059 @@ -1,11 +1,10 @@ /* ============================================================ - * File : imageeffect_whitebalance.cpp - * Author: Gilles Caulier <caulier dot gilles at kdemail dot net> - * Date : 2005-03-11 + * Authors: Gilles Caulier <caulier dot gilles at kdemail dot net> + * Date : 2005-03-11 * Description : a digiKam image editor plugin to correct * image white balance * - * Copyright 2005-2006 by Gilles Caulier + * Copyright 2005-2007 by Gilles Caulier * * Some parts are inspired from RawPhoto implementation copyrighted * 2004-2005 by Pawel T. Jochym <jochym at ifj edu pl> @@ -67,8 +66,9 @@ // Local includes. #include "version.h" -#include "imageeffect_whitebalance.h" #include "blackbody.h" +#include "imageeffect_whitebalance.h" +#include "imageeffect_whitebalance.moc" namespace DigikamWhiteBalanceImagesPlugin { @@ -98,7 +98,7 @@ digikamimageplugins_version, I18N_NOOP("A digiKam image plugin to correct white color balance."), KAboutData::License_GPL, - "(c) 2005-2006, Gilles Caulier", + "(c) 2005-2007, Gilles Caulier", 0, "http://extragear.kde.org/apps/digikamimageplugins"); @@ -188,7 +188,7 @@ QGridLayout *grid2 = new QGridLayout( layout2, 10, 5, spacingHint()); KIconLoader icon; - m_exposureLabel = new QLabel(i18n("Exposure:"), gboxSettings); + m_exposureLabel = new QLabel(i18n("Exposure (EV):"), gboxSettings); m_autoAdjustExposure = new QPushButton(gboxSettings); m_autoAdjustExposure->setPixmap( icon.loadIcon( "run", (KIcon::Group)KIcon::Toolbar ) ); QToolTip::add( m_autoAdjustExposure, i18n( "Auto exposure adjustments" ) ); @@ -220,12 +220,12 @@ m_gammaLabel = new QLabel(i18n("Gamma:"), gboxSettings); m_gammaInput = new KDoubleNumInput(gboxSettings); m_gammaInput->setPrecision(2); - m_gammaInput->setRange(0.01, 1.5, 0.01, true); + m_gammaInput->setRange(0.1, 3.0, 0.01, true); QWhatsThis::add( m_gammaInput, i18n("<p>Set here the gamma correction value.")); KSeparator *line = new KSeparator (Horizontal, gboxSettings); - m_temperatureLabel = new QLabel(i18n("Temperature:"), gboxSettings); + m_temperatureLabel = new QLabel(i18n("Temperature (
SVN commit 647417 by cgilles: digikam from trunk : White Balance tool : Exposure compensation settings improvement : - Added new slider to set fine exposure adjustments using a small EV excursion. - Old slider still exist to set main exposure adjustments using large EV excursion. Exposure compensation value is the sum of both value. - Add an active web link to wikipedia Exposure Compensation page. BUG: 128135 M +70 -37 imageeffect_whitebalance.cpp M +7 -2 imageeffect_whitebalance.h --- trunk/extragear/graphics/digikam/imageplugins/whitebalance/imageeffect_whitebalance.cpp #647416:647417 @@ -54,6 +54,7 @@ #include <kfiledialog.h> #include <kseparator.h> #include <kconfig.h> +#include <kactivelabel.h> // Local includes. @@ -180,7 +181,7 @@ // ------------------------------------------------------------- - QGridLayout *grid2 = new QGridLayout(layout2, 9, 5, spacingHint()); + QGridLayout *grid2 = new QGridLayout(layout2, 12, 5, spacingHint()); m_temperatureLabel = new QLabel(i18n("Temperature (K):"), gboxSettings); m_temperatureInput = new KDoubleNumInput(gboxSettings); @@ -258,17 +259,30 @@ QWhatsThis::add(m_greenInput, i18n("<p>Set here the green component to set magenta color " "cast removal level.")); - m_exposureLabel = new QLabel(i18n("Exposure (EV):"), gboxSettings); + KSeparator *line2 = new KSeparator (Horizontal, gboxSettings); + + // ------------------------------------------------------------- + + m_exposureLabel = new KActiveLabel(i18n("<qt><a href='http://en.wikipedia.org/wiki/Exposure_value'>Exposure Compensation</a> " + " (E.V): </qt>"), gboxSettings); + m_mainExposureLabel = new QLabel(i18n("Main:"), gboxSettings); m_autoAdjustExposure = new QPushButton(gboxSettings); m_autoAdjustExposure->setPixmap(kapp->iconLoader()->loadIcon("run", (KIcon::Group)KIcon::Toolbar)); QToolTip::add( m_autoAdjustExposure, i18n( "Auto exposure adjustments" ) ); QWhatsThis::add( m_autoAdjustExposure, i18n("<p>With this button, you can automatically adjust Exposure " "and Black Point values.")); - m_exposureInput = new KDoubleNumInput(gboxSettings); - m_exposureInput->setPrecision(2); - m_exposureInput->setRange(-6.0, 8.0, 0.01, true); - QWhatsThis::add( m_exposureInput, i18n("<p>Set here the Exposure Value (EV).")); + m_mainExposureInput = new KDoubleNumInput(gboxSettings); + m_mainExposureInput->setPrecision(2); + m_mainExposureInput->setRange(-6.0, 8.0, 0.1, true); + QWhatsThis::add( m_mainExposureInput, i18n("<p>Set here the main exposure compensation value in E.V.")); + m_fineExposureLabel = new QLabel(i18n("Fine:"), gboxSettings); + m_fineExposureInput = new KDoubleNumInput(gboxSettings); + m_fineExposureInput->setPrecision(2); + m_fineExposureInput->setRange(-0.5, 0.5, 0.01, true); + QWhatsThis::add( m_fineExposureInput, i18n("<p>This value in E.V will be added to main exposure " + "compensation value to set fine exposure adjustment.")); + // ------------------------------------------------------------- grid2->addMultiCellWidget(m_temperatureLabel, 0, 0, 0, 0); @@ -289,10 +303,16 @@ grid2->addMultiCellWidget(m_gammaInput, 6, 6, 1, 5); grid2->addMultiCellWidget(m_greenLabel, 7, 7, 0, 0); grid2->addMultiCellWidget(m_greenInput, 7, 7, 1, 5); - grid2->addMultiCellWidget(m_exposureLabel, 8, 8, 0, 0); - grid2->addMultiCellWidget(m_autoAdjustExposure, 8, 8, 1, 1); - grid2->addMultiCellWidget(m_exposureInput, 8, 8, 2, 5); - grid2->setRowStretch(9, 10); + + grid2->addMultiCellWidget(line2, 8, 8, 0, 5); + + grid2->addMultiCellWidget(m_exposureLabel, 9, 9, 0, 5); + grid2->addMultiCellWidget(m_mainExposureLabel, 10, 10, 0, 0); + grid2->addMultiCellWidget(m_autoAdjustExposure, 10, 10, 1, 1); + grid2->addMultiCellWidget(m_mainExposureInput, 10, 10, 2, 5); + grid2->addMultiCellWidget(m_fineExposureLabel, 11, 11, 0, 1); + grid2->addMultiCellWidget(m_fineExposureInput, 11, 11, 2, 5); + grid2->setRowStretch(12, 10); setUserAreaWidget(gboxSettings); @@ -328,8 +348,11 @@ connect(m_blackInput, SIGNAL(valueChanged (double)), this, SLOT(slotTimer())); - connect(m_exposureInput, SIGNAL(valueChanged (double)), + connect(m_mainExposureInput, SIGNAL(valueChanged (double)), this, SLOT(slotTimer())); + + connect(m_fineExposureInput, SIGNAL(valueChanged (double)), + this, SLOT(slotTimer())); connect(m_gammaInput, SIGNAL(valueChanged (double)), this, SLOT(slotTimer())); @@ -541,7 +564,8 @@ delete [] data; m_blackInput->setValue(blackLevel); - m_exposureInput->setValue(exposureLevel); + m_mainExposureInput->setValue(exposureLevel); + m_fineExposureInput->setValue(0.0); parentWidget()->unsetCursor(); slotEffect(); @@ -563,17 +587,18 @@ m_destinationPreviewData = new uchar[w*h*(sb ? 8 : 4)]; - double temperature = m_temperatureInput->value()/1000.0; - double dark = m_darkInput->value(); - double black = m_blackInput->value(); - double exposition = m_exposureInput->value(); - double gamma = 2.0-m_gammaInput->value(); - double saturation = m_saturationInput->value(); - double green = m_greenInput->value(); + double temperature = m_temperatureInput->value()/1000.0; + double dark = m_darkInput->value(); + double black = m_blackInput->value(); + double mainExposure = m_mainExposureInput->value(); + double fineExposure = m_fineExposureInput->value(); + double gamma = 2.0-m_gammaInput->value(); + double saturation = m_saturationInput->value(); + double green = m_greenInput->value(); Digikam::WhiteBalance wbFilter(sb); wbFilter.whiteBalance(data, w, h, sb, - black, exposition, + black, mainExposure + fineExposure, temperature, green, dark, gamma, saturation); @@ -595,17 +620,18 @@ int h = iface->originalHeight(); bool sb = iface->originalSixteenBit(); - double temperature = m_temperatureInput->value()/1000.0; - double dark = m_darkInput->value(); - double black = m_blackInput->value(); - double exposition = m_exposureInput->value(); - double gamma = 2.0-m_gammaInput->value(); - double saturation = m_saturationInput->value(); - double green = m_greenInput->value(); + double temperature = m_temperatureInput->value()/1000.0; + double dark = m_darkInput->value(); + double black = m_blackInput->value(); + double mainExposure = m_mainExposureInput->value(); + double fineExposure = m_fineExposureInput->value(); + double gamma = 2.0-m_gammaInput->value(); + double saturation = m_saturationInput->value(); + double green = m_greenInput->value(); Digikam::WhiteBalance wbFilter(sb); wbFilter.whiteBalance(data, w, h, sb, - black, exposition, + black, mainExposure + fineExposure, temperature, green, dark, gamma, saturation); @@ -619,7 +645,8 @@ { m_darkInput->blockSignals(true); m_blackInput->blockSignals(true); - m_exposureInput->blockSignals(true); + m_mainExposureInput->blockSignals(true); + m_fineExposureInput->blockSignals(true); m_gammaInput->blockSignals(true); m_saturationInput->blockSignals(true); m_greenInput->blockSignals(true); @@ -628,7 +655,8 @@ // Neutral color temperature settings. m_darkInput->setValue(0.5); m_blackInput->setValue(0.0); - m_exposureInput->setValue(0.0); + m_mainExposureInput->setValue(0.0); + m_fineExposureInput->setValue(0.0); m_gammaInput->setValue(1.0); m_saturationInput->setValue(1.0); m_greenInput->setValue(1.2); @@ -643,7 +671,8 @@ m_darkInput->blockSignals(false); m_blackInput->blockSignals(false); - m_exposureInput->blockSignals(false); + m_mainExposureInput->blockSignals(false); + m_fineExposureInput->blockSignals(false); m_gammaInput->blockSignals(false); m_saturationInput->blockSignals(false); m_greenInput->blockSignals(false); @@ -660,7 +689,8 @@ m_darkInput->setValue(config->readDoubleNumEntry("Dark", 0.5)); m_blackInput->setValue(config->readDoubleNumEntry("Black", 0.0)); - m_exposureInput->setValue(config->readDoubleNumEntry("Exposure", 0.0)); + m_mainExposureInput->setValue(config->readDoubleNumEntry("MainExposure", 0.0)); + m_fineExposureInput->setValue(config->readDoubleNumEntry("FineExposure", 0.0)); m_gammaInput->setValue(config->readDoubleNumEntry("Gamma", 1.0)); m_saturationInput->setValue(config->readDoubleNumEntry("Saturation", 1.0)); m_greenInput->setValue(config->readDoubleNumEntry("Green", 1.2)); @@ -679,7 +709,8 @@ config->writeEntry("Dark", m_darkInput->value()); config->writeEntry("Black", m_blackInput->value()); - config->writeEntry("Exposure", m_exposureInput->value()); + config->writeEntry("MainExposure", m_mainExposureInput->value()); + config->writeEntry("FineExposure", m_fineExposureInput->value()); config->writeEntry("Gamma", m_gammaInput->value()); config->writeEntry("Saturation", m_saturationInput->value()); config->writeEntry("Green", m_greenInput->value()); @@ -702,7 +733,7 @@ { QTextStream stream( &file ); - if ( stream.readLine() != "# White Color Balance Configuration File" ) + if ( stream.readLine() != "# White Color Balance Configuration File V2" ) { KMessageBox::error(this, i18n("\"%1\" is not a White Color Balance settings text file.") @@ -715,7 +746,8 @@ m_temperatureInput->setValue( stream.readLine().toDouble() ); m_darkInput->setValue( stream.readLine().toDouble() ); m_blackInput->setValue( stream.readLine().toDouble() ); - m_exposureInput->setValue( stream.readLine().toDouble() ); + m_mainExposureInput->setValue( stream.readLine().toDouble() ); + m_fineExposureInput->setValue( stream.readLine().toDouble() ); m_gammaInput->setValue( stream.readLine().toDouble() ); m_saturationInput->setValue( stream.readLine().toDouble() ); m_greenInput->setValue( stream.readLine().toDouble() ); @@ -743,11 +775,12 @@ if ( file.open(IO_WriteOnly) ) { QTextStream stream( &file ); - stream << "# White Color Balance Configuration File\n"; + stream << "# White Color Balance Configuration File V2\n"; stream << m_temperatureInput->value() << "\n"; stream << m_darkInput->value() << "\n"; stream << m_blackInput->value() << "\n"; - stream << m_exposureInput->value() << "\n"; + stream << m_mainExposureInput->value() << "\n"; + stream << m_fineExposureInput->value() << "\n"; stream << m_gammaInput->value() << "\n"; stream << m_saturationInput->value() << "\n"; stream << m_greenInput->value() << "\n"; --- trunk/extragear/graphics/digikam/imageplugins/whitebalance/imageeffect_whitebalance.h #647416:647417 @@ -37,6 +37,7 @@ class QHButtonGroup; class KDoubleNumInput; +class KActiveLabel; namespace Digikam { @@ -128,15 +129,19 @@ QLabel *m_temperaturePresetLabel; QLabel *m_darkLabel; QLabel *m_blackLabel; - QLabel *m_exposureLabel; + QLabel *m_mainExposureLabel; + QLabel *m_fineExposureLabel; QLabel *m_gammaLabel; QLabel *m_saturationLabel; QLabel *m_greenLabel; + KActiveLabel *m_exposureLabel; + KDoubleNumInput *m_temperatureInput; KDoubleNumInput *m_darkInput; KDoubleNumInput *m_blackInput; - KDoubleNumInput *m_exposureInput; + KDoubleNumInput *m_mainExposureInput; + KDoubleNumInput *m_fineExposureInput; KDoubleNumInput *m_gammaInput; KDoubleNumInput *m_saturationInput; KDoubleNumInput *m_greenInput;