19#ifndef _KIS_BASIC_HISTOGRAM_PRODUCERS_
20#define _KIS_BASIC_HISTOGRAM_PRODUCERS_
22#include <tqvaluevector.h>
27#include "kis_histogram_producer.h"
28#include "kis_colorspace.h"
31class KisLabColorSpace;
35 KisBasicHistogramProducer(
const KisID&
id,
int channels,
int nrOfBins, KisColorSpace *colorSpace);
36 virtual ~KisBasicHistogramProducer() {}
40 virtual void setView(
double from,
double size) { m_from = from; m_width = size; }
42 virtual const KisID& id()
const {
return m_id; }
43 virtual TQValueVector<KisChannelInfo *> channels() {
return m_colorSpace->channels(); }
44 virtual TQ_INT32 numberOfBins() {
return m_nrOfBins; }
45 virtual double viewFrom()
const {
return m_from; }
46 virtual double viewWidth()
const {
return m_width; }
48 virtual TQ_INT32 count() {
return m_count; }
50 virtual TQ_INT32 getBinAt(
int channel,
int position)
51 {
return m_bins.at(externalToInternal(channel)).at(position); }
53 virtual TQ_INT32 outOfViewLeft(
int channel)
54 {
return m_outLeft.at(externalToInternal(channel)); }
56 virtual TQ_INT32 outOfViewRight(
int channel)
57 {
return m_outRight.at(externalToInternal(channel)); }
67 virtual int externalToInternal(
int ext) {
68 if (channels().count() > 0 && m_external.count() == 0)
69 makeExternalToInternal();
70 return m_external.at(ext);
73 void makeExternalToInternal();
74 typedef TQValueVector<TQ_UINT32> vBins;
75 TQValueVector<vBins> m_bins;
76 vBins m_outLeft, m_outRight;
77 double m_from, m_width;
79 int m_channels, m_nrOfBins;
80 KisColorSpace *m_colorSpace;
82 TQValueVector<TQ_INT32> m_external;
85class KisBasicU8HistogramProducer :
public KisBasicHistogramProducer {
87 KisBasicU8HistogramProducer(
const KisID&
id, KisColorSpace *colorSpace);
88 virtual void addRegionToBin(TQ_UINT8 * pixels, TQ_UINT8 * selectionMask, TQ_UINT32 nPixels, KisColorSpace *colorSpace);
89 virtual TQString positionToString(
double pos)
const;
90 virtual double maximalZoom()
const {
return 1.0; }
93class KisBasicU16HistogramProducer :
public KisBasicHistogramProducer {
95 KisBasicU16HistogramProducer(
const KisID&
id, KisColorSpace *colorSpace);
96 virtual void addRegionToBin(TQ_UINT8 * pixels, TQ_UINT8 * selectionMask, TQ_UINT32 nPixels, KisColorSpace *colorSpace);
97 virtual TQString positionToString(
double pos)
const;
98 virtual double maximalZoom()
const;
101class KisBasicF32HistogramProducer :
public KisBasicHistogramProducer {
103 KisBasicF32HistogramProducer(
const KisID&
id, KisColorSpace *colorSpace);
104 virtual void addRegionToBin(TQ_UINT8 * pixels, TQ_UINT8 * selectionMask, TQ_UINT32 nPixels, KisColorSpace *colorSpace);
105 virtual TQString positionToString(
double pos)
const;
106 virtual double maximalZoom()
const;
110class KisBasicF16HalfHistogramProducer :
public KisBasicHistogramProducer {
112 KisBasicF16HalfHistogramProducer(
const KisID&
id, KisColorSpace *colorSpace);
113 virtual void addRegionToBin(TQ_UINT8 * pixels, TQ_UINT8 * selectionMask, TQ_UINT32 nPixels, KisColorSpace *colorSpace);
114 virtual TQString positionToString(
double pos)
const;
115 virtual double maximalZoom()
const;
125template<
class T>
class KisBasicHistogramProducerFactory :
public KisHistogramProducerFactory {
128 : KisHistogramProducerFactory(
id), m_cs(colorSpace) {}
129 virtual ~KisBasicHistogramProducerFactory() {}
130 virtual KisHistogramProducerSP generate() {
return new T(
id(), m_cs); }
131 virtual bool isCompatibleWith(
KisColorSpace* colorSpace)
const {
return colorSpace->
id() == m_cs->id(); }
132 virtual float preferrednessLevelWith(
KisColorSpace* )
const {
return 1.0; }
143class KisGenericRGBHistogramProducer :
public KisBasicHistogramProducer {
145 KisGenericRGBHistogramProducer();
147 virtual TQString positionToString(
double pos)
const;
148 virtual double maximalZoom()
const;
149 virtual TQValueVector<KisChannelInfo *> channels();
151 TQValueVector<KisChannelInfo *> m_channelsList;
155class KisGenericRGBHistogramProducerFactory :
public KisHistogramProducerFactory {
157 KisGenericRGBHistogramProducerFactory()
158 : KisHistogramProducerFactory(
KisID(
"GENRGBHISTO", i18n(
"Generic RGB"))) {}
159 virtual ~KisGenericRGBHistogramProducerFactory() {}
161 virtual bool isCompatibleWith(
KisColorSpace*)
const {
return true; }
162 virtual float preferrednessLevelWith(
KisColorSpace*)
const {
return 0.0; }
171class KisGenericLabHistogramProducer :
public KisBasicHistogramProducer {
173 KisGenericLabHistogramProducer();
174 virtual ~KisGenericLabHistogramProducer();
176 virtual TQString positionToString(
double pos)
const;
177 virtual double maximalZoom()
const;
178 virtual TQValueVector<KisChannelInfo *> channels();
180 TQValueVector<KisChannelInfo *> m_channelsList;
182 static KisLabColorSpace* m_labCs;
186class KisGenericLabHistogramProducerFactory :
public KisHistogramProducerFactory {
188 KisGenericLabHistogramProducerFactory()
189 : KisHistogramProducerFactory(
KisID(
"GENLABHISTO", i18n(
"Generic L*a*b*"))) {}
190 virtual ~KisGenericLabHistogramProducerFactory() {}
192 virtual bool isCompatibleWith(
KisColorSpace*)
const {
return true; }
193 virtual float preferrednessLevelWith(
KisColorSpace*)
const {
return 0.0; }
A colorspace is the definition of a certain color model in Chalk.
virtual KisID id() const =0
Chalk definition for use in .kra files and internally: unchanging name + i18n'able description.
This is a Producer (with associated factory) that converts the pixels of the colorspace to L*a*b*,...
virtual void addRegionToBin(TQ_UINT8 *pixels, TQ_UINT8 *selectionMask, TQ_UINT32 nPixels, KisColorSpace *colorSpace)
Adds the values from the specified array of pixels to the bins – does not reset anything.
This is a Producer (with associated factory) that converts the pixels of the colorspace to RGB8 with ...
virtual void addRegionToBin(TQ_UINT8 *pixels, TQ_UINT8 *selectionMask, TQ_UINT32 nPixels, KisColorSpace *colorSpace)
Adds the values from the specified array of pixels to the bins – does not reset anything.
This class is an interface used in the generation of a histogram.
virtual void clear()=0
Clears the data in this producer, but keeps its other settings.
virtual void addRegionToBin(TQ_UINT8 *pixels, TQ_UINT8 *selectionMask, TQ_UINT32 nPixels, KisColorSpace *colorSpace)=0
Adds the values from the specified array of pixels to the bins – does not reset anything.
Chalk has a large number of extensible resources.