krita
kis_filter_strategy.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef KIS_FILTER_STRATEGY_H_
00021 #define KIS_FILTER_STRATEGY_H_
00022
00023 #include <klocale.h>
00024
00025 #include "kis_types.h"
00026 #include "kis_generic_registry.h"
00027 #include "kis_id.h"
00028
00029 class KisFilterStrategy
00030 {
00031 public:
00032 KisFilterStrategy(KisID id) : m_id(id) {}
00033 virtual ~KisFilterStrategy() {}
00034
00035 KisID id() {return m_id;};
00036 virtual double valueAt(double ) const {return 0;};
00037 virtual Q_UINT32 intValueAt(Q_INT32 t) const {return Q_UINT32(255*valueAt(t/256.0));};
00038 double support() { return supportVal;};
00039 Q_UINT32 intSupport() { return intSupportVal;};
00040 virtual bool boxSpecial() { return false;};
00041 protected:
00042 double supportVal;
00043 Q_UINT32 intSupportVal;
00044 KisID m_id;
00045 };
00046
00047 class KisHermiteFilterStrategy : public KisFilterStrategy
00048 {
00049 public:
00050 KisHermiteFilterStrategy() : KisFilterStrategy(KisID("Hermite", i18n("Hermite")))
00051 {supportVal = 1.0; intSupportVal = 256;}
00052 virtual ~KisHermiteFilterStrategy() {}
00053
00054 virtual Q_UINT32 intValueAt(Q_INT32 t) const;
00055 virtual double valueAt(double t) const;
00056 };
00057
00058 class KisCubicFilterStrategy : public KisFilterStrategy
00059 {
00060 public:
00061 KisCubicFilterStrategy() : KisFilterStrategy(KisID("Bicubic", i18n("Bicubic")))
00062 {supportVal = 1.0; intSupportVal = 256;}
00063 virtual ~KisCubicFilterStrategy() {}
00064
00065 virtual Q_UINT32 intValueAt(Q_INT32 t) const;
00066 virtual double valueAt(double t) const;
00067 };
00068
00069 class KisBoxFilterStrategy : public KisFilterStrategy
00070 {
00071 public:
00072 KisBoxFilterStrategy() : KisFilterStrategy(KisID("Box", i18n("Box")))
00073 {supportVal = 0.5; intSupportVal = 128;}
00074 virtual ~KisBoxFilterStrategy() {}
00075
00076 virtual Q_UINT32 intValueAt(Q_INT32 t) const;
00077 virtual double valueAt(double t) const;
00078 virtual bool boxSpecial() { return true;};
00079 };
00080
00081 class KisTriangleFilterStrategy : public KisFilterStrategy
00082 {
00083 public:
00084 KisTriangleFilterStrategy() : KisFilterStrategy(KisID("Triangle", i18n("Triangle aka (bi)linear")))
00085 {supportVal = 1.0; intSupportVal = 256;}
00086 virtual ~KisTriangleFilterStrategy() {}
00087
00088 virtual Q_UINT32 intValueAt(Q_INT32 t) const;
00089 virtual double valueAt(double t) const;
00090 };
00091
00092 class KisBellFilterStrategy : public KisFilterStrategy
00093 {
00094 public:
00095 KisBellFilterStrategy() : KisFilterStrategy(KisID("Bell", i18n("Bell")))
00096 {supportVal = 1.5; intSupportVal = 128+256;}
00097 virtual ~KisBellFilterStrategy() {}
00098
00099 virtual double valueAt(double t) const;
00100 };
00101
00102 class KisBSplineFilterStrategy : public KisFilterStrategy
00103 {
00104 public:
00105 KisBSplineFilterStrategy() : KisFilterStrategy(KisID("BSpline", i18n("BSpline")))
00106 {supportVal = 2.0; intSupportVal = 512;}
00107 virtual ~KisBSplineFilterStrategy() {}
00108
00109 virtual double valueAt(double t) const;
00110 };
00111
00112 class KisLanczos3FilterStrategy : public KisFilterStrategy
00113 {
00114 public:
00115 KisLanczos3FilterStrategy() : KisFilterStrategy(KisID("Lanczos3", i18n("Lanczos3")))
00116 {supportVal = 3.0; intSupportVal = 768;}
00117 virtual ~KisLanczos3FilterStrategy() {}
00118
00119 virtual double valueAt(double t) const;
00120 private:
00121 double sinc(double x) const;
00122 };
00123
00124 class KisMitchellFilterStrategy : public KisFilterStrategy
00125 {
00126 public:
00127 KisMitchellFilterStrategy() : KisFilterStrategy(KisID("Mitchell", i18n("Mitchell")))
00128 {supportVal = 2.0; intSupportVal = 256;}
00129 virtual ~KisMitchellFilterStrategy() {}
00130
00131 virtual double valueAt(double t) const;
00132 };
00133
00134 class KisFilterStrategyRegistry : public KisGenericRegistry<KisFilterStrategy *>
00135 {
00136 public:
00137 virtual ~KisFilterStrategyRegistry();
00138
00139 static KisFilterStrategyRegistry* instance();
00140
00141 private:
00142 KisFilterStrategyRegistry();
00143 KisFilterStrategyRegistry(const KisFilterStrategyRegistry&);
00144 KisFilterStrategyRegistry operator=(const KisFilterStrategyRegistry&);
00145
00146 private:
00147 static KisFilterStrategyRegistry *m_singleton;
00148 };
00149
00150 #endif // KIS_FILTER_STRATEGY_H_
|