SVN commit 488014 by fjcruz:
Real dynamic support for color management, using settings from dialog setup has been added. Please test and report. CCMAIL:[hidden email] M +43 -0 canvas.cpp M +2 -0 canvas.h M +119 -3 dimginterface.cpp M +3 -0 dimginterface.h --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.cpp #488013:488014 @@ -53,6 +53,7 @@ #include "imagehistogram.h" #include "dimginterface.h" #include "canvas.h" +#include "iccsettingscontainer.h" const int HISTOGRAM_WIDTH = (256 * 4) / 3; const int HISTOGRAM_HEIGHT = (114 * 4) / 3; @@ -380,6 +381,48 @@ return (isReadOnly); } +bool Canvas::load(const QString& filename, ICCSettingsContainer *settingsContainer, QWidget *pointer) +{ + // FIXME implement this overloaded method + + if (d->rubber) { + delete d->rubber; + d->rubber = 0; + emit signalSelected(false); + } + + if (d->imageHistogram) + { + delete d->imageHistogram; + d->imageHistogram = 0; + } + + viewport()->setUpdatesEnabled(false); + + d->tileCache.clear(); + + bool isReadOnly = true; + d->im->load( filename, &isReadOnly, settingsContainer, pointer ); + + d->zoom = 1.0; + d->im->zoom(d->zoom); + + if (d->autoZoom) + updateAutoZoom(); + + updateContentsSize(); + + viewport()->setUpdatesEnabled(true); + viewport()->update(); + if (d->showHistogram) + updateHistogram(true); + + emit signalChanged(false, false); + emit signalZoomChanged(d->zoom); + + return (isReadOnly); +} + void Canvas::preload(const QString& /*filename*/) { // d->im->preload(filename); --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.h #488013:488014 @@ -37,6 +37,7 @@ class QColor; class CanvasPrivate; +class ICCSettingsContainer; class Canvas : public QScrollView { @@ -48,6 +49,7 @@ ~Canvas(); bool load(const QString& filename); + bool load(const QString& filename, ICCSettingsContainer *settingsContainer, QWidget *pointer); void preload(const QString& filename); int save(const QString& filename, int JPEGcompression, int PNGcompression, bool TIFFcompression); --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/dimginterface.cpp #488013:488014 @@ -40,6 +40,7 @@ // KDE includes. #include <kdebug.h> +#include <kmessagebox.h> // Local includes. @@ -48,6 +49,7 @@ #include "undomanager.h" #include "undoaction.h" #include "dimginterface.h" +#include "iccsettingscontainer.h" namespace Digikam { @@ -153,14 +155,127 @@ *isReadOnly = d->image.isReadOnly(); valRet = true; + } + else + { + kdWarning() << k_funcinfo << "Failed to load image " << endl; + valRet = false; + } - // Paco, uncomment this code to test ICC profil transformation. - // It's harcoded actually until we make a setup dialog tab about ICC profil. + if (d->exifOrient) + { + exifRotate(filename); + } + + return (valRet); +} + +bool DImgInterface::load(const QString& filename, bool *isReadOnly, ICCSettingsContainer *cmSettings, QWidget *pointer) +{ + + + bool valRet; + bool apply; + + *isReadOnly = true; + d->valid = false; + + d->filename = filename; + + d->width = 0; + d->height = 0; + d->origWidth = 0; + d->origHeight = 0; + d->selX = 0; + d->selY = 0; + d->selW = 0; + d->selH = 0; + d->gamma = 1.0; + d->contrast = 1.0; + d->brightness = 0.0; + d->cmod.reset(); + + d->undoMan->clear(); + + d->image = DImg(filename); + + if (!d->image.isNull()) + { + d->origWidth = d->image.width(); + d->origHeight = d->image.height(); + d->valid = true; + + d->width = d->origWidth; + d->height = d->origHeight; + + *isReadOnly = d->image.isReadOnly(); + valRet = true; + + // FIXME Implement transformations. /* IccTransform trans; trans.setProfiles("/home/gilles/Canon-EOS10D-linear.icc", "/home/gilles/AdobeRGB1998.icc"); - trans.apply(d->image); + trans.apply(d->image); */ + + if (cmSettings->askOrApplySetting) + { + apply = true; + } + else + { + apply = false; + } + + IccTransform trans; + + // First possibility: image has no embedded profile + if(d->image.getICCProfil().isNull()) + { + // Ask or apply? + if (apply) + { + trans.setProfiles( QFile::encodeName(cmSettings->inputSetting), QFile::encodeName(cmSettings->workspaceSetting)); + trans.apply( d->image ); + } + else + { + QString message = i18n("<p>This image has not assigned any color profile<p><p>Do you want to convert it to your workspace color profile?</p><p>Current workspace color profile: ") + trans.getProfileDescription( cmSettings->workspaceSetting ) + "</p>"; + + if (KMessageBox::questionYesNo(pointer, message) == KMessageBox::Yes) + { + kdDebug() << "Pressed YES" << endl; + trans.setProfiles( QFile::encodeName(cmSettings->inputSetting), QFile::encodeName(cmSettings->workspaceSetting)); + trans.apply( d->image ); + } + } + } + // Second possibility: image has an embedded profile + else + { + trans.getEmbeddedProfile( d->image ); + + if (apply) + { + trans.setProfiles(QFile::encodeName(cmSettings->workspaceSetting)); + trans.apply( d->image ); + } + else + { + if (trans.getEmbeddedProfileDescriptor() + != trans.getProfileDescription( cmSettings->workspaceSetting )) + { + kdDebug() << "Embedded profile: " << trans.getEmbeddedProfileDescriptor() << endl; + QString message = i18n("<p>This image has assigned a color profile that does not match with your default workspace color profile.<p><p>Do you want to convert it to your workspace color profile?</p><p>Current workspace color profile:<b> ") + trans.getProfileDescription( cmSettings->workspaceSetting ) + i18n("</b></p><p>Image Color Profile:<b> ") + trans.getEmbeddedProfileDescriptor() + "</b></p>"; + + if (KMessageBox::questionYesNo(pointer, message) == KMessageBox::Yes) + { + trans.setProfiles( QFile::encodeName(cmSettings->workspaceSetting)); + trans.apply( d->image ); + } + } + } + } } else { @@ -174,6 +289,7 @@ } return (valRet); + } bool DImgInterface::exifRotated() --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/dimginterface.h #488013:488014 @@ -39,6 +39,8 @@ class QString; class QPixmap; +class ICCSettingsContainer; + namespace Digikam { @@ -55,6 +57,7 @@ ~DImgInterface(); bool load(const QString& filename, bool *isReadOnly); + bool load(const QString& filename, bool *isReadOnly, ICCSettingsContainer *cmSettings, QWidget *pointer); void setExifOrient(bool exifOrient); void undo(); void redo(); _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |