Krita Source Code Documentation
Loading...
Searching...
No Matches
KisIndexColorTransformation Class Reference

#include <indexcolors.h>

+ Inheritance diagram for KisIndexColorTransformation:

Public Member Functions

 KisIndexColorTransformation (IndexColorPalette palette, const KoColorSpace *cs, int alphaSteps)
 
void transform (const quint8 *src, quint8 *dst, qint32 nPixels) const override
 
- Public Member Functions inherited from KoColorTransformation
virtual bool isValid () const
 
virtual int parameterId (const QString &name) const
 
virtual QList< QString > parameters () const
 
virtual void setParameter (int id, const QVariant &parameter)
 
void setParameters (const QHash< QString, QVariant > &parameters)
 
virtual ~KoColorTransformation ()
 

Private Attributes

quint16 m_alphaHalfStep
 
quint16 m_alphaStep
 
const KoColorSpacem_colorSpace
 
IndexColorPalette m_palette
 
quint32 m_psize
 

Detailed Description

Definition at line 40 of file indexcolors.h.

Constructor & Destructor Documentation

◆ KisIndexColorTransformation()

KisIndexColorTransformation::KisIndexColorTransformation ( IndexColorPalette palette,
const KoColorSpace * cs,
int alphaSteps )

Definition at line 88 of file indexcolors.cpp.

89 : m_colorSpace(cs),
90 m_psize(cs->pixelSize())
91{
93
94 static const qreal max = KoColorSpaceMathsTraits<quint16>::max;
95 if(alphaSteps > 0)
96 {
97 m_alphaStep = max / alphaSteps;
99 }
100 else
101 {
102 m_alphaStep = 0;
103 m_alphaHalfStep = 0;
104 }
105}
const KoColorSpace * m_colorSpace
Definition indexcolors.h:46
IndexColorPalette m_palette
Definition indexcolors.h:48
virtual quint32 pixelSize() const =0
constexpr std::enable_if< sizeof...(values)==0, size_t >::type max()
rgba palette[MAX_PALETTE]
Definition palette.c:35

References m_alphaHalfStep, m_alphaStep, m_palette, and palette.

Member Function Documentation

◆ transform()

void KisIndexColorTransformation::transform ( const quint8 * src,
quint8 * dst,
qint32 nPixels ) const
overridevirtual

This function apply the transformation on a given number of pixels.

Parameters
srca pointer to the source pixels
dsta pointer to the destination pixels
nPixelsthe number of pixels

This function may or may not be thread safe. You need to create one KoColorTransformation per thread.

Implements KoColorTransformation.

Definition at line 107 of file indexcolors.cpp.

108{
109 if (m_palette.numColors() <= 0) {
110 memcpy(dst, src, nPixels * m_colorSpace->pixelSize());
111 return;
112 }
113
114 union
115 {
116 quint16 laba[4];
117 LabColor lab;
118 } clr;
119 while (nPixels--)
120 {
121 m_colorSpace->toLabA16(src, reinterpret_cast<quint8 *>(clr.laba), 1);
122 clr.lab = m_palette.getNearestIndex(clr.lab);
123 if(m_alphaStep)
124 {
125 quint16 amod = clr.laba[3] % m_alphaStep;
126 clr.laba[3] = clr.laba[3] + (amod > m_alphaHalfStep ? m_alphaStep - amod : -amod);
127 }
128 m_colorSpace->fromLabA16(reinterpret_cast<quint8 *>(clr.laba), dst, 1);
129 src += m_psize;
130 dst += m_psize;
131 }
132}
virtual void toLabA16(const quint8 *src, quint8 *dst, quint32 nPixels) const
virtual void fromLabA16(const quint8 *src, quint8 *dst, quint32 nPixels) const
LabColor getNearestIndex(LabColor clr) const

References KoColorSpace::fromLabA16(), IndexColorPalette::getNearestIndex(), m_alphaHalfStep, m_alphaStep, m_colorSpace, m_palette, m_psize, IndexColorPalette::numColors(), KoColorSpace::pixelSize(), and KoColorSpace::toLabA16().

Member Data Documentation

◆ m_alphaHalfStep

quint16 KisIndexColorTransformation::m_alphaHalfStep
private

Definition at line 50 of file indexcolors.h.

◆ m_alphaStep

quint16 KisIndexColorTransformation::m_alphaStep
private

Definition at line 49 of file indexcolors.h.

◆ m_colorSpace

const KoColorSpace* KisIndexColorTransformation::m_colorSpace
private

Definition at line 46 of file indexcolors.h.

◆ m_palette

IndexColorPalette KisIndexColorTransformation::m_palette
private

Definition at line 48 of file indexcolors.h.

◆ m_psize

quint32 KisIndexColorTransformation::m_psize
private

Definition at line 47 of file indexcolors.h.


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