krita
kis_basic_histogram_producers.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _KIS_BASIC_HISTOGRAM_PRODUCERS_
00020 #define _KIS_BASIC_HISTOGRAM_PRODUCERS_
00021
00022 #include <qvaluevector.h>
00023 #include <klocale.h>
00024
00025 #include "config.h"
00026
00027 #include "kis_histogram_producer.h"
00028 #include "kis_colorspace.h"
00029 #include "kis_id.h"
00030
00031 class KisLabColorSpace;
00032
00033 class KisBasicHistogramProducer : public KisHistogramProducer {
00034 public:
00035 KisBasicHistogramProducer(const KisID& id, int channels, int nrOfBins, KisColorSpace *colorSpace);
00036 virtual ~KisBasicHistogramProducer() {}
00037
00038 virtual void clear();
00039
00040 virtual void setView(double from, double size) { m_from = from; m_width = size; }
00041
00042 virtual const KisID& id() const { return m_id; }
00043 virtual QValueVector<KisChannelInfo *> channels() { return m_colorSpace->channels(); }
00044 virtual Q_INT32 numberOfBins() { return m_nrOfBins; }
00045 virtual double viewFrom() const { return m_from; }
00046 virtual double viewWidth() const { return m_width; }
00047
00048 virtual Q_INT32 count() { return m_count; }
00049
00050 virtual Q_INT32 getBinAt(int channel, int position)
00051 { return m_bins.at(externalToInternal(channel)).at(position); }
00052
00053 virtual Q_INT32 outOfViewLeft(int channel)
00054 { return m_outLeft.at(externalToInternal(channel)); }
00055
00056 virtual Q_INT32 outOfViewRight(int channel)
00057 { return m_outRight.at(externalToInternal(channel)); }
00058
00059 protected:
00067 virtual int externalToInternal(int ext) {
00068 if (channels().count() > 0 && m_external.count() == 0)
00069 makeExternalToInternal();
00070 return m_external.at(ext);
00071 }
00072
00073 void makeExternalToInternal();
00074 typedef QValueVector<Q_UINT32> vBins;
00075 QValueVector<vBins> m_bins;
00076 vBins m_outLeft, m_outRight;
00077 double m_from, m_width;
00078 Q_INT32 m_count;
00079 int m_channels, m_nrOfBins;
00080 KisColorSpace *m_colorSpace;
00081 KisID m_id;
00082 QValueVector<Q_INT32> m_external;
00083 };
00084
00085 class KisBasicU8HistogramProducer : public KisBasicHistogramProducer {
00086 public:
00087 KisBasicU8HistogramProducer(const KisID& id, KisColorSpace *colorSpace);
00088 virtual void addRegionToBin(Q_UINT8 * pixels, Q_UINT8 * selectionMask, Q_UINT32 nPixels, KisColorSpace *colorSpace);
00089 virtual QString positionToString(double pos) const;
00090 virtual double maximalZoom() const { return 1.0; }
00091 };
00092
00093 class KisBasicU16HistogramProducer : public KisBasicHistogramProducer {
00094 public:
00095 KisBasicU16HistogramProducer(const KisID& id, KisColorSpace *colorSpace);
00096 virtual void addRegionToBin(Q_UINT8 * pixels, Q_UINT8 * selectionMask, Q_UINT32 nPixels, KisColorSpace *colorSpace);
00097 virtual QString positionToString(double pos) const;
00098 virtual double maximalZoom() const;
00099 };
00100
00101 class KisBasicF32HistogramProducer : public KisBasicHistogramProducer {
00102 public:
00103 KisBasicF32HistogramProducer(const KisID& id, KisColorSpace *colorSpace);
00104 virtual void addRegionToBin(Q_UINT8 * pixels, Q_UINT8 * selectionMask, Q_UINT32 nPixels, KisColorSpace *colorSpace);
00105 virtual QString positionToString(double pos) const;
00106 virtual double maximalZoom() const;
00107 };
00108
00109 #ifdef HAVE_OPENEXR
00110 class KisBasicF16HalfHistogramProducer : public KisBasicHistogramProducer {
00111 public:
00112 KisBasicF16HalfHistogramProducer(const KisID& id, KisColorSpace *colorSpace);
00113 virtual void addRegionToBin(Q_UINT8 * pixels, Q_UINT8 * selectionMask, Q_UINT32 nPixels, KisColorSpace *colorSpace);
00114 virtual QString positionToString(double pos) const;
00115 virtual double maximalZoom() const;
00116 };
00117 #endif
00118
00125 template<class T> class KisBasicHistogramProducerFactory : public KisHistogramProducerFactory {
00126 public:
00127 KisBasicHistogramProducerFactory(const KisID& id, KisColorSpace *colorSpace)
00128 : KisHistogramProducerFactory(id), m_cs(colorSpace) {}
00129 virtual ~KisBasicHistogramProducerFactory() {}
00130 virtual KisHistogramProducerSP generate() { return new T(id(), m_cs); }
00131 virtual bool isCompatibleWith(KisColorSpace* colorSpace) const { return colorSpace->id() == m_cs->id(); }
00132 virtual float preferrednessLevelWith(KisColorSpace* ) const { return 1.0; }
00133 protected:
00134 KisColorSpace *m_cs;
00135 };
00136
00143 class KisGenericRGBHistogramProducer : public KisBasicHistogramProducer {
00144 public:
00145 KisGenericRGBHistogramProducer();
00146 virtual void addRegionToBin(Q_UINT8 * pixels, Q_UINT8 * selectionMask, Q_UINT32 nPixels, KisColorSpace *colorSpace);
00147 virtual QString positionToString(double pos) const;
00148 virtual double maximalZoom() const;
00149 virtual QValueVector<KisChannelInfo *> channels();
00150 protected:
00151 QValueVector<KisChannelInfo *> m_channelsList;
00152 };
00153
00155 class KisGenericRGBHistogramProducerFactory : public KisHistogramProducerFactory {
00156 public:
00157 KisGenericRGBHistogramProducerFactory()
00158 : KisHistogramProducerFactory(KisID("GENRGBHISTO", i18n("Generic RGB Histogram"))) {}
00159 virtual ~KisGenericRGBHistogramProducerFactory() {}
00160 virtual KisHistogramProducerSP generate() { return new KisGenericRGBHistogramProducer(); }
00161 virtual bool isCompatibleWith(KisColorSpace*) const { return true; }
00162 virtual float preferrednessLevelWith(KisColorSpace*) const { return 0.0; }
00163 };
00164
00165
00171 class KisGenericLabHistogramProducer : public KisBasicHistogramProducer {
00172 public:
00173 KisGenericLabHistogramProducer();
00174 virtual ~KisGenericLabHistogramProducer();
00175 virtual void addRegionToBin(Q_UINT8 * pixels, Q_UINT8 * selectionMask, Q_UINT32 nPixels, KisColorSpace *colorSpace);
00176 virtual QString positionToString(double pos) const;
00177 virtual double maximalZoom() const;
00178 virtual QValueVector<KisChannelInfo *> channels();
00179 protected:
00180 QValueVector<KisChannelInfo *> m_channelsList;
00181 private:
00182 static KisLabColorSpace* m_labCs;
00183 };
00184
00186 class KisGenericLabHistogramProducerFactory : public KisHistogramProducerFactory {
00187 public:
00188 KisGenericLabHistogramProducerFactory()
00189 : KisHistogramProducerFactory(KisID("GENLABHISTO", i18n("Generic L*a*b* Histogram"))) {}
00190 virtual ~KisGenericLabHistogramProducerFactory() {}
00191 virtual KisHistogramProducerSP generate() { return new KisGenericLabHistogramProducer(); }
00192 virtual bool isCompatibleWith(KisColorSpace*) const { return true; }
00193 virtual float preferrednessLevelWith(KisColorSpace*) const { return 0.0; }
00194 };
00195
00196
00197 #endif // _KIS_BASIC_HISTOGRAM_PRODUCERS_
|