[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/graphics/darkroom/src
From:       Cyrille Berger <cyb () lepi ! org>
Date:       2008-07-31 14:31:58
Message-ID: 1217514718.321706.29372.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 840160 by berger:

show histogram

 M  +5 -0      Darkroom.cpp  
 M  +2 -0      Darkroom.h  
 M  +6 -4      DarkroomView.cpp  
 M  +2 -1      DarkroomView.h  
 M  +10 -6     HistogramWidget.cpp  
 M  +4 -0      HistogramWidget.h  
 M  +23 -7     ImageHistogram.cpp  
 M  +1 -1      ImageHistogram.h  
 M  +1 -1      JobPreview.cpp  
 M  +2 -1      JobPreview.h  


--- trunk/playground/graphics/darkroom/src/Darkroom.cpp #840159:840160
@@ -354,6 +354,11 @@
   d->noiseReductionOptions.thresholdNoiseReductionValue->setValue( \
_processingOptions.asInteger( "ThresholdNoiseReduction" ) );  }
 
+HistogramWidget* Darkroom::histogramWidget()
+{
+  return d->histogramDockerWidget.histogramWidget;
+}
+
 void Darkroom::closeEvent(QCloseEvent *event)
 {
   if( not idling() )
--- trunk/playground/graphics/darkroom/src/Darkroom.h #840159:840160
@@ -23,6 +23,7 @@
 class QModelIndex;
 class PostProcessor;
 class ProcessingOptions;
+class HistogramWidget;
 
 namespace ThreadWeaver {
   class Weaver;
@@ -52,6 +53,7 @@
     void openUrl(const QString&);
     ProcessingOptions processingOptions();
     void setProcessingOptions(const ProcessingOptions& );
+    HistogramWidget* histogramWidget();
   private slots:
     void rawFileActivated ( const QModelIndex & index );
     void fileOpenDir();
--- trunk/playground/graphics/darkroom/src/DarkroomView.cpp #840159:840160
@@ -40,6 +40,7 @@
 #include "PostProcessor.h"
 #include "PreviewInfo.h"
 #include "ProcessingOptions.h"
+#include "HistogramWidget.h"
 
 using namespace KDcrawIface;
 
@@ -78,7 +79,7 @@
   
   if( d->currentRawFile->previewInfo() )
   {
-    setImage( d->currentRawFile->previewInfo()->asQImage() );
+    setImage( d->currentRawFile->previewInfo() );
   } else {
     updatePreview();
   }
@@ -130,13 +131,14 @@
   if( not d->currentRawFile) return;
   d->currentRawFile->setProcessingOptions( d->darkRoom->processingOptions() ); // \
TODO do this inside Darkroom before calling updatePreview when a parameter is updated \
                JobPreview* job = new JobPreview(d->currentRawFile );
-  connect( job, SIGNAL(imageFinished(const QImage&)), this, SLOT(setImage( const \
QImage& ) ) ); +  connect( job, SIGNAL(imageFinished(const PreviewInfo*)), this, \
SLOT(setImage( const PreviewInfo* ) ) );  JobPreview::weaver()->enqueue( job );
 }
 
-void DarkroomView::setImage( const QImage& _image )
+void DarkroomView::setImage( const PreviewInfo* _previewInfo )
 {
-  d->pixmapItem->setPixmap( QPixmap::fromImage( _image ) );
+  d->pixmapItem->setPixmap( QPixmap::fromImage( _previewInfo->asQImage() ) );
+  d->darkRoom->histogramWidget()->updateData( (uchar*)const_cast<char*>( \
_previewInfo->data().data() ), _previewInfo->width(), _previewInfo->height(), false, \
false );  }
 
 void DarkroomView::wheelEvent ( QWheelEvent * event )
--- trunk/playground/graphics/darkroom/src/DarkroomView.h #840159:840160
@@ -19,6 +19,7 @@
 
 #include <QGraphicsView>
 
+class PreviewInfo;
 class RawImageInfo;
 class Darkroom;
 
@@ -69,7 +70,7 @@
     virtual void mouseMoveEvent (QMouseEvent *e);
 
   public slots:
-    void setImage( const QImage& );
+    void setImage( const PreviewInfo* );
     void updatePreview();
   private:
     void updateBatchProcessBox();
--- trunk/playground/graphics/darkroom/src/HistogramWidget.cpp #840159:840160
@@ -126,6 +126,7 @@
 
 HistogramWidget::HistogramWidget(uchar *i_data, uint i_w, uint i_h,
                                  bool i_sixteenBits,
+                                 bool has_alpha,
                                  QWidget *parent, bool selectMode,
                                  bool blinkComputation, bool statisticsVisible)
                : QWidget(parent)
@@ -135,7 +136,7 @@
     setup(selectMode, blinkComputation, statisticsVisible);
     setAttribute(Qt::WA_DeleteOnClose);
 
-    m_imageHistogram     = new ImageHistogram(i_data, i_w, i_h, i_sixteenBits);
+    m_imageHistogram     = new ImageHistogram(i_data, i_w, i_h, i_sixteenBits, \
has_alpha);  m_selectionHistogram = 0L;
 
     connectHistogram(m_imageHistogram);
@@ -148,6 +149,7 @@
 HistogramWidget::HistogramWidget(uchar *i_data, uint i_w, uint i_h,
                                  uchar *s_data, uint s_w, uint s_h,
                                  bool i_sixteenBits,
+                                 bool has_alpha,
                                  QWidget *parent, bool selectMode,
                                  bool blinkComputation, bool statisticsVisible)
                : QWidget(parent)
@@ -157,8 +159,8 @@
     setup(selectMode, blinkComputation, statisticsVisible);
     setAttribute(Qt::WA_DeleteOnClose);
 
-    m_imageHistogram     = new ImageHistogram(i_data, i_w, i_h, i_sixteenBits);
-    m_selectionHistogram = new ImageHistogram(s_data, s_w, s_h, i_sixteenBits);
+    m_imageHistogram     = new ImageHistogram(i_data, i_w, i_h, i_sixteenBits, \
has_alpha); +    m_selectionHistogram = new ImageHistogram(s_data, s_w, s_h, \
i_sixteenBits, has_alpha);  
     connectHistogram(m_imageHistogram);
     connectHistogram(m_selectionHistogram);
@@ -375,6 +377,7 @@
 
 void HistogramWidget::updateData(uchar *i_data, uint i_w, uint i_h,
                                  bool i_sixteenBits,
+                                 bool has_alpha,
                                  uchar *s_data, uint s_w, uint s_h,
                                  bool blinkComputation)
 {
@@ -398,12 +401,12 @@
        delete m_selectionHistogram;
 
     // Calc new histogram data
-    m_imageHistogram = new ImageHistogram(i_data, i_w, i_h, i_sixteenBits);
+    m_imageHistogram = new ImageHistogram(i_data, i_w, i_h, i_sixteenBits, \
has_alpha);  connectHistogram(m_imageHistogram);
 
     if (s_data && s_w && s_h)
     {
-        m_selectionHistogram = new ImageHistogram(s_data, s_w, s_h, i_sixteenBits);
+        m_selectionHistogram = new ImageHistogram(s_data, s_w, s_h, i_sixteenBits, \
has_alpha);  connectHistogram(m_selectionHistogram);
     }
     else
@@ -417,6 +420,7 @@
 
 void HistogramWidget::updateSelectionData(uchar *s_data, uint s_w, uint s_h,
                                           bool i_sixteenBits,
+                                          bool has_alpha,
                                           bool blinkComputation)
 {
     d->blinkComputation = blinkComputation;
@@ -427,7 +431,7 @@
        delete m_selectionHistogram;
 
     // Calc new histogram data
-    m_selectionHistogram = new ImageHistogram(s_data, s_w, s_h, i_sixteenBits);
+    m_selectionHistogram = new ImageHistogram(s_data, s_w, s_h, i_sixteenBits, \
has_alpha);  connectHistogram(m_selectionHistogram);
 
     if (d->renderingType == ImageSelectionHistogram)
--- trunk/playground/graphics/darkroom/src/HistogramWidget.h #840159:840160
@@ -80,6 +80,7 @@
     /** Constructor with image data and without image selection data.*/
     HistogramWidget(uchar *i_data, uint i_w, uint i_h,         // Full image info.
                     bool i_sixteenBits,                        // 8 or 16 bits \
image. +                    bool has_alpha,
                     QWidget *parent=0, bool selectMode=true,
                     bool blinkComputation=true,
                     bool statisticsVisible=false);
@@ -88,6 +89,7 @@
     HistogramWidget(uchar *i_data, uint i_w, uint i_h,         // Full image info.
                     uchar *s_data, uint s_w, uint s_h,         // Image selection \
                info.
                     bool i_sixteenBits,                        // 8 or 16 bits \
image. +                    bool has_alpha,
                     QWidget *parent=0, bool selectMode=true,
                     bool blinkComputation=true,
                     bool statisticsVisible=false);
@@ -104,12 +106,14 @@
     /** Update full image histogram data methods.*/
     void updateData(uchar *i_data, uint i_w, uint i_h,
                     bool i_sixteenBits,                        // 8 or 16 bits \
image. +                    bool has_alpha,
                     uchar *s_data=0, uint s_w=0, uint s_h=0, 
                     bool blinkComputation=true);
 
     /** Update image selection histogram data methods.*/
     void updateSelectionData(uchar *s_data, uint s_w, uint s_h,
                              bool i_sixteenBits,               // 8 or 16 bits \
image. +                            bool has_alpha,
                              bool blinkComputation=true);
 
     void setDataLoading();
--- trunk/playground/graphics/darkroom/src/ImageHistogram.cpp #840159:840160
@@ -85,12 +85,15 @@
 
     /** Used to stop thread during calculations.*/
     bool     runningFlag;
+    
+    bool has_alpha;
 };
 
-ImageHistogram::ImageHistogram(uchar *i_data, uint i_w, uint i_h, bool \
i_sixteenBits, QObject *parent) +ImageHistogram::ImageHistogram(uchar *i_data, uint \
i_w, uint i_h, bool i_sixteenBits, bool has_alpha, QObject *parent)  : \
QThread(parent)  {
     setup(i_data, i_w, i_h, i_sixteenBits);
+    d->has_alpha = has_alpha;
 }
 
 void ImageHistogram::setup(uchar *i_data, uint i_w, uint i_h, bool i_sixteenBits)
@@ -176,6 +179,7 @@
         emit calculationFinished(this, false);
         return;
     }
+    int channelCount = d->has_alpha ? 4 : 3;
 
     memset(d->histogram, 0, d->histoSegments*sizeof(struct \
ImageHistogramPriv::double_packet));  
@@ -184,17 +188,23 @@
         unsigned short  blue, green, red, alpha;
         unsigned short *data = (unsigned short*)d->imageData;
 
-        for (i = 0 ; (i < d->imageHeight*d->imageWidth*4) && d->runningFlag ; i+=4)
+        for (i = 0 ; (i < d->imageHeight*d->imageWidth*channelCount) && \
d->runningFlag ; i+=channelCount)  {
             blue  = data[ i ];
             green = data[i+1];
             red   = data[i+2];
-            alpha = data[i+3];
+            if( d->has_alpha )
+            {
+              alpha = data[i+3];
+            }
 
             d->histogram[blue].blue++;
             d->histogram[green].green++;
             d->histogram[red].red++;
-            d->histogram[alpha].alpha++;
+            if( d->has_alpha )
+            {
+              d->histogram[alpha].alpha++;
+            }
 
             max = (blue > green) ? blue : green;
 
@@ -209,17 +219,23 @@
         uchar blue, green, red, alpha;
         uchar *data = d->imageData;
 
-        for (i = 0 ; (i < d->imageHeight*d->imageWidth*4) && d->runningFlag ; i+=4)
+        for (i = 0 ; (i < d->imageHeight*d->imageWidth*channelCount) && \
d->runningFlag ; i+=channelCount)  {
             blue  = data[ i ];
             green = data[i+1];
             red   = data[i+2];
-            alpha = data[i+3];
+            if( d->has_alpha )
+            {
+              alpha = data[i+3];
+            }
 
             d->histogram[blue].blue++;
             d->histogram[green].green++;
             d->histogram[red].red++;
-            d->histogram[alpha].alpha++;
+            if( d->has_alpha )
+            {
+              d->histogram[alpha].alpha++;
+            }
 
             max = (blue > green) ? blue : green;
 
--- trunk/playground/graphics/darkroom/src/ImageHistogram.h #840159:840160
@@ -53,7 +53,7 @@
 
 public:
 
-    ImageHistogram(uchar *i_data, uint i_w, uint i_h, bool i_sixteenBits, QObject \
*parent = 0); +    ImageHistogram(uchar *i_data, uint i_w, uint i_h, bool \
i_sixteenBits, bool has_alpha, QObject *parent = 0);  ~ImageHistogram();
 
     /** Started computation: synchronous or threaded */
--- trunk/playground/graphics/darkroom/src/JobPreview.cpp #840159:840160
@@ -89,7 +89,7 @@
       }
     }
     PreviewInfo* pi = new PreviewInfo( d->rawImageInfo, width, height, imageData, \
                d->settings.sixteenBitsImage );
-    emit( imageFinished( pi->asQImage() ) );
+    emit( imageFinished( pi ) );
   }
   // TODO signal failure
 }
--- trunk/playground/graphics/darkroom/src/JobPreview.h #840159:840160
@@ -22,6 +22,7 @@
 class RawImageInfo;
 class PostProcessor;
 class QImage;
+class PreviewInfo;
 
 namespace KDcrawIface {
   class RawDecodingSettings;
@@ -40,7 +41,7 @@
   protected:
     virtual void run();    
   signals:
-    void imageFinished(const QImage&);
+    void imageFinished(const PreviewInfo*);
   private:
     struct Private;
     Private* const d;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic