Krita Source Code Documentation
Loading...
Searching...
No Matches
KoMixColorsOpImpl< _CSTrait > Class Template Reference

#include <KoMixColorsOpImpl.h>

+ Inheritance diagram for KoMixColorsOpImpl< _CSTrait >:

Classes

struct  ArrayOfPointers
 
class  MixDataResult
 
class  MixerImpl
 
struct  NoWeightsSurrogate
 
struct  PointerToArray
 
struct  WeightsWrapper
 

Public Member Functions

MixercreateMixer () const override
 
 KoMixColorsOpImpl ()
 
void mixArrayWithColor (const quint8 *colorArray, const quint8 *color, int nColors, qreal weight, quint8 *dst) const override
 
void mixColors (const quint8 *colors, const qint16 *weights, int nColors, quint8 *dst, int weightSum=255) const override
 
void mixColors (const quint8 *colors, int nColors, quint8 *dst) const override
 
void mixColors (const quint8 *const *colors, const qint16 *weights, int nColors, quint8 *dst, int weightSum=255) const override
 
void mixColors (const quint8 *const *colors, int nColors, quint8 *dst) const override
 
void mixTwoColorArrays (const quint8 *colorsA, const quint8 *colorsB, int nColors, qreal weight, quint8 *dst) const override
 
 ~KoMixColorsOpImpl () override
 
- Public Member Functions inherited from KoMixColorsOp
virtual ~KoMixColorsOp ()
 

Private Member Functions

template<class AbstractSource , class WeightsWrapper >
void mixColorsImpl (AbstractSource source, WeightsWrapper weightsWrapper, int nColors, quint8 *dst) const
 

Detailed Description

template<class _CSTrait>
class KoMixColorsOpImpl< _CSTrait >

Definition at line 37 of file KoMixColorsOpImpl.h.

Constructor & Destructor Documentation

◆ KoMixColorsOpImpl()

template<class _CSTrait >
KoMixColorsOpImpl< _CSTrait >::KoMixColorsOpImpl ( )
inline

Definition at line 40 of file KoMixColorsOpImpl.h.

40 {
41 }

◆ ~KoMixColorsOpImpl()

template<class _CSTrait >
KoMixColorsOpImpl< _CSTrait >::~KoMixColorsOpImpl ( )
inlineoverride

Definition at line 42 of file KoMixColorsOpImpl.h.

42{ }

Member Function Documentation

◆ createMixer()

template<class _CSTrait >
KoMixColorsOp::Mixer * KoMixColorsOpImpl< _CSTrait >::createMixer ( ) const
overridevirtual

Implements KoMixColorsOp.

Definition at line 341 of file KoMixColorsOpImpl.h.

342{
343 return new MixerImpl();
344}

◆ mixArrayWithColor()

template<class _CSTrait >
void KoMixColorsOpImpl< _CSTrait >::mixArrayWithColor ( const quint8 * colorArray,
const quint8 * color,
int nColors,
qreal weight,
quint8 * dst ) const
inlineoverridevirtual

Convenience function to mix one color array with one color with a specific weight. Mixes colorArray[x] with color with weight as the percentage of B vs A (0.0 -> 100% A, 1.0 -> 100% B), for all x = [0 .. nColors-1].

Implements KoMixColorsOp.

Definition at line 81 of file KoMixColorsOpImpl.h.

81 {
82 const quint8* pixelA = colorArray;
83 weight = qBound(0.0, weight, 1.0);
84 for (int i = 0; i < nColors; i++) {
85 const quint8* colors[2];
86 colors[0] = pixelA;
87 colors[1] = color;
88 qint16 weights[2];
89 weights[1] = qRound(weight * 255.0);
90 weights[0] = 255 - weights[1];
91 mixColorsImpl(ArrayOfPointers(colors), WeightsWrapper(weights, 255), 2, dst);
92
93 pixelA += _CSTrait::pixelSize;
94 dst += _CSTrait::pixelSize;
95 }
96 }
void mixColorsImpl(AbstractSource source, WeightsWrapper weightsWrapper, int nColors, quint8 *dst) const

References KoMixColorsOpImpl< _CSTrait >::mixColorsImpl().

◆ mixColors() [1/4]

template<class _CSTrait >
void KoMixColorsOpImpl< _CSTrait >::mixColors ( const quint8 * colors,
const qint16 * weights,
int nColors,
quint8 * dst,
int weightSum = 255 ) const
inlineoverridevirtual

Implements KoMixColorsOp.

Definition at line 50 of file KoMixColorsOpImpl.h.

50 {
51 mixColorsImpl(PointerToArray(colors, _CSTrait::pixelSize), WeightsWrapper(weights, weightSum), nColors, dst);
52 }

References KoMixColorsOpImpl< _CSTrait >::mixColorsImpl().

◆ mixColors() [2/4]

template<class _CSTrait >
void KoMixColorsOpImpl< _CSTrait >::mixColors ( const quint8 * colors,
int nColors,
quint8 * dst ) const
inlineoverridevirtual

