]> git.sesse.net Git - kdenlive/commitdiff
RGB parade:
authorSimon A. Eugster <simon.eu@gmail.com>
Mon, 16 Aug 2010 09:49:56 +0000 (09:49 +0000)
committerSimon A. Eugster <simon.eu@gmail.com>
Mon, 16 Aug 2010 09:49:56 +0000 (09:49 +0000)
* New paint mode («true» RGB, only alpha value changes)
* Debug output disabled

svn path=/trunk/kdenlive/; revision=4730

src/colorcorrection/rgbparadegenerator.cpp
src/colorcorrection/rgbparadegenerator.h
src/rgbparade.cpp
src/rgbparade.h

index ff1e196e43bfee926383e4dbf3800b6c5d35c697..c6121487fe23b0d88c6b87a081cd728b365d143e 100644 (file)
@@ -11,7 +11,6 @@
 #include "rgbparadegenerator.h"
 
 #include <QColor>
-#include <QDebug>
 #include <QPainter>
 #include <QPoint>
 #include <QTime>
@@ -26,7 +25,8 @@ RGBParadeGenerator::RGBParadeGenerator()
 {
 }
 
-QImage RGBParadeGenerator::calculateRGBParade(const QSize &paradeSize, const QImage &image, const bool &drawAxis, const uint &accelFactor)
+QImage RGBParadeGenerator::calculateRGBParade(const QSize &paradeSize, 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 &paradeSize, 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 &paradeSize, 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; }
index e37221037d05fdf309856e6811487a1830114acc..19f2babc91f785c7ec529bc20e9b6bbff078d0d2 100644 (file)
@@ -19,8 +19,11 @@ class QSize;
 class RGBParadeGenerator : public QObject
 {
 public:
+    enum PaintMode { PaintMode_RGB, PaintMode_RGB2 };
+
     RGBParadeGenerator();
-    QImage calculateRGBParade(const QSize &paradeSize, const QImage &image, const bool &drawAxis, const uint &accelFactor = 1);
+    QImage calculateRGBParade(const QSize &paradeSize, const QImage &image, const RGBParadeGenerator::PaintMode paintMode,
+                              const bool &drawAxis, const uint &accelFactor = 1);
 
     static const QColor colHighlight;
     static const QColor colLight;
index 200a2abb8940c6a56d95b0ee5a3c8898755b281e..0ae2ab0e16dcb3eb3c7a6e02d81e59e3e79650d2 100644 (file)
@@ -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;
index 21233cfe62d0ee76a602228539f5801b82d9c5eb..a123339a057377995e8ccec5c0b97fea442b8027 100644 (file)
@@ -28,6 +28,8 @@ public:
     QString widgetName() const;
 
 protected:
+    virtual void readConfig();
+    void writeConfig();
     QRect scopeRect();
 
 private: