From: Simon A. Eugster Date: Tue, 31 Aug 2010 14:58:16 +0000 (+0000) Subject: RGB Parade changes: X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=b1126cff8563150c39f529476e92d48abce46737;p=kdenlive RGB Parade changes: * Added a line through the mouse position to display the value * Neutral paint mode White added * Paint mode RGB2 removed, looked bad svn path=/trunk/kdenlive/; revision=4798 --- diff --git a/src/colorcorrection/rgbparadegenerator.cpp b/src/colorcorrection/rgbparadegenerator.cpp index 222749c3..b3edd1bb 100644 --- a/src/colorcorrection/rgbparadegenerator.cpp +++ b/src/colorcorrection/rgbparadegenerator.cpp @@ -21,6 +21,10 @@ const QColor RGBParadeGenerator::colHighlight(255, 245, 235, 255); const QColor RGBParadeGenerator::colLight(200, 200, 200, 255); const QColor RGBParadeGenerator::colSoft(150, 150, 150, 255); + +const uchar RGBParadeGenerator::distRight(40); +const uchar RGBParadeGenerator::distBottom(40); + RGBParadeGenerator::RGBParadeGenerator() { } @@ -52,20 +56,12 @@ QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QIm const uint byteCount = iw*ih; const uchar offset = 10; - const uchar right = 40; - const uchar bottom = 40; - const int partW = (ww - 2*offset - right) / 3; - const int partH = wh - bottom; + const int partW = (ww - 2*offset - distRight) / 3; + const int partH = wh - distBottom; // To get constant brightness, independant of acceleration factor and input image size // Must be a float because the acceleration factor can be high, leading to <1 expected px per px. - const float avgPxPerPx = ((float)(image.width() * image.height()) / (500*partW*accelFactor)); - const float weaken = (avgPxPerPx == 0) ? 1 : (float)4/avgPxPerPx; - const int vh = weaken*27; - const int vm = weaken*18; - const int vl = weaken*9; - - // Divide by 3 because of the 3 components + // 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; @@ -73,7 +69,7 @@ QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QIm // << " with an acceleration factor of " << accelFactor; - QImage unscaled(ww-right, 256, QImage::Format_ARGB32); + QImage unscaled(ww-distRight, 256, QImage::Format_ARGB32); unscaled.fill(qRgba(0, 0, 0, 0)); const float wPrediv = (float)(partW-1)/(iw-1); @@ -93,36 +89,33 @@ QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QIm paradePoint = QPoint((int)dx, r); paradeCol = QRgb(unscaled.pixel(paradePoint)); switch(paintMode) { - case PaintMode_RGB2: - unscaled.setPixel(paradePoint, qRgba(CHOP255(vh + qRed(paradeCol)), CHOP255(vm + qGreen(paradeCol)), - CHOP255(vl + qBlue(paradeCol)), 255)); + case PaintMode_RGB: + unscaled.setPixel(paradePoint, qRgba(255,10,10, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); break; default: - unscaled.setPixel(paradePoint, qRgba(255,0,0, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); + unscaled.setPixel(paradePoint, qRgba(255,255,255, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); break; } paradePoint = QPoint((int) (dx + partW + offset), g); paradeCol = QRgb(unscaled.pixel(paradePoint)); switch(paintMode) { - case PaintMode_RGB2: - unscaled.setPixel(paradePoint, qRgba(CHOP255(vl + qRed(paradeCol)), CHOP255(vh + qGreen(paradeCol)), - CHOP255(vm + qBlue(paradeCol)), 255)); + case PaintMode_RGB: + unscaled.setPixel(paradePoint, qRgba(10,255,10, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); break; default: - unscaled.setPixel(paradePoint, qRgba(0,255,0, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); + unscaled.setPixel(paradePoint, qRgba(255,255,255, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); break; } paradePoint = QPoint((int) (dx + 2*partW + 2*offset), b); paradeCol = QRgb(unscaled.pixel(paradePoint)); switch(paintMode) { - case PaintMode_RGB2: - unscaled.setPixel(paradePoint, qRgba(CHOP255(vm + qRed(paradeCol)), CHOP255(vl + qGreen(paradeCol)), - CHOP255(vh + qBlue(paradeCol)), 255)); + case PaintMode_RGB: + unscaled.setPixel(paradePoint, qRgba(10,10,255, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); break; default: - unscaled.setPixel(paradePoint, qRgba(0,0,255, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); + unscaled.setPixel(paradePoint, qRgba(255,255,255, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol)))); break; } @@ -147,7 +140,7 @@ QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QIm QRgb opx; for (uint i = 0; i <= 10; i++) { dy = (float)i/10 * (partH-1); - for (uint x = 0; x < ww-right; x++) { + for (uint x = 0; x < ww-distRight; x++) { opx = parade.pixel(x, dy); parade.setPixel(x,dy, qRgba(CHOP255(150+qRed(opx)), 255, CHOP255(200+qBlue(opx)), CHOP255(32+qAlpha(opx)))); @@ -190,8 +183,8 @@ QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QIm davinci.drawText(partW + offset + d, wh-20, QString::number(maxG, 'f', 0)); davinci.drawText(2*partW + 2*offset + d, wh-20, QString::number(maxB, 'f', 0)); - davinci.drawText(ww-right+5, 10, "255"); - davinci.drawText(ww-right+5, partH+5, "0"); + davinci.drawText(ww-distRight+5, 10, "255"); + davinci.drawText(ww-distRight+5, partH+5, "0"); diff --git a/src/colorcorrection/rgbparadegenerator.h b/src/colorcorrection/rgbparadegenerator.h index 50b98c91..17a3752b 100644 --- a/src/colorcorrection/rgbparadegenerator.h +++ b/src/colorcorrection/rgbparadegenerator.h @@ -19,7 +19,7 @@ class QSize; class RGBParadeGenerator : public QObject { public: - enum PaintMode { PaintMode_RGB, PaintMode_RGB2 }; + enum PaintMode { PaintMode_RGB, PaintMode_White }; RGBParadeGenerator(); QImage calculateRGBParade(const QSize ¶deSize, const QImage &image, const RGBParadeGenerator::PaintMode paintMode, @@ -28,6 +28,9 @@ public: static const QColor colHighlight; static const QColor colLight; static const QColor colSoft; + + static const uchar distRight; + static const uchar distBottom; }; #endif // RGBPARADEGENERATOR_H diff --git a/src/histogram.cpp b/src/histogram.cpp index 8529aa45..fe24ee6b 100644 --- a/src/histogram.cpp +++ b/src/histogram.cpp @@ -15,7 +15,7 @@ #include "renderer.h" Histogram::Histogram(Monitor *projMonitor, Monitor *clipMonitor, QWidget *parent) : - AbstractScopeWidget(projMonitor, clipMonitor, parent) + AbstractScopeWidget(projMonitor, clipMonitor, false, parent) { ui = new Ui::Histogram_UI(); ui->setupUi(this); diff --git a/src/rgbparade.cpp b/src/rgbparade.cpp index c14ac9a0..7e0ca385 100644 --- a/src/rgbparade.cpp +++ b/src/rgbparade.cpp @@ -9,6 +9,7 @@ ***************************************************************************/ #include +#include #include #include #include "renderer.h" @@ -16,13 +17,13 @@ #include "rgbparadegenerator.h" RGBParade::RGBParade(Monitor *projMonitor, Monitor *clipMonitor, QWidget *parent) : - AbstractScopeWidget(projMonitor, clipMonitor, parent) + AbstractScopeWidget(projMonitor, clipMonitor, true, parent) { ui = new Ui::RGBParade_UI(); ui->setupUi(this); ui->paintMode->addItem(i18n("RGB"), QVariant(RGBParadeGenerator::PaintMode_RGB)); - ui->paintMode->addItem(i18n("RGB 2"), QVariant(RGBParadeGenerator::PaintMode_RGB2)); + ui->paintMode->addItem(i18n("White"), QVariant(RGBParadeGenerator::PaintMode_White)); bool b = true; @@ -38,7 +39,7 @@ RGBParade::RGBParade(Monitor *projMonitor, Monitor *clipMonitor, QWidget *parent b &= connect(m_aGradRef, SIGNAL(changed()), this, SLOT(forceUpdateScope())); b &= connect(ui->paintMode, SIGNAL(currentIndexChanged(int)), this, SLOT(forceUpdateScope())); - + b &= connect(this, SIGNAL(signalMousePositionChanged()), this, SLOT(forceUpdateHUD())); Q_ASSERT(b); m_rgbParadeGenerator = new RGBParadeGenerator(); @@ -85,7 +86,32 @@ QRect RGBParade::scopeRect() return QRect(topleft, QPoint(this->size().width() - offset, this->size().height() - offset)); } -QImage RGBParade::renderHUD(uint) { return QImage(); } +QImage RGBParade::renderHUD(uint) +{ + if (scopeRect().height() > 0 && m_mouseWithinWidget) { + QImage hud(m_scopeRect.size(), QImage::Format_ARGB32); + hud.fill(qRgba(0,0,0,0)); + + QPainter davinci(&hud); + davinci.setPen(penLight); + + int x = scopeRect().width()-30; + int y = m_mousePos.y() - scopeRect().y(); + + // Draw a horizontal line through the current mouse position + // and show the value of the waveform there + davinci.drawLine(0, y, scopeRect().size().width()-RGBParadeGenerator::distRight, y); + + int val = 255*(1-((float)y/(scopeRect().height()-RGBParadeGenerator::distBottom))); + davinci.drawText(x, scopeRect().height()/2, QVariant(val).toString()); + + emit signalHUDRenderingFinished(1, 1); + return hud; + } else { + emit signalHUDRenderingFinished(1, 1); + return QImage(); + } +} QImage RGBParade::renderScope(uint accelerationFactor, QImage qimage) { QTime start = QTime::currentTime(); diff --git a/src/waveform.cpp b/src/waveform.cpp index 035b2910..cb7dcf5c 100644 --- a/src/waveform.cpp +++ b/src/waveform.cpp @@ -107,15 +107,18 @@ QImage Waveform::renderHUD(uint) { QImage hud(m_scopeRect.size(), QImage::Format_ARGB32); hud.fill(qRgba(0,0,0,0)); - QPainter davinci(&hud); + QPainter davinci(&hud); davinci.setPen(penLight); int x = scopeRect().width()-m_textWidth.width()+3; int y = m_mousePos.y() - scopeRect().y(); if (scopeRect().height() > 0 && m_mouseWithinWidget) { + // Draw a horizontal line through the current mouse position + // and show the value of the waveform there davinci.drawLine(0, y, scopeRect().size().width()-m_textWidth.width(), y); + int val = 255*(1-(float)y/scopeRect().height()); davinci.drawText(x, scopeRect().height()/2, QVariant(val).toString()); }