[Digikam-devel] extragear/graphics/digikam

Gilles Caulier caulier.gilles at free.fr
Tue Jan 3 11:41:00 GMT 2006


SVN commit 493814 by cgilles:

Digikam from trunk : and finally RAW file decoding settings are now used by IE and Showfoto...

Actually, the RAW file decoding settings implementation provide these parameters :

- Enable Quality Decoding (bool) : If disable, we using old dcraw command line syntax with '-q' parameter alone. If Enable we using addition quality factor require by last dcraw release.
- Quality Decoding Factor (int 0-4) : The famous factor using to optimize RAW decoding image (0 for slow computer, 3 for speed computer)
             
TO DIGIKAM TEAM : 

- I have tested using this implementation using dcraw v7.49, not the last one released by Dave Coffin.
- We can add any other advanced RAW decoding parameter on settings dialog tab :
   * -f : Interpolate RGB as four colors. This blurs the image a little, but it eliminates false 2x2 mesh patterns.
   * -a : Automatic color balance. The default is to use a fixed color balance based on a white card photographed in sunlight.
   * -w : Use the color balance specified by the camera. If this can't be found, dcraw prints a warning and reverts to the default.
   * -n : By default, dcraw clips all colors to prevent pink hues in the highlights. Combine this option with -b 0.25 to leave the image data completely unclipped.
   * -j : For Fuji Super CCD cameras, show the image tilted 45 degrees so that each output pixel corresponds to one raw pixel.
   * -s : For Fuji Super CCD SR cameras, use the secondary sensors, in effect underexposing the image by four stops to reveal detail in the highlights. For all other cameras, -j and -s are silently ignored.

Notes : 

- "-a" and "-w" are always actually enable on the current implementation and work fine. I'm not sure if ti's a good idea to disable these parameters.
- I have never tested "-f" parameter. I think this one must be availabe in setup.
- "-n", "-j", and "-s" are indeep settings. i'm not favorable to add these options, excepted if any users want these parameters...

Please let's me hear if all is right for you ! Suggestions and wishes are welcome

CCMAIL: digikam-devel at kde.org


 M  +4 -4      libs/dimg/dimg.cpp  
 M  +2 -2      libs/dimg/dimg.h  
 M  +30 -7     libs/dimg/loaders/rawloader.cpp  
 M  +4 -1      libs/dimg/loaders/rawloader.h  
 M  +1 -1      showfoto/showfoto.cpp  
 M  +2 -1      utilities/imageeditor/canvas/dimginterface.cpp  
 M  +1 -1      utilities/imageeditor/canvas/iofilesettingscontainer.h  
 M  +1 -2      utilities/imageeditor/editor/imagewindow.cpp  


--- trunk/extragear/graphics/digikam/libs/dimg/dimg.cpp #493813:493814
@@ -58,10 +58,10 @@
 {
 }
 
-DImg::DImg(const QString& filePath)
+DImg::DImg(const QString& filePath, bool enableRAWQuality, int RAWquality)
     : m_priv(new DImgPrivate)
 {
-    load(filePath);
+    load(filePath, enableRAWQuality, RAWquality);
 }
 
 DImg::DImg(const DImg& image)
@@ -128,7 +128,7 @@
     m_priv = new DImgPrivate;
 }
 