Implements KoMixColorsOp.

Definition at line 58 of file KoMixColorsOpImpl.h.

58 {
59 mixColorsImpl(PointerToArray(colors, _CSTrait::pixelSize), NoWeightsSurrogate(nColors), nColors, dst);
60 }

References KoMixColorsOpImpl< _CSTrait >::mixColorsImpl().

◆ mixColors() [3/4]

template<class _CSTrait >
void KoMixColorsOpImpl< _CSTrait >::mixColors ( const quint8 *const * colors,
const qint16 * weights,
int nColors,
quint8 * dst,
int weightSum = 255 ) const
inlineoverridevirtual

Mix the colors.

Parameters
colorsa pointer toward the source pixels
weightsthe coefficient of the source pixels
nColorsthe number of pixels in the colors array
dstthe destination pixel
weightSuman integer representing the sum of the coefficients. by default 255. If for some reason you do not want a perfect average, make this anything but the sum. Try to keep this below 255 for division-related performance.
quint8* colors[nColors];
colors[0] = ptrToFirstPixel;
colors[1] = ptrToSecondPixel;
...
colors[nColors-1] = ptrToLastPixel;
qint16 weights[nColors];
weights[0] = firstWeight;
weights[1] = secondWeight;
...
weights[nColors-1] = lastWeight;
mixColors(colors, weights, nColors, ptrToDestinationPixel);
void mixColors(const quint8 *const *colors, const qint16 *weights, int nColors, quint8 *dst, int weightSum=255) const override

Implements KoMixColorsOp.

Definition at line 46 of file KoMixColorsOpImpl.h.

46 {
47 mixColorsImpl(ArrayOfPointers(colors), WeightsWrapper(weights, weightSum), nColors, dst);
48 }

References KoMixColorsOpImpl< _CSTrait >::mixColorsImpl().

◆ mixColors() [4/4]

template<class _CSTrait >
void KoMixColorsOpImpl< _CSTrait >::mixColors ( const quint8 *const * colors,
int nColors,
quint8 * dst ) const
inlineoverridevirtual

Mix the colors uniformly, without weighting

Parameters
colorsa pointer toward the source pixels
nColorsthe number of pixels in the colors array
dstthe destination pixel
quint8* colors[nColors];
colors[0] = ptrToFirstPixel;
colors[1] = ptrToSecondPixel;
...
colors[nColors-1] = ptrToLastPixel;
mixColors(colors, nColors, ptrToDestinationPixel);

Implements KoMixColorsOp.

Definition at line 54 of file KoMixColorsOpImpl.h.

54 {
55 mixColorsImpl(ArrayOfPointers(colors), NoWeightsSurrogate(nColors), nColors, dst);
56 }

References KoMixColorsOpImpl< _CSTrait >::mixColorsImpl().

◆ mixColorsImpl()

template<class _CSTrait >
template<class AbstractSource , class WeightsWrapper >
void KoMixColorsOpImpl< _CSTrait >::mixColorsImpl ( AbstractSource source,
WeightsWrapper weightsWrapper,
int nColors,
quint8 * dst ) const
inlineprivate

Definition at line 300 of file KoMixColorsOpImpl.h.

300 {
301 MixDataResult result;
302 result.accumulateColors(source, weightsWrapper, nColors);
303 result.computeMixedColor(dst);
304 }
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)

References KoMixColorsOpImpl< _CSTrait >::MixDataResult::accumulateColors(), KoMixColorsOpImpl< _CSTrait >::MixDataResult::computeMixedColor(), and source().

◆ mixTwoColorArrays()

template<class _CSTrait >
void KoMixColorsOpImpl< _CSTrait >::mixTwoColorArrays ( const quint8 * colorsA,
const quint8 * colorsB,
int nColors,
qreal weight,
quint8 * dst ) const
inlineoverridevirtual

Convenience function to mix two color arrays with one weight. Mixes colorsA[x] with colorsB[x] with weight as the percentage of B vs A (0.0 -> 100% A, 1.0 -> 100% B), for all x = [0 .. nColors-1].

Implements KoMixColorsOp.

Definition at line 62 of file KoMixColorsOpImpl.h.

62 {
63 const quint8* pixelA = colorsA;
64 const quint8* pixelB = colorsB;
65 weight = qBound(0.0, weight, 1.0);
66 for (int i = 0; i < nColors; i++) {
67 const quint8* colors[2];
68 colors[0] = pixelA;
69 colors[1] = pixelB;
70 qint16 weights[2];
71 weights[1] = qRound(weight * 255.0);
72 weights[0] = 255 - weights[1];
73 mixColorsImpl(ArrayOfPointers(colors), WeightsWrapper(weights, 255), 2, dst);
74
75 pixelA += _CSTrait::pixelSize;
76 pixelB += _CSTrait::pixelSize;
77 dst += _CSTrait::pixelSize;
78 }
79 }

References KoMixColorsOpImpl< _CSTrait >::mixColorsImpl().


The documentation for this class was generated from the following file: