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

#include <KoBasicHistogramProducers.h>

+ Inheritance diagram for KoBasicF32HistogramProducer:

Public Member Functions

void addRegionToBin (const quint8 *pixels, const quint8 *selectionMask, quint32 nPixels, const KoColorSpace *colorSpace) override
 
 KoBasicF32HistogramProducer (const KoID &id, const KoColorSpace *colorSpace)
 
qreal maximalZoom () const override
 
QString positionToString (qreal pos) const override
 
 ~KoBasicF32HistogramProducer () override
 
- Public Member Functions inherited from KoBasicHistogramProducer
QList< KoChannelInfo * > channels () override
 
void clear () override
 
qint32 count () override
 
qint32 getBinAt (int channel, int position) override
 
const KoIDid () const override
 
 KoBasicHistogramProducer (const KoID &id, int channelCount, int nrOfBins)
 
 KoBasicHistogramProducer (const KoID &id, int nrOfBins, const KoColorSpace *colorSpace)
 
qint32 numberOfBins () override
 
qint32 outOfViewLeft (int channel) override
 
qint32 outOfViewRight (int channel) override
 
void setView (qreal from, qreal size) override
 
qreal viewFrom () const override
 
qreal viewWidth () const override
 
 ~KoBasicHistogramProducer () override
 
- Public Member Functions inherited from KoHistogramProducer
virtual qint32 getBinAt (qint32 channel, qint32 position)=0
 
 KoHistogramProducer ()
 
virtual qint32 outOfViewLeft (qint32 channel)=0
 
virtual qint32 outOfViewRight (qint32 channel)=0
 
virtual void setSkipTransparent (bool set)
 
virtual void setSkipUnselected (bool set)
 
virtual ~KoHistogramProducer ()
 

Additional Inherited Members

- Protected Types inherited from KoBasicHistogramProducer
typedef QVector< quint32 > vBins
 
- Protected Member Functions inherited from KoBasicHistogramProducer
virtual int externalToInternal (int ext)
 
void makeExternalToInternal ()
 
- Protected Attributes inherited from KoBasicHistogramProducer
QVector< vBinsm_bins
 
int m_channels
 
const KoColorSpacem_colorSpace
 
qint32 m_count
 
QVector< qint32 > m_external
 
qreal m_from
 
KoID m_id
 
int m_nrOfBins
 
vBins m_outLeft
 
vBins m_outRight
 
qreal m_width
 
- Protected Attributes inherited from KoHistogramProducer
bool m_skipTransparent
 
bool m_skipUnselected
 

Detailed Description

Definition at line 114 of file KoBasicHistogramProducers.h.

Constructor & Destructor Documentation

◆ KoBasicF32HistogramProducer()

KoBasicF32HistogramProducer::KoBasicF32HistogramProducer ( const KoID & id,
const KoColorSpace * colorSpace )

Definition at line 212 of file KoBasicHistogramProducers.cpp.

213 : KoBasicHistogramProducer(id, 256, cs)
214{
215}
KoBasicHistogramProducer(const KoID &id, int channelCount, int nrOfBins)

◆ ~KoBasicF32HistogramProducer()

KoBasicF32HistogramProducer::~KoBasicF32HistogramProducer ( )
inlineoverride

Definition at line 118 of file KoBasicHistogramProducers.h.

118{}

Member Function Documentation

◆ addRegionToBin()

void KoBasicF32HistogramProducer::addRegionToBin ( const quint8 * pixels,
const quint8 * selectionMask,
quint32 nPixels,
const KoColorSpace * colorSpace )
overridevirtual

Adds the values from the specified array of pixels to the bins – does not reset anything.

Parameters
pixelsA pointer an array of pixeldata in the given colorspace
selectionMaska pointer to an array of bytes, where 0 is unselected and 1-255 is degree of selectedness. The array must be just as long as the array of pixels.
nPixelsThe number of pixels
colorSpacethe colorspace that can decode the pixel data.

Implements KoHistogramProducer.

Definition at line 228 of file KoBasicHistogramProducers.cpp.

229{
230 // The view
231 float from = static_cast<float>(m_from);
232 float width = static_cast<float>(m_width);
233 float to = from + width;
234 float factor = 255.0 / width;
235
236 quint32 dstPixelSize = m_colorSpace->pixelSize();
237 quint8 *dstPixels = new quint8[nPixels * dstPixelSize];
239 quint8 *dst = dstPixels;
241
242 if (selectionMask) {
243 while (nPixels > 0) {
244 if (!((m_skipUnselected && *selectionMask == 0) || (m_skipTransparent && cs->opacityU8(pixels) == OPACITY_TRANSPARENT_U8))) {
246 for (int i = 0; i < (int)m_colorSpace->channelCount(); i++) {
247 float value = channels[i];
248 if (value > to)
249 m_outRight[i]++;
250 else if (value < from)
251 m_outLeft[i]++;
252 else
253 m_bins[i][static_cast<quint8>((value - from) * factor)]++;
254 }
255 m_count++;
256 }
257 dst += dstPixelSize;
258 selectionMask++;
259 nPixels--;
260
261 }
262 } else {
263 while (nPixels > 0) {
264 if (!(m_skipTransparent && cs->opacityU8(pixels) == OPACITY_TRANSPARENT_U8)) {
266 for (int i = 0; i < (int)m_colorSpace->channelCount(); i++) {
267 float value = channels[i];
268 if (value > to)
269 m_outRight[i]++;
270 else if (value < from)
271 m_outLeft[i]++;
272 else
273 m_bins[i][static_cast<quint8>((value - from) * factor)]++;
274 }
275 m_count++;
276 }
277 dst += dstPixelSize;
278 nPixels--;
279
280 }
281 }
282}
float value(const T *src, size_t ch)
const quint8 OPACITY_TRANSPARENT_U8
QList< KoChannelInfo * > channels() override
virtual quint32 pixelSize() const =0
virtual quint32 channelCount() const =0
virtual void normalisedChannelsValue(const quint8 *pixel, QVector< float > &channels) const =0

References KoColorSpace::channelCount(), KoBasicHistogramProducer::channels(), KoColorSpace::convertPixelsTo(), KoColorConversionTransformation::Empty, KoColorConversionTransformation::IntentAbsoluteColorimetric, KoBasicHistogramProducer::m_bins, KoBasicHistogramProducer::m_colorSpace, KoBasicHistogramProducer::m_count, KoBasicHistogramProducer::m_from, KoBasicHistogramProducer::m_outLeft, KoBasicHistogramProducer::m_outRight, KoHistogramProducer::m_skipTransparent, KoHistogramProducer::m_skipUnselected, KoBasicHistogramProducer::m_width, KoColorSpace::normalisedChannelsValue(), OPACITY_TRANSPARENT_U8, KoColorSpace::opacityU8(), KoColorSpace::pixelSize(), and value().

◆ maximalZoom()

qreal KoBasicF32HistogramProducer::maximalZoom ( ) const
overridevirtual

Implements KoHistogramProducer.

Definition at line 222 of file KoBasicHistogramProducers.cpp.

223{
224 // XXX What _is_ the maximal zoom here? I don't think there is one with floats, so this seems a fine compromise for the moment
225 return 1.0 / 255.0;
226}

◆ positionToString()

QString KoBasicF32HistogramProducer::positionToString ( qreal pos) const
overridevirtual

Implements KoHistogramProducer.

Definition at line 217 of file KoBasicHistogramProducers.cpp.

218{
219 return QString("%1").arg(static_cast<float>(pos)); // XXX I doubt this is correct!
220}

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