X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcolortools.h;h=c55507cb59a972baabdbe1081d86b0647abd2ba2;hb=c3302003093710ee247ad84c0fe2ef3c579d417f;hp=6a4ec19d3e12c658d39c0162fdd3932c8b36cc18;hpb=2f0bbf264645a589fad0cb4b7d686699a00ed00f;p=kdenlive diff --git a/src/colortools.h b/src/colortools.h index 6a4ec19d..c55507cb 100644 --- a/src/colortools.h +++ b/src/colortools.h @@ -17,6 +17,7 @@ #include + class ColorTools : public QObject { Q_OBJECT @@ -24,6 +25,10 @@ class ColorTools : public QObject public: ColorTools(); + enum ColorsRGB { COL_R, COL_G, COL_B, COL_A, COL_Luma, COL_RGB }; + + enum ComponentsHSV { COM_H, COM_S, COM_V }; + /** @brief Draws a UV plane with given Y value. scaling defines how far to zoom in (or out). Lower value = zoom in. @@ -31,10 +36,55 @@ public: If not the full rect should be filled, set circleOnly to true. See also: http://en.wikipedia.org/wiki/YUV and http://de.wikipedia.org/wiki/Vektorskop */ - QImage yuvColorWheel(const QSize& size, const unsigned char Y, const float scaling, const bool modifiedVersion, const bool circleOnly); + QImage yuvColorWheel(const QSize& size, const unsigned char &Y, const float &scaling, const bool &modifiedVersion, const bool &circleOnly); + /** + @brief Draws a UV plane with given UV angle (ratio u:v stays constant) + scaling defines how far to zoom in (or out). Lower value = zoom in. + angle defines the angle in a default U/V plane. A vertical plane, on which Y goes from 0 to 1, + is then laid through the UV plane, with the defined angle. + @see yuvColorWheel() + */ + QImage yuvVerticalPlane(const QSize &size, const float &angle, const float &scaling); + /** + @brief Draws a RGB plane with two values on one axis and one on the other. + This is e.g. useful as background for a curves dialog. On the line from bottom left to top right + are neutral colors. The colors on the y axis show what the neutral color will look like when modifying the curve. + color defines the color to modify on the y axis. The other two components will be increased + in equal terms (linear as well) on the x axis. + scaling \in ]0,1] defines the maximum variance of the selected component; Chosing a value lower than 1 + simulates the case that the curves can adjust only +- scaling*255. This mainly delivers a more constant look + when also using the Luma component for the curves display but might not represent the actual color change! + */ + static QImage rgbCurvePlane(const QSize &size, const ColorTools::ColorsRGB &color, float scaling = 1, const QRgb &background = QRgb()); + /** + @brief Draws a YPbPr plane with Pb on the x axis and Pr on the y axis. + Y is the Y value to use. + scaling defines how far to zoom in (or out). Lower value = zoom in. + See also: http://de.wikipedia.org/wiki/YPbPr-Farbmodell and http://www.poynton.com/ColorFAQ.html + */ + QImage yPbPrColorWheel(const QSize &size, const unsigned char &Y, const float &scaling, const bool &circleOnly); + /** + @brief Draws a HSV plane with Hue on the x axis and hue difference on the y axis. + This is for the Bézier Curves widget which allows to change the hue (y) of a certain hue. + MIN/MAX give the minimum/maximum hue difference, e.g. -128,+128. + For the value ranges see: + http://doc.qt.nokia.com/latest/qcolor.html#the-hsv-color-model + */ + static QImage hsvHueShiftPlane(const QSize &size, const uint &S, const uint &V, const int &MIN, const int &MAX); + + /** + Basic HSV plane with two components varying on the x and y axis. + If both components are the same, then the y axis will be considered. + MIN/MAX give the minimum/maximum saturation, usually 0..255. + Missing colour components will be taken from baseColor. + For shear == true, the image will be sheared such that the x axis goes through (0,0) and (1,1). offsetY can additionally + shift the whole x axis vertically. + */ + static QImage hsvCurvePlane(const QSize &size, const QColor &baseColor, + const ComponentsHSV &xVariant, const ComponentsHSV &yVariant, const bool &shear = false, const float offsetY = 0); signals: - void signalWheelCalculationFinished(); + void signalYuvWheelCalculationFinished(); }; #endif // COLORTOOLS_H