8#ifndef KOCOLORSPACEABSTRACT_H
9#define KOCOLORSPACEABSTRACT_H
12#include <klocalizedstring.h>
37template<
class _CSTrait>
51 if (_CSTrait::alpha_pos == -1)
52 return _CSTrait::channels_nb;
54 return _CSTrait::channels_nb - 1;
58 return _CSTrait::channels_nb;
62 return _CSTrait::alpha_pos;
67 return _CSTrait::pixelSize;
71 return _CSTrait::channelValueText(pixel, channelIndex);
75 return _CSTrait::normalisedChannelValueText(pixel, channelIndex);
79 return _CSTrait::normalisedChannelsValue(pixel,
channels);
83 return _CSTrait::fromNormalisedChannelsValue(pixel, values);
86 quint8
scaleToU8(
const quint8 * srcPixel, qint32 channelIndex)
const override {
87 typename _CSTrait::channels_type c = _CSTrait::nativeArray(srcPixel)[channelIndex];
91 void singleChannelPixel(quint8 *dstPixel,
const quint8 *srcPixel, quint32 channelIndex)
const override {
92 _CSTrait::singleChannelPixel(dstPixel, srcPixel, channelIndex);
95 quint8
opacityU8(
const quint8 * U8_pixel)
const override {
96 return _CSTrait::opacityU8(U8_pixel);
99 qreal
opacityF(
const quint8 * U8_pixel)
const override {
100 return _CSTrait::opacityF(U8_pixel);
103 void setOpacity(quint8 * pixels, quint8 alpha, qint32 nPixels)
const override {
104 _CSTrait::setOpacity(pixels, alpha, nPixels);
107 void setOpacity(quint8 * pixels, qreal alpha, qint32 nPixels)
const override {
108 _CSTrait::setOpacity(pixels, alpha, nPixels);
111 void copyOpacityU8(quint8* src, quint8 *dst, qint32 nPixels)
const override {
112 _CSTrait::copyOpacityU8(src, dst, nPixels);
115 void multiplyAlpha(quint8 * pixels, quint8 alpha, qint32 nPixels)
const override {
116 _CSTrait::multiplyAlpha(pixels, alpha, nPixels);
119 void applyAlphaU8Mask(quint8 * pixels,
const quint8 * alpha, qint32 nPixels)
const override {
120 _CSTrait::applyAlphaU8Mask(pixels, alpha, nPixels);
124 _CSTrait::applyInverseAlphaU8Mask(pixels, alpha, nPixels);
128 _CSTrait::applyAlphaNormedFloatMask(pixels, alpha, nPixels);
146 void toQColor16(
const quint8 *src, QColor *c)
const override {
156 return static_cast<quint8
>((c.red() * 30 + c.green() * 59 + c.blue() * 11 + 50) / 100);
162 return c.redF() * 0.30 + c.greenF() * 0.59 + c.blueF() * 0.11;
175 const int alphaPos = _CSTrait::alpha_pos;
177 for (
uint pixelIndex = 0; pixelIndex < nPixels; ++pixelIndex) {
179 const quint8 *srcPtr = src + pixelIndex * _CSTrait::pixelSize;
180 quint8 *dstPtr = dst + pixelIndex * _CSTrait::pixelSize;
182 const typename _CSTrait::channels_type *srcPixel = _CSTrait::nativeArray(srcPtr);
183 typename _CSTrait::channels_type *dstPixel = _CSTrait::nativeArray(dstPtr);
185 typename _CSTrait::channels_type commonChannel = srcPixel[selectedChannelIndex];
187 for (
uint channelIndex = 0; channelIndex < _CSTrait::channels_nb; ++channelIndex) {
190 dstPixel[channelIndex] = commonChannel;
192 dstPixel[channelIndex] = srcPixel[channelIndex];
200 for (
uint pixelIndex = 0; pixelIndex < nPixels; ++pixelIndex) {
201 const quint8 *srcPtr = src + pixelIndex * _CSTrait::pixelSize;
202 quint8 *dstPtr = dst + pixelIndex * _CSTrait::pixelSize;
204 const typename _CSTrait::channels_type *srcPixel = _CSTrait::nativeArray(srcPtr);
205 typename _CSTrait::channels_type *dstPixel = _CSTrait::nativeArray(dstPtr);
207 for (
uint channelIndex = 0; channelIndex < _CSTrait::channels_nb; ++channelIndex) {
208 if (selectedChannels.testBit(channelIndex)) {
209 dstPixel[channelIndex] = srcPixel[channelIndex];
211 dstPixel[channelIndex] = _CSTrait::math_trait::zeroValue;
KoID colorDepthIdForChannelType()
qreal opacityF(const quint8 *U8_pixel) const override
void setOpacity(quint8 *pixels, qreal alpha, qint32 nPixels) const override
void applyAlphaU8Mask(quint8 *pixels, const quint8 *alpha, qint32 nPixels) const override
quint32 pixelSize() const override
quint8 scaleToU8(const quint8 *srcPixel, qint32 channelIndex) const override
void fillGrayBrushWithColor(quint8 *dst, const QRgb *brush, quint8 *brushColor, qint32 nPixels) const override
void setOpacity(quint8 *pixels, quint8 alpha, qint32 nPixels) const override
void fromNormalisedChannelsValue(quint8 *pixel, const QVector< float > &values) const override
quint8 intensity8(const quint8 *src) const override
KoColorTransformation * createInvertTransformation() const override
void fillInverseAlphaNormedFloatMaskWithColor(quint8 *pixels, const float *alpha, const quint8 *brushColor, qint32 nPixels) const override
void convertChannelToVisualRepresentation(const quint8 *src, quint8 *dst, quint32 nPixels, const qint32 selectedChannelIndex) const override
QScopedPointer< KoAlphaMaskApplicatorBase > m_alphaMaskApplicator
KoColorSpaceAbstract(const QString &id, const QString &name)
QString normalisedChannelValueText(const quint8 *pixel, quint32 channelIndex) const override
quint32 channelCount() const override
quint32 alphaPos() const override
void multiplyAlpha(quint8 *pixels, quint8 alpha, qint32 nPixels) const override
void normalisedChannelsValue(const quint8 *pixel, QVector< float > &channels) const override
void applyInverseAlphaU8Mask(quint8 *pixels, const quint8 *alpha, qint32 nPixels) const override
quint32 colorChannelCount() const override
void applyAlphaNormedFloatMask(quint8 *pixels, const float *alpha, qint32 nPixels) const override
void copyOpacityU8(quint8 *src, quint8 *dst, qint32 nPixels) const override
void applyInverseNormedFloatMask(quint8 *pixels, const float *alpha, qint32 nPixels) const override
quint8 opacityU8(const quint8 *U8_pixel) const override
qreal intensityF(const quint8 *src) const override
void singleChannelPixel(quint8 *dstPixel, const quint8 *srcPixel, quint32 channelIndex) const override
_CSTrait ColorSpaceTraits
void convertChannelToVisualRepresentation(const quint8 *src, quint8 *dst, quint32 nPixels, const QBitArray selectedChannels) const override
QString channelValueText(const quint8 *pixel, quint32 channelIndex) const override
KoColorTransformation * createDarkenAdjustment(qint32 shade, bool compensate, qreal compensation) const override
void toQColor16(const quint8 *src, QColor *c) const override
static _Tdst scaleToA(_T a)
virtual void toQColor(const quint8 *src, QColor *c) const =0
QList< KoChannelInfo * > channels
static KoColorSpaceRegistry * instance()