Krita Source Code Documentation
Loading...
Searching...
No Matches
KoAlphaColorSpace.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6#ifndef KOALPHACOLORSPACE_H
7#define KOALPHACOLORSPACE_H
8
9#include <QColor>
10
11#include "DebugPigment.h"
12#include "kritapigment_export.h"
13
15#include "KoColorSpaceTraits.h"
16
20
21#include <KoConfig.h>
22#ifdef HAVE_OPENEXR
23#include <half.h>
24#endif
25
26
27template <typename _T, typename _Tdst>
29
33
34template <typename channel_type> KoID alphaIdFromChannelType();
35template <> inline KoID alphaIdFromChannelType<quint8>() { return KoID("ALPHA", i18n("Alpha (8-bit integer)")); }
36template <> inline KoID alphaIdFromChannelType<quint16>() { return KoID("ALPHAU16", i18n("Alpha (16-bit integer)")); }
37template <> inline KoID alphaIdFromChannelType<float>() { return KoID("ALPHAF32", i18n("Alpha (32-bit floating point)")); }
38
39#ifdef HAVE_OPENEXR
40typedef KoColorSpaceTrait<half, 1, 0> AlphaF16Traits;
41template <> inline KoID alphaIdFromChannelType<half>() { return KoID("ALPHAF16", i18n("Alpha (16-bit floating point)")); }
42#endif
43
44class QBitArray;
45
50template <class _CSTrait>
51class KRITAPIGMENT_EXPORT KoAlphaColorSpaceImpl : public KoColorSpaceAbstract<_CSTrait>
52{
53 typedef typename _CSTrait::channels_type channels_type;
57
58
59public:
60
62
63 ~KoAlphaColorSpaceImpl() override;
64
65 static QString colorSpaceId() {
66 return alphaIdFromChannelType<channels_type>().id();
67 }
68
69 KoID colorModelId() const override {
70 return AlphaColorModelID;
71 }
72
73 KoID colorDepthId() const override {
74 return colorDepthIdForChannelType<channels_type>();
75 }
76
77 virtual KoColorSpace* clone() const;
78
79 bool willDegrade(ColorSpaceIndependence independence) const override {
80 Q_UNUSED(independence);
81 return false;
82 }
83
84 bool profileIsCompatible(const KoColorProfile* /*profile*/) const override {
85 return false;
86 }
87
88 void fromQColor(const QColor& color, quint8 *dst) const override;
89
90 void toQColor(const quint8 *src, QColor *c) const override;
91
92 quint8 difference(const quint8 *src1, const quint8 *src2) const override;
93 quint8 differenceA(const quint8 *src1, const quint8 *src2) const override;
94
95 quint32 colorChannelCount() const override {
96 return 0;
97 }
98
99 QString channelValueText(const quint8 *pixel, quint32 channelIndex) const override;
100
101 QString normalisedChannelValueText(const quint8 *pixel, quint32 channelIndex) const override;
102
103 virtual void convolveColors(quint8** colors, qreal* kernelValues, quint8 *dst, qreal factor, qreal offset, qint32 nColors, const QBitArray & channelFlags) const;
104
105 virtual quint32 colorSpaceType() const {
106 return 0;
107 }
108
109 bool hasHighDynamicRange() const override {
110 return false;
111 }
112
113 const KoColorProfile* profile() const override {
114 return m_profile;
115 }
116
117 QImage convertToQImage(const quint8 *data, qint32 width, qint32 height,
118 const KoColorProfile * dstProfile,
120 KoColorConversionTransformation::ConversionFlags conversionFlags) const override;
121
122 void toLabA16(const quint8* src, quint8* dst, quint32 nPixels) const override;
123 void fromLabA16(const quint8* src, quint8* dst, quint32 nPixels) const override;
124
125 void toRgbA16(const quint8* src, quint8* dst, quint32 nPixels) const override;
126 void fromRgbA16(const quint8* src, quint8* dst, quint32 nPixels) const override;
127
128 KoColorTransformation* createBrightnessContrastAdjustment(const quint16* transferValues) const override {
129 Q_UNUSED(transferValues);
130 warnPigment << i18n("Undefined operation in the alpha color space");
131 return 0;
132 }
133
134 KoColorTransformation* createPerChannelAdjustment(const quint16* const*) const override {
135 warnPigment << i18n("Undefined operation in the alpha color space");
136 return 0;
137 }
138
139 KoColorTransformation *createDarkenAdjustment(qint32 , bool , qreal) const override {
140 warnPigment << i18n("Undefined operation in the alpha color space");
141 return 0;
142 }
143
144 virtual void invertColor(quint8*, qint32) const {
145 warnPigment << i18n("Undefined operation in the alpha color space");
146 }
147
148 void colorToXML(const quint8* , QDomDocument& , QDomElement&) const override {
149 warnPigment << i18n("Undefined operation in the alpha color space");
150 }
151
152 void colorFromXML(quint8* , const QDomElement&) const override {
153 warnPigment << i18n("Undefined operation in the alpha color space");
154 }
155
156 void toHSY(const QVector<double> &, qreal *, qreal *, qreal *) const override {
157 warnPigment << i18n("Undefined operation in the alpha color space");
158 }
159
160 QVector <double> fromHSY(qreal *, qreal *, qreal *) const override {
161 warnPigment << i18n("Undefined operation in the alpha color space");
162 QVector <double> channelValues (1);
163 channelValues.fill(0.0);
164 return channelValues;
165 }
166
167 void toYUV(const QVector<double> &, qreal *, qreal *, qreal *) const override {
168 warnPigment << i18n("Undefined operation in the alpha color space");
169 }
170
171 QVector <double> fromYUV(qreal *, qreal *, qreal *) const override {
172 warnPigment << i18n("Undefined operation in the alpha color space");
173 QVector <double> channelValues (1);
174 channelValues.fill(0.0);
175 return channelValues;
176 }
177
178protected:
179 bool preferCompositionInSourceColorSpace() const override;
180
181private:
183};
184
187#ifdef HAVE_OPENEXR
188typedef KoAlphaColorSpaceImpl<AlphaF16Traits> KoAlphaF16ColorSpace;
189#endif
191
192template <class _CSTrait>
215
218#ifdef HAVE_OPENEXR
219typedef KoAlphaColorSpaceFactoryImpl<AlphaF16Traits> KoAlphaF16ColorSpaceFactory;
220#endif
222
223#endif
#define warnPigment
KoAlphaColorSpaceFactoryImpl< AlphaU16Traits > KoAlphaU16ColorSpaceFactory
KoID alphaIdFromChannelType< quint16 >()
KoColorSpaceTrait< float, 1, 0 > AlphaF32Traits
KoID alphaIdFromChannelType()
KoID alphaIdFromChannelType< quint8 >()
KoAlphaColorSpaceFactoryImpl< AlphaU8Traits > KoAlphaColorSpaceFactory
KoAlphaColorSpaceFactoryImpl< AlphaF32Traits > KoAlphaF32ColorSpaceFactory
KoColorSpaceTrait< quint8, 1, 0 > AlphaU8Traits
KoAlphaColorSpaceImpl< AlphaF32Traits > KoAlphaF32ColorSpace
KoColorSpaceTrait< quint16, 1, 0 > AlphaU16Traits
KoAlphaColorSpaceImpl< AlphaU8Traits > KoAlphaColorSpace
KoAlphaColorSpaceImpl< AlphaU16Traits > KoAlphaU16ColorSpace
KoID alphaIdFromChannelType< float >()
KoID colorDepthIdForChannelType()
const KoID AlphaColorModelID("A", ki18n("Alpha mask"))
ColorSpaceIndependence
QList< KoColorConversionTransformationFactory * > colorConversionLinks() const override
KoColorSpace * createColorSpace(const KoColorProfile *) const override
_CSTrait::channels_type channels_type
static QString colorSpaceId()
KoID colorDepthId() const override
KoColorSpaceMaths< channels_type > _Maths
KoID colorModelId() const override
KoColorTransformation * createBrightnessContrastAdjustment(const quint16 *transferValues) const override
KoColorTransformation * createPerChannelAdjustment(const quint16 *const *) const override
void colorFromXML(quint8 *, const QDomElement &) const override
void toHSY(const QVector< double > &, qreal *, qreal *, qreal *) const override
KoColorTransformation * createDarkenAdjustment(qint32, bool, qreal) const override
bool hasHighDynamicRange() const override
KoColorSpaceMaths< channels_type, quint8 > _MathsToU8
QVector< double > fromHSY(qreal *, qreal *, qreal *) const override
bool willDegrade(ColorSpaceIndependence independence) const override
QVector< double > fromYUV(qreal *, qreal *, qreal *) const override
_CSTrait::channels_type channels_type
KoColorProfile * m_profile
virtual quint32 colorSpaceType() const
void colorToXML(const quint8 *, QDomDocument &, QDomElement &) const override
bool profileIsCompatible(const KoColorProfile *) const override
virtual void invertColor(quint8 *, qint32) const
KoColorSpaceMaths< quint8, channels_type > _MathsFromU8
const KoColorProfile * profile() const override
quint32 colorChannelCount() const override
void toYUV(const QVector< double > &, qreal *, qreal *, qreal *) const override
QString normalisedChannelValueText(const quint8 *pixel, quint32 channelIndex) const override
QString channelValueText(const quint8 *pixel, quint32 channelIndex) const override
virtual void toRgbA16(const quint8 *src, quint8 *dst, quint32 nPixels) const
virtual QImage convertToQImage(const quint8 *data, qint32 width, qint32 height, const KoColorProfile *dstProfile, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
virtual quint8 difference(const quint8 *src1, const quint8 *src2) const =0
virtual void toQColor(const quint8 *src, QColor *c) const =0
virtual bool preferCompositionInSourceColorSpace() const
virtual void toLabA16(const quint8 *src, quint8 *dst, quint32 nPixels) const
virtual void fromQColor(const QColor &color, quint8 *dst) const =0
virtual void fromRgbA16(const quint8 *src, quint8 *dst, quint32 nPixels) const
virtual void fromLabA16(const quint8 *src, quint8 *dst, quint32 nPixels) const
virtual quint8 differenceA(const quint8 *src1, const quint8 *src2) const =0
Definition KoID.h:30