12#include <klocalizedstring.h>
25 Q_ASSERT(uiRanges.size() == 4);
35 dbgPlugins <<
"CMYK (float) profile bounds for: " << icc_p->
name();
36 dbgPlugins <<
"C: " << uiRanges[0].minVal << uiRanges[0].maxVal;
37 dbgPlugins <<
"M: " << uiRanges[1].minVal << uiRanges[1].maxVal;
38 dbgPlugins <<
"Y: " << uiRanges[2].minVal << uiRanges[2].maxVal;
39 dbgPlugins <<
"K: " << uiRanges[3].minVal << uiRanges[3].maxVal;
41 addStandardCompositeOps<KoCmykF32Traits>(
this);
42 addStandardDitherOps<KoCmykF32Traits>(
this);
61 const KoCmykF32Traits::Pixel *
p =
reinterpret_cast<const KoCmykF32Traits::Pixel *
>(pixel);
62 QDomElement labElt = doc.createElement(
"CMYK");
73 colorElt.appendChild(labElt);
78 KoCmykF32Traits::Pixel *
p =
reinterpret_cast<KoCmykF32Traits::Pixel *
>(pixel);
90 qreal c0 = channelValues[0];
91 qreal c1 = channelValues[1];
92 qreal c2 = channelValues[2];
93 qreal c3 = channelValues[3];
99 RGBToHSI(c0, c1, c2, hue, sat, luma);
104 QVector <double> channelValues(5);
105 channelValues.fill(1.0);
106 HSIToRGB(*hue, *sat, *luma, &channelValues[0],&channelValues[1],&channelValues[2]);
107 channelValues[0] = qBound(0.0,1.0-channelValues[0],1.0);
108 channelValues[1] = qBound(0.0,1.0-channelValues[1],1.0);
109 channelValues[2] = qBound(0.0,1.0-channelValues[2],1.0);
110 CMYToCMYK(&channelValues[0],&channelValues[1],&channelValues[2],&channelValues[3]);
111 return channelValues;
116 qreal c0 = channelValues[0];
117 qreal c1 = channelValues[1];
118 qreal c2 = channelValues[2];
119 qreal c3 = channelValues[3];
124 RGBToYUV(c0, c1, c2, y,
u,
v, (1.0 - 0.299),(1.0 - 0.587), (1.0 - 0.114));
129 QVector <double> channelValues(5);
130 channelValues.fill(1.0);
131 YUVToRGB(*y, *
u, *
v, &channelValues[0],&channelValues[1],&channelValues[2], 0.33, 0.33, 0.33);
132 channelValues[0] = qBound(0.0,1.0-channelValues[0],1.0);
133 channelValues[1] = qBound(0.0,1.0-channelValues[1],1.0);
134 channelValues[2] = qBound(0.0,1.0-channelValues[2],1.0);
135 CMYToCMYK(&channelValues[0],&channelValues[1],&channelValues[2],&channelValues[3]);
136 return channelValues;
void RGBToHSI(qreal r, qreal g, qreal b, qreal *h, qreal *s, qreal *i)
void RGBToYUV(const qreal r, const qreal g, const qreal b, qreal *y, qreal *u, qreal *v, qreal R, qreal G, qreal B)
void HSIToRGB(const qreal h, const qreal s, const qreal i, qreal *red, qreal *green, qreal *blue)
void YUVToRGB(const qreal y, const qreal u, const qreal v, qreal *r, qreal *g, qreal *b, qreal R, qreal G, qreal B)
void CMYToCMYK(qreal *c, qreal *m, qreal *y, qreal *k)
void CMYKToCMY(qreal *c, qreal *m, qreal *y, qreal *k)
QVector< double > fromYUV(qreal *y, qreal *u, qreal *v) const override
CmykF32ColorSpace(const QString &name, KoColorProfile *p)
void colorToXML(const quint8 *pixel, QDomDocument &doc, QDomElement &colorElt) const override
void toHSY(const QVector< double > &channelValues, qreal *hue, qreal *sat, qreal *luma) const override
virtual KoColorSpace * clone() const
void colorFromXML(quint8 *pixel, const QDomElement &elt) const override
QVector< double > fromHSY(qreal *hue, qreal *sat, qreal *luma) const override
void toYUV(const QVector< double > &channelValues, qreal *y, qreal *u, qreal *v) const override
bool willDegrade(ColorSpaceIndependence independence) const override
const QVector< KoChannelInfo::DoubleRange > & getFloatUIMinMax(void) const
@ ALPHA
The channel represents the opacity of a pixel.
@ COLOR
The channel represents a color.
@ FLOAT32
use this for a float 32bits channel
static _Tdst scaleToA(_T a)
QList< KoChannelInfo * > channels
virtual void addChannel(KoChannelInfo *ci)
const KoColorProfile * profile() const override
double toDouble(const QString &str, bool *ok=nullptr)
QString toString(const QString &value)