Krita Source Code Documentation
Loading...
Searching...
No Matches
XyzF16ColorSpace.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2007 Cyrille Berger (cberger@cberger.net)
3 * SPDX-FileCopyrightText: 2021 L. E. Segovia <amy@amyspark.me>
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6 */
7
8#include "XyzF16ColorSpace.h"
9#include <QDomElement>
10
11#include <QDebug>
12#include <klocalizedstring.h>
13
16#include <KoColorConversions.h>
17#include <kis_dom_utils.h>
18
20 LcmsColorSpace<KoXyzF16Traits>(colorSpaceId(), name, TYPE_XYZA_HALF_FLT, cmsSigXYZData, p)
21{
22 addChannel(new KoChannelInfo(i18n("X"), KoXyzF16Traits::x_pos * sizeof(half), KoXyzF16Traits::x_pos, KoChannelInfo::COLOR, KoChannelInfo::FLOAT16, 2, Qt::cyan));
23 addChannel(new KoChannelInfo(i18n("Y"), KoXyzF16Traits::y_pos * sizeof(half), KoXyzF16Traits::y_pos, KoChannelInfo::COLOR, KoChannelInfo::FLOAT16, 2, Qt::magenta));
24 addChannel(new KoChannelInfo(i18n("Z"), KoXyzF16Traits::z_pos * sizeof(half), KoXyzF16Traits::z_pos, KoChannelInfo::COLOR, KoChannelInfo::FLOAT16, 2, Qt::yellow));
25 addChannel(new KoChannelInfo(i18n("Alpha"), KoXyzF16Traits::alpha_pos * sizeof(half), KoXyzF16Traits::alpha_pos, KoChannelInfo::ALPHA, KoChannelInfo::FLOAT16, 2));
26
27 init();
28
29 addStandardCompositeOps<KoXyzF16Traits>(this);
30 addStandardDitherOps<KoXyzF16Traits>(this);
31}
32
34{
35 if (independence == TO_RGBA16) {
36 return true;
37 } else {
38 return false;
39 }
40}
41
43{
44 return new XyzF16ColorSpace(name(), profile()->clone());
45}
46
47void XyzF16ColorSpace::colorToXML(const quint8 *pixel, QDomDocument &doc, QDomElement &colorElt) const
48{
49 const KoXyzF16Traits::Pixel *p = reinterpret_cast<const KoXyzF16Traits::Pixel *>(pixel);
50 QDomElement labElt = doc.createElement("XYZ");
54 labElt.setAttribute("space", profile()->name());
55 colorElt.appendChild(labElt);
56}
57
58void XyzF16ColorSpace::colorFromXML(quint8 *pixel, const QDomElement &elt) const
59{
60 KoXyzF16Traits::Pixel *p = reinterpret_cast<KoXyzF16Traits::Pixel *>(pixel);
64 p->alpha = 1.0;
65}
66
67void XyzF16ColorSpace::toHSY(const QVector<double> &channelValues, qreal *hue, qreal *sat, qreal *luma) const
68{
69 qreal xyx, xyy, xyY = 0.0;
70 XYZToxyY(channelValues[0],channelValues[1],channelValues[2], &xyx, &xyy, &xyY);
71 LabToLCH(xyY,xyx,xyY, hue, sat, luma);
72}
73
74QVector <double> XyzF16ColorSpace::fromHSY(qreal *hue, qreal *sat, qreal *luma) const
75{
76 QVector <double> channelValues(4);
77 qreal xyx, xyy, xyY = 0.0;
78 LCHToLab(*luma, *sat, *hue, &xyY,&xyx,&xyy);
79 xyYToXYZ(xyx, xyy, xyY, &channelValues[0],&channelValues[1],&channelValues[2]);
80 channelValues[3]=1.0;
81 return channelValues;
82}
83
84void XyzF16ColorSpace::toYUV(const QVector<double> &channelValues, qreal *y, qreal *u, qreal *v) const
85{
86 XYZToxyY(channelValues[0],channelValues[1],channelValues[2], u, v, y);
87}
88
89QVector <double> XyzF16ColorSpace::fromYUV(qreal *y, qreal *u, qreal *v) const
90{
91 QVector <double> channelValues(4);
92 xyYToXYZ(*u, *v, *y, &channelValues[0],&channelValues[1],&channelValues[2]);
93 channelValues[3]=1.0;
94 return channelValues;
95}
const Params2D p
qreal v
qreal u
void LabToLCH(const qreal l, const qreal a, const qreal b, qreal *L, qreal *C, qreal *H)
void XYZToxyY(const qreal X, const qreal Y, const qreal Z, qreal *x, qreal *y, qreal *yY)
void LCHToLab(const qreal L, const qreal C, const qreal H, qreal *l, qreal *a, qreal *b)
void xyYToXYZ(const qreal x, const qreal y, const qreal yY, qreal *X, qreal *Y, qreal *Z)
ColorSpaceIndependence
@ TO_RGBA16
#define TYPE_XYZA_HALF_FLT
@ ALPHA
The channel represents the opacity of a pixel.
@ COLOR
The channel represents a color.
@ FLOAT16
use this for a float 16bits channel
static _Tdst scaleToA(_T a)
virtual void addChannel(KoChannelInfo *ci)
const KoColorProfile * profile() const override
XyzF16ColorSpace(const QString &name, KoColorProfile *p)
QVector< double > fromHSY(qreal *hue, qreal *sat, qreal *luma) const override
bool willDegrade(ColorSpaceIndependence independence) const override
void toYUV(const QVector< double > &channelValues, qreal *y, qreal *u, qreal *v) const override
QVector< double > fromYUV(qreal *y, qreal *u, qreal *v) const override
void colorToXML(const quint8 *pixel, QDomDocument &doc, QDomElement &colorElt) const override
virtual KoColorSpace * clone() const
void toHSY(const QVector< double > &channelValues, qreal *hue, qreal *sat, qreal *luma) const override
void colorFromXML(quint8 *pixel, const QDomElement &elt) const override
double toDouble(const QString &str, bool *ok=nullptr)
QString toString(const QString &value)