[Digikam-devel] extragear/graphics/digikam/libs/imageproperties

Francisco J. Cruz fj.cruz at supercable.es
Sat Jan 7 22:12:57 GMT 2006


SVN commit 495370 by fjcruz:

Color tab shows info about image's embedded icc profiles

CCMAIL:digikam-devel at kde.org

 M  +110 -1    imagepropertiescolorstab.cpp  
 M  +10 -0     imagepropertiescolorstab.h  


--- trunk/extragear/graphics/digikam/libs/imageproperties/imagepropertiescolorstab.cpp #495369:495370
@@ -18,6 +18,8 @@
  * 
  * ============================================================ */
 
+#include <kconfig.h>
+
 // C++ include.
 
 #include <cstring>
@@ -56,6 +58,8 @@
 #include "loadsavethread.h"
 #include "imagepropertiescolorstab.h"
 
+#include LCMS_HEADER
+
 namespace Digikam
 {
 
@@ -257,7 +261,30 @@
     // ICC Profiles tab area ---------------------------------------
     
     QWidget* iccprofilePage = new QWidget( tab );
+    QGridLayout *iccLayout = new QGridLayout(iccprofilePage, 8, 3, KDialog::marginHint(), KDialog::spacingHint());
+    
+    QGroupBox *iccbox = new QGroupBox(2, Qt::Vertical, iccprofilePage);
+    iccbox->setFrameStyle (QFrame::NoFrame);
 
+    m_infoHeader = new QLabel(0, iccbox);
+
+    QGroupBox *iccdetail = new QGroupBox(2, Qt::Horizontal, iccprofilePage);
+
+    QLabel *labelName = new QLabel(i18n("Name: "), iccdetail);
+    m_labelICCName = new QLabel(0, iccdetail);
+    QLabel *labelDescription = new QLabel(i18n("Description: "), iccdetail);
+    m_labelICCDescription = new QLabel(0, iccdetail);
+    QLabel *labelCright = new QLabel(i18n("Copyright: "), iccdetail);
+    m_labelICCCopyright = new QLabel(0, iccdetail);
+    QLabel *labelIntent = new QLabel(i18n("Rendering Intent: "), iccdetail);
+    m_labelICCIntent = new QLabel(0, iccdetail);
+    QLabel *labelColor = new QLabel(i18n("Color Space: "), iccdetail);
+    m_labelICCColorSpace = new QLabel(0, iccdetail);
+
+    iccLayout->addMultiCellWidget(iccbox, 0, 0, 0, 2);
+    iccLayout->addMultiCellWidget(iccdetail, 2, 7, 0, 5);
+    iccLayout->setRowStretch(8, 10);
+
     // TODO
     
     tab->addTab(iccprofilePage, i18n("ICC profile") );
@@ -390,7 +417,7 @@
         {
             // If a selection area is done in Image Editor and if the current image is the same 
             // in Image Editor, then compute too the histogram for this selection.
-            
+            getICCData();
             if (m_selectionArea)
             {
                 m_imageSelection = m_image.copy(*m_selectionArea);
@@ -450,6 +477,7 @@
         m_regionBG->hide();
         m_maxInterv->setMaxValue(m_image.sixteenBit() ? 65535 : 255);
         updateInformations();
+        getICCData();
     }
     else
     {
@@ -638,6 +666,87 @@
     m_labelPercentileValue->setText(value.setNum(percentile, 'f', 1));
 }
 
+void ImagePropertiesColorsTab::getICCData()
+{
+    //TODO
+    if (m_image.getICCProfil().isNull())
+    {
+        m_infoHeader->setText(i18n("This image has not embedded Color Profile."));
+
+        m_labelICCName->setText(i18n("N.A."));
+        m_labelICCDescription->setText(i18n("N.A."));
+        m_labelICCCopyright->setText(i18n("N.A."));
+        m_labelICCIntent->setText(i18n("N.A."));
+        m_labelICCColorSpace->setText(i18n("N.A."));
+    }
+    else
+    {
+        cmsHPROFILE   embProfile=0;
+        QString intent, colorSpace;
+        m_infoHeader->setText(i18n("Image Color Profile Info:"));
+        
+        m_embedded_profile = m_image.getICCProfil();
+        embProfile = cmsOpenProfileFromMem(m_embedded_profile.data(),
+                                          (DWORD)m_embedded_profile.size());
+        m_labelICCName->setText(QString(cmsTakeProductName(embProfile)));
+        m_labelICCDescription->setText(QString(cmsTakeProductDesc(embProfile)));
+        m_labelICCCopyright->setText(QString(cmsTakeCopyright(embProfile)));
+
+        switch (cmsTakeRenderingIntent(embProfile))
+        {
+            case 0:
+                intent = i18n("Perceptual");
+                break;
+            case 1:
+                intent = i18n("Relative Colorimetric");
+                break;
+            case 2:
+                intent = i18n("Saturation");
+                break;
+            case 3:
+                intent = i18n("Absolute Colorimetric");
+                break;
+        }
+
+        switch (cmsGetColorSpace(embProfile))
+        {
+            case icSigLabData:
+                colorSpace = i18n("Lab");
+                break;
+            case icSigLuvData:
+                colorSpace = i18n("Luv");
+                break;
+            case icSigRgbData:
+                colorSpace = i18n("RGB");
+                break;
+            case icSigGrayData:
+                colorSpace = i18n("GRAY");
+                break;
+            case icSigHsvData:
+                colorSpace = i18n("HSV");
+                break;
+            case icSigHlsData:
+                colorSpace = i18n("HLS");
+                break;
+            case icSigCmykData:
+                colorSpace = i18n("CMYK");
+                break;
+            case icSigCmyData:
+                colorSpace= i18n("CMY");
+                break;
+            default:
+                colorSpace = i18n("Other");
+                break;
+        }
+
+        m_labelICCIntent->setText(intent);
+
+        m_labelICCColorSpace->setText(colorSpace);
+
+        cmsCloseProfile(embProfile);
+    }
+}
+
 }  // NameSpace Digikam
 
 #include "imagepropertiescolorstab.moc"
--- trunk/extragear/graphics/digikam/libs/imageproperties/imagepropertiescolorstab.h #495369:495370
@@ -73,6 +73,7 @@
     void loadImageFromUrl(const KURL& url);
     void updateInformations();
     void updateStatistiques();
+    void getICCData();
     
 private slots:
 
@@ -110,7 +111,14 @@
     QLabel                *m_labelPercentileValue;
     QLabel                *m_labelColorDepth;
     QLabel                *m_labelAlphaChannel;
+    QLabel                *m_labelICCName;
+    QLabel                *m_labelICCDescription;
+    QLabel                *m_labelICCCopyright;
+    QLabel                *m_labelICCIntent;
+    QLabel                *m_labelICCColorSpace;
+    QLabel                *m_infoHeader;
     
+    
     DImg                   m_image;
     DImg                   m_imageSelection;
     
@@ -121,6 +129,8 @@
     NavigateBarWidget     *m_navigateBar;
     ManagedLoadSaveThread *m_imageLoaderThreaded;
     QString                m_currentFilePath;
+
+    QByteArray             m_embedded_profile;
     
 };
 



More information about the Digikam-devel mailing list