16#include <klocalizedstring.h>
50 template<
bool alphaLocked,
bool allChannelFlags>
56 Q_UNUSED(allChannelFlags);
59 Q_UNUSED(channelFlags);
63 srcAlpha = mul(srcAlpha, maskAlpha);
64 dstAlpha = mul(dstAlpha, opacity);
65 dstAlpha = mul(srcAlpha, dstAlpha);
73template <
class _CSTrait>
84 this->
addCompositeOp(createAlphaDarkenCompositeOp<_CSTrait>(
this));
88template <
class _CSTrait>
95template <
class _CSTrait>
98 _CSTrait::nativeArray(dst)[0] = _MathsFromU8::scaleToA(c.alpha());
101template <
class _CSTrait>
104 c->setRgba(qRgba(255, 255, 255, _MathsToU8::scaleToA(_CSTrait::nativeArray(src)[0])));
107template <
class _CSTrait>
110 return qAbs(_MathsToU8::scaleToA(_CSTrait::nativeArray(src2)[0] - _CSTrait::nativeArray(src1)[0]));
113template <
class _CSTrait>
116 return difference(src1, src2);
119template <
class _CSTrait>
122 Q_ASSERT(channelIndex < this->channelCount());
123 const quint32 channelPosition = this->channels()[channelIndex]->pos();
124 return QString().setNum(_CSTrait::nativeArray(pixel)[channelPosition]);
127template <
class _CSTrait>
130 Q_ASSERT(channelIndex < this->channelCount());
131 const quint32 channelPosition = this->channels()[channelIndex]->pos();
135template <
class _CSTrait>
138 qreal totalAlpha = 0;
141 qreal weight = *kernelValues;
144 totalAlpha += _CSTrait::nativeArray(*colors)[0] * weight;
150 if (channelFlags.isEmpty() || channelFlags.testBit(0)) {
151 _CSTrait::nativeArray(dst)[0] = _Maths::clamp((totalAlpha / factor) + offset);
155template <
class _CSTrait>
159 KoColorConversionTransformation::ConversionFlags )
const
163 QImage img(width, height, QImage::Format_Indexed8);
165 for (
int i = 0; i < 256; ++i) table.append(qRgb(i, i, i));
166 img.setColorTable(table);
169 for (
int i = 0; i < height; ++i) {
170 data_img = img.scanLine(i);
172 for (
int j = 0; j < width; ++j) {
173 data_img[j] = _MathsToU8::scaleToA(*(srcPtr++));
180template <
class _CSTrait>
183 quint16* dstPtr =
reinterpret_cast<quint16*
>(dst);
196template <
class _CSTrait>
198 const quint16* srcPtr =
reinterpret_cast<const quint16*
>(src);
209template <
class _CSTrait>
212 quint16* dstPtr =
reinterpret_cast<quint16*
>(dst);
227template <
class _CSTrait>
229 const quint16* srcPtr =
reinterpret_cast<const quint16*
>(src);
241template <
class _CSTrait>
247template <
class _CSTrait>
266template <
class _CSTrait>
KoID alphaIdFromChannelType()
const KoID Float32BitsColorDepthID("F32", ki18n("32-bit float/channel"))
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID Float16BitsColorDepthID("F16", ki18n("16-bit float/channel"))
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
const QString COMPOSITE_MULT
uint UINT16_MULT(uint a, uint b)
static channels_type composeColorChannels(const channels_type *src, channels_type srcAlpha, channels_type *dst, channels_type dstAlpha, channels_type maskAlpha, channels_type opacity, const QBitArray &channelFlags)
Traits::channels_type channels_type
KoCompositeOpBase< Traits, AlphaColorSpaceMultiplyOp< Traits > > base_class
AlphaColorSpaceMultiplyOp(const KoColorSpace *cs)
QList< KoColorConversionTransformationFactory * > colorConversionLinks() const override
void toQColor(const quint8 *src, QColor *c) const override
virtual KoColorSpace * clone() const
void toLabA16(const quint8 *src, quint8 *dst, quint32 nPixels) const override
void fromLabA16(const quint8 *src, quint8 *dst, quint32 nPixels) const override
void toRgbA16(const quint8 *src, quint8 *dst, quint32 nPixels) const override
_CSTrait::channels_type channels_type
void fromRgbA16(const quint8 *src, quint8 *dst, quint32 nPixels) const override
~KoAlphaColorSpaceImpl() override
void fromQColor(const QColor &color, quint8 *dst) const override
QString channelValueText(const quint8 *pixel, quint32 channelIndex) const override
QString normalisedChannelValueText(const quint8 *pixel, quint32 channelIndex) const override
bool preferCompositionInSourceColorSpace() const override
QImage convertToQImage(const quint8 *data, qint32 width, qint32 height, const KoColorProfile *dstProfile, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const override
virtual void convolveColors(quint8 **colors, qreal *kernelValues, quint8 *dst, qreal factor, qreal offset, qint32 nColors, const QBitArray &channelFlags) const
quint8 difference(const quint8 *src1, const quint8 *src2) const override
quint8 differenceA(const quint8 *src1, const quint8 *src2) const override
@ ALPHA
The channel represents the opacity of a pixel.
enumChannelValueType
enum to define the value of the channel
@ UINT8
use this for an unsigned integer 8bits channel
@ UINT16
use this for an integer 16bits channel
@ FLOAT32
use this for a float 32bits channel
@ FLOAT16
use this for a float 16bits channel
static _Tdst scaleToA(_T a)
virtual void addCompositeOp(const KoCompositeOp *op)
virtual void addChannel(KoChannelInfo *ci)
static QString categoryArithmetic()