[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