-bool DImg::load(const QString& filePath)
+bool DImg::load(const QString& filePath, bool enableRAWQuality, int RAWquality)
 {
     FORMAT format = fileFormat(filePath);
 
@@ -199,7 +199,7 @@
         case(RAW):
         {
             kdDebug() << filePath << " : RAW file identified" << endl;
-            RAWLoader loader(this);
+            RAWLoader loader(this, enableRAWQuality, RAWquality);
             if (loader.load(filePath))
             {
                 m_priv->null       = false;
--- trunk/extragear/graphics/digikam/libs/dimg/dimg.h #493813:493814
@@ -88,7 +88,7 @@
     };
 
     DImg();
-    DImg(const QString& filePath);
+    DImg(const QString& filePath, bool enableRAWQuality=false, int RAWquality=0);
     DImg(const DImg& image);
     DImg(uint width, uint height, bool sixteenBit, bool alpha=false, uchar* data = 0);
    ~DImg();
@@ -97,7 +97,7 @@
 
     void        reset(void);
 
-    bool        load(const QString& filePath);
+    bool        load(const QString& filePath, bool enableRAWQuality, int RAWquality);
     bool        save(const QString& filePath, const char* format);
 
     bool        isNull()     const;
--- trunk/extragear/graphics/digikam/libs/dimg/loaders/rawloader.cpp #493813:493814
@@ -22,7 +22,7 @@
 // This line must be commented to prevent any latency time
 // when we use threaded image loader interface for each image
 // files io. Uncomment this line only for debugging.
-//#define ENABLE_DEBUG_MESSAGES 
+#define ENABLE_DEBUG_MESSAGES
 
 extern "C"
 {
@@ -53,10 +53,12 @@
 namespace Digikam
 {
 
-RAWLoader::RAWLoader(DImg* image)
+RAWLoader::RAWLoader(DImg* image, bool enableRAWQuality, int RAWquality)
          : DImgLoader(image)
 {
-    m_hasAlpha   = false;
+    m_hasAlpha         = false;
+    m_enableRAWQuality = enableRAWQuality;
+    m_RAWquality       = RAWquality;   
 }
 
 bool RAWLoader::load(const QString& filePath)
@@ -73,11 +75,21 @@
 
     // run dcraw with options:
     // -c : write to stdout
-    // -q : Use simple bilinear interpolation for quick results
     // -2 : 8bit ppm output
     // -w : Use camera white balance, if possible  
     // -a : Use automatic white balance
-    command  = "dcraw -c -q -2 -w -a ";
+    // -q : Use simple bilinear interpolation for quick results
+
+    if (!m_enableRAWQuality)
+        command  = "dcraw -c -2 -w -a -q ";
+    else
+    {
+        QCString rawQuality;
+        command  = "dcraw -c -2 -w -a -q ";
+        command += rawQuality.setNum(m_RAWquality);
+        command += " ";
+    }
+    
     command += QFile::encodeName( KProcess::quote( filePath ) );
 
 #ifdef ENABLE_DEBUG_MESSAGES
@@ -156,11 +168,22 @@
 
     // run dcraw with options:
     // -c : write to stdout
-    // -q : Use simple bilinear interpolation for quick results
     // -4 : 16bit ppm output
     // -a : Use automatic white balance
     // -w : Use camera white balance, if possible
-    command  = "dcraw -c -q -4 -w -a ";
+    // -q : Use simple bilinear interpolation for quick results
+
+    if (!m_enableRAWQuality)
+        command  = "dcraw -c -4 -w -a -q ";
+    else
+    {
+        QCString rawQuality;
+        command  = "dcraw -c -4 -w -a -q ";
+        command += rawQuality.setNum(m_RAWquality);
+        command += " ";
+    }
+
+    
     command += "'";
     command += QFile::encodeName( filePath );
     command += "'";
--- trunk/extragear/graphics/digikam/libs/dimg/loaders/rawloader.h #493813:493814
@@ -42,7 +42,7 @@
 {
 public:
 
-    RAWLoader(DImg* image);
+    RAWLoader(DImg* image, bool enableRAWQuality=false, int RAWquality=0);
 
     bool load(const QString& filePath);
     bool save(const QString& filePath);
@@ -55,6 +55,9 @@
 
     bool m_sixteenBit;
     bool m_hasAlpha;
+
+    bool m_enableRAWQuality;
+    int  m_RAWquality;
     
 private:
 
--- trunk/extragear/graphics/digikam/showfoto/showfoto.cpp #493813:493814
@@ -536,7 +536,7 @@
     m_IOFileSettings->TIFFCompression  = m_config->readBoolEntry("TIFFCompression", false);
 
     m_IOFileSettings->enableRAWQuality = m_config->readBoolEntry("EnableRAWQuality", false);
-    m_IOFileSettings->RAWquality       = m_config->readNumEntry("RAWquality", 0);
+    m_IOFileSettings->RAWQuality       = m_config->readNumEntry("RAWquality", 0);
     
     // Slideshow Settings.
     m_slideShowInFullScreen = m_config->readBoolEntry("SlideShowFullScreen", true);
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/dimginterface.cpp #493813:493814
@@ -203,7 +203,8 @@
 
     d->undoMan->clear();
 
-    d->image = DImg(filename);
+    d->image = DImg(filename, iofileSettings->enableRAWQuality,
+                    iofileSettings->RAWQuality);
 
     if (!d->image.isNull())
     {
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/iofilesettingscontainer.h #493813:493814
@@ -47,7 +47,7 @@
     bool enableRAWQuality;
 
     // RAW quality decoding factor value.
-    int  RAWquality;
+    int  RAWQuality;
     
 };
 
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.cpp #493813:493814
@@ -487,7 +487,7 @@
     m_IOFileSettings->TIFFCompression  = config->readBoolEntry("TIFFCompression", false);
 
     m_IOFileSettings->enableRAWQuality = config->readBoolEntry("EnableRAWQuality", false);
-    m_IOFileSettings->RAWquality       = config->readNumEntry("RAWquality", 0);
+    m_IOFileSettings->RAWQuality       = config->readNumEntry("RAWquality", 0);
 
     AlbumSettings *settings = AlbumSettings::instance();
     if (settings->getUseTrash())
@@ -597,7 +597,6 @@
     {
         QApplication::setOverrideCursor(Qt::WaitCursor);
 
-        // FIXME implement color management here
         if (m_ICCSettings->enableCMSetting)
         {
             kdDebug() << "enableCMSetting=true" << endl;



More information about the Digikam-devel mailing list