From 941670b3f5dd43766324d1fdc65954c71bf8b18c Mon Sep 17 00:00:00 2001 From: "Simon A. Eugster" Date: Mon, 16 Aug 2010 09:49:56 +0000 Subject: [PATCH] =?utf8?q?RGB=20parade:=20*=20New=20paint=20mode=20(=C2=AB?= =?utf8?q?true=C2=BB=20RGB,=20only=20alpha=20value=20changes)=20*=20Debug?= =?utf8?q?=20output=20disabled?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit svn path=/trunk/kdenlive/; revision=4730 --- src/colorcorrection/rgbparadegenerator.cpp | 44 +++++++++++++++++----- src/colorcorrection/rgbparadegenerator.h | 5 ++- src/rgbparade.cpp | 33 +++++++++++++++- src/rgbparade.h | 2 + 4 files changed, 71 insertions(+), 13 deletions(-) diff --git a/src/colorcorrection/rgbparadegenerator.cpp b/src/colorcorrection/rgbparadegenerator.cpp index ff1e196e..c6121487 100644 --- a/src/colorcorrection/rgbparadegenerator.cpp +++ b/src/colorcorrection/rgbparadegenerator.cpp @@ -11,7 +11,6 @@ #include "rgbparadegenerator.h" #include -#include #include #include #include @@ -26,7 +25,8 @@ RGBParadeGenerator::RGBParadeGenerator() { } -QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QImage &image, const bool &drawAxis, const uint &accelFactor) +QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QImage &image, + const RGBParadeGenerator::PaintMode paintMode, const bool &drawAxis, const uint &accelFactor) { Q_ASSERT(accelFactor >= 1); @@ -64,9 +64,12 @@ QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QIm const int vm = weaken*18; const int vl = weaken*9; + // Divide by 3 because of the 3 components + const float brightnessAdjustment = accelFactor * ((float) ww*wh/(byteCount>>3)) / 3; + uchar minR = 255, minG = 255, minB = 255, maxR = 0, maxG = 0, maxB = 0, r, g, b; - qDebug() << "Expecting about " << avgPxPerPx << " pixels per pixel in the RGB parade. Weakening by " << weaken - << " with an acceleration factor of " << accelFactor; +// qDebug() << "Expecting about " << avgPxPerPx << " pixels per pixel in the RGB parade. Weakening by " << weaken +// << " with an acceleration factor of " << accelFactor; QImage unscaled(ww-right, 256, QImage::Format_ARGB32); @@ -88,18 +91,39 @@ QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QIm paradePoint = QPoint((int)dx, r); paradeCol = QRgb(unscaled.pixel(paradePoint)); - unscaled.setPixel(paradePoint, qRgba(CHOP255(vh + qRed(paradeCol)), CHOP255(vm + qGreen(paradeCol)), - CHOP255(vl + qBlue(paradeCol)), 255)); + switch(paintMode) { + case PaintMode_RGB2: + unscaled.setPixel(paradePoint, qRgba(CHOP255(vh + qRed(paradeCol)), CHOP255(vm + qGreen(paradeCol)), + CHOP255(vl + qBlue(paradeCol)), 255)); + break; + default: + unscaled.setPixel(paradePoint, qRgba(255,0,0, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); + break; + } paradePoint = QPoint((int) (dx + partW + offset), g); paradeCol = QRgb(unscaled.pixel(paradePoint)); - unscaled.setPixel(paradePoint, qRgba(CHOP255(vl + qRed(paradeCol)), CHOP255(vh + qGreen(paradeCol)), - CHOP255(vm + qBlue(paradeCol)), 255)); + switch(paintMode) { + case PaintMode_RGB2: + unscaled.setPixel(paradePoint, qRgba(CHOP255(vl + qRed(paradeCol)), CHOP255(vh + qGreen(paradeCol)), + CHOP255(vm + qBlue(paradeCol)), 255)); + break; + default: + unscaled.setPixel(paradePoint, qRgba(0,255,0, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); + break; + } paradePoint = QPoint((int) (dx + 2*partW + 2*offset), b); paradeCol = QRgb(unscaled.pixel(paradePoint)); - unscaled.setPixel(paradePoint, qRgba(CHOP255(vm + qRed(paradeCol)), CHOP255(vl + qGreen(paradeCol)), - CHOP255(vh + qBlue(paradeCol)), 255)); + switch(paintMode) { + case PaintMode_RGB2: + unscaled.setPixel(paradePoint, qRgba(CHOP255(vm + qRed(paradeCol)), CHOP255(vl + qGreen(paradeCol)), + CHOP255(vh + qBlue(paradeCol)), 255)); + break; + default: + unscaled.setPixel(paradePoint, qRgba(0,0,255, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); + break; + } if (r < minR) { minR = r; } diff --git a/src/colorcorrection/rgbparadegenerator.h b/src/colorcorrection/rgbparadegenerator.h index e3722103..19f2babc 100644 --- a/src/colorcorrection/rgbparadegenerator.h +++ b/src/colorcorrection/rgbparadegenerator.h @@ -19,8 +19,11 @@ class QSize; class RGBParadeGenerator : public QObject { public: + enum PaintMode { PaintMode_RGB, PaintMode_RGB2 }; + RGBParadeGenerator(); - QImage calculateRGBParade(const QSize ¶deSize, const QImage &image, const bool &drawAxis, const uint &accelFactor = 1); + QImage calculateRGBParade(const QSize ¶deSize, const QImage &image, const RGBParadeGenerator::PaintMode paintMode, + const bool &drawAxis, const uint &accelFactor = 1); static const QColor colHighlight; static const QColor colLight; diff --git a/src/rgbparade.cpp b/src/rgbparade.cpp index 200a2abb..0ae2ab0e 100644 --- a/src/rgbparade.cpp +++ b/src/rgbparade.cpp @@ -19,17 +19,44 @@ RGBParade::RGBParade(Monitor *projMonitor, Monitor *clipMonitor, QWidget *parent { ui = new Ui::RGBParade_UI(); ui->setupUi(this); - init(); + + ui->paintMode->addItem(i18n("RGB"), QVariant(RGBParadeGenerator::PaintMode_RGB)); + ui->paintMode->addItem(i18n("RGB 2"), QVariant(RGBParadeGenerator::PaintMode_RGB2)); + + bool b = true; + b &= connect(ui->paintMode, SIGNAL(currentIndexChanged(int)), this, SLOT(forceUpdateScope())); + Q_ASSERT(b); m_rgbParadeGenerator = new RGBParadeGenerator(); + init(); } RGBParade::~RGBParade() { + writeConfig(); + delete ui; delete m_rgbParadeGenerator; } +void RGBParade::readConfig() +{ + AbstractScopeWidget::readConfig(); + + KSharedConfigPtr config = KGlobal::config(); + KConfigGroup scopeConfig(config, configName()); + ui->paintMode->setCurrentIndex(scopeConfig.readEntry("paintmode", 0)); +} + +void RGBParade::writeConfig() +{ + KSharedConfigPtr config = KGlobal::config(); + KConfigGroup scopeConfig(config, configName()); + scopeConfig.writeEntry("paintmode", ui->paintMode->currentIndex()); + scopeConfig.sync(); +} + + QString RGBParade::widgetName() const { return "RGB Parade"; } QRect RGBParade::scopeRect() @@ -43,7 +70,9 @@ QImage RGBParade::renderScope(uint accelerationFactor, QImage qimage) { QTime start = QTime::currentTime(); start.start(); - QImage parade = m_rgbParadeGenerator->calculateRGBParade(m_scopeRect.size(), qimage, + + int paintmode = ui->paintMode->itemData(ui->paintMode->currentIndex()).toInt(); + QImage parade = m_rgbParadeGenerator->calculateRGBParade(m_scopeRect.size(), qimage, (RGBParadeGenerator::PaintMode) paintmode, true, accelerationFactor); emit signalScopeRenderingFinished(start.elapsed(), accelerationFactor); return parade; diff --git a/src/rgbparade.h b/src/rgbparade.h index 21233cfe..a123339a 100644 --- a/src/rgbparade.h +++ b/src/rgbparade.h @@ -28,6 +28,8 @@ public: QString widgetName() const; protected: + virtual void readConfig(); + void writeConfig(); QRect scopeRect(); private: -- 2.39.2