|
| void | composite (const KoCompositeOp::ParameterInfo ¶ms) const override |
| |
| virtual void | composite (const ParameterInfo ¶ms) const |
| |
| void | composite (quint8 *dstRowStart, qint32 dstRowStride, const quint8 *srcRowStart, qint32 srcRowStride, const quint8 *maskRowStart, qint32 maskRowStride, qint32 rows, qint32 numColumns, float opacity, const QBitArray &channelFlags=QBitArray()) const |
| |
| template<bool useMask> |
| void | genericComposite (const KoCompositeOp::ParameterInfo ¶ms) const |
| |
| | KoCompositeOpAlphaDarken (const KoColorSpace *cs) |
| |
| QString | category () const |
| |
| const KoColorSpace * | colorSpace () const |
| |
| void | composite (quint8 *dstRowStart, qint32 dstRowStride, const quint8 *srcRowStart, qint32 srcRowStride, const quint8 *maskRowStart, qint32 maskRowStride, qint32 rows, qint32 numColumns, float opacity, const QBitArray &channelFlags=QBitArray()) const |
| |
| QString | description () const |
| |
| QString | id () const |
| |
| | KoCompositeOp (const KoColorSpace *cs, const QString &id, const QString &category=KoCompositeOp::categoryMisc()) |
| |
| virtual | ~KoCompositeOp () |
| |
| | Private (KisCanvas2 *c) |
| |
template<class Traits, class ParamsWrapper>
class KoCompositeOpAlphaDarken< Traits, ParamsWrapper >
A template version of the alphadarken composite operation to use in colorspaces
Definition at line 19 of file KoCompositeOpAlphaDarken.h.
template<class Traits , class ParamsWrapper >
Here we calculate fullFlowAlpha, which should strive either to averageOpacity or opacity (whichever is the greater) or just keep old dstAlpha value, if both opacity values are not bit enough
This cryptic code is basically an optimized version of the following: fullFlowAlpha = averageOpacity * unionShapeOpacity(srcAlpha / averageOpacity, dstAlpha / averageOpacity);
The main idea is: fullFlowAlpha should be as near to averageOpacity as maximum of srcAlpha and dstAlpha and a bit more. So that in consequent applications of the blending operation alpha channel would aim to averageOpacity.
Definition at line 96 of file KoCompositeOpAlphaDarken.h.
103 {
105
107 channels_type averageOpacity = scale<channels_type>(paramsWrapper.averageOpacity);
108
114 if (averageOpacity > opacity) {
128 fullFlowAlpha = averageOpacity > dstAlpha ?
lerp(srcAlpha, averageOpacity, reverseBlend) : dstAlpha;
129 } else {
130 fullFlowAlpha = opacity > dstAlpha ?
lerp(dstAlpha, opacity, mskAlpha) : dstAlpha;
131 }
132
133 if (params.
flow == 1.0f) {
134 return fullFlowAlpha;
135 } else {
136 channels_type zeroFlowAlpha = ParamsWrapper::calculateZeroFlowAlphaLegacy(srcAlpha, dstAlpha);
137 return lerp(zeroFlowAlpha, fullFlowAlpha, flow);
138 }
139 }
QPointF lerp(const QPointF &p1, const QPointF &p2, qreal t)
static dst_compositetype divide(_T a, _Tdst b)
Traits::channels_type channels_type
References KoColorSpaceMaths< _T, _Tdst >::divide(), KoCompositeOp::ParameterInfo::flow, and lerp().
template<class Traits , class ParamsWrapper >
template<bool useMask>
Definition at line 41 of file KoCompositeOpAlphaDarken.h.
42 {
44
45 ParamsWrapper paramsWrapper(params);
46
48 channels_type flow = scale<channels_type>(paramsWrapper.flow);
49 channels_type opacity = scale<channels_type>(paramsWrapper.opacity);
53
54 for (qint32 r = params.
rows;
r > 0; --
r) {
57 const quint8* mask = maskRowStart;
58
59 for(qint32 c=params.
cols; c>0; --c) {
62 channels_type mskAlpha = useMask ?
mul(scale<channels_type>(*mask), srcAlpha) : srcAlpha;
63
64 srcAlpha =
mul(mskAlpha, opacity);
65
66 if(dstAlpha != zeroValue<channels_type>()) {
69 dst[i] =
lerp(dst[i], src[i], srcAlpha);
70 }
71 }
72 else {
76 }
77 }
78
81 }
82
85
86 if(useMask)
87 ++mask;
88 }
89
93 }
94 }
static const qint32 channels_nb
static channels_type calculateAlpha(const KoCompositeOp::ParameterInfo ¶ms, const ParamsWrapper ¶msWrapper, channels_type flow, channels_type opacity, channels_type srcAlpha, channels_type dstAlpha, channels_type mskAlpha)
static const qint32 alpha_pos
References KoCompositeOpAlphaDarken< Traits, ParamsWrapper >::alpha_pos, KoCompositeOpAlphaDarken< Traits, ParamsWrapper >::calculateAlpha(), KoCompositeOpAlphaDarken< Traits, ParamsWrapper >::channels_nb, KoCompositeOp::ParameterInfo::cols, KoCompositeOp::ParameterInfo::dstRowStart, KoCompositeOp::ParameterInfo::dstRowStride, lerp(), KoCompositeOp::ParameterInfo::maskRowStart, KoCompositeOp::ParameterInfo::maskRowStride, KoCompositeOp::ParameterInfo::rows, KoCompositeOp::ParameterInfo::srcRowStart, and KoCompositeOp::ParameterInfo::srcRowStride.