20#ifndef KIS_FILTER_STRATEGY_H_
21#define KIS_FILTER_STRATEGY_H_
26#include "kis_generic_registry.h"
29class KisFilterStrategy
32 KisFilterStrategy(KisID
id) : m_id(id) {}
33 virtual ~KisFilterStrategy() {}
35 KisID id() {
return m_id;};
36 virtual double valueAt(
double )
const {
return 0;};
37 virtual TQ_UINT32 intValueAt(TQ_INT32 t)
const {
return TQ_UINT32(255*valueAt(t/256.0));};
38 double support() {
return supportVal;};
39 TQ_UINT32 intSupport() {
return intSupportVal;};
40 virtual bool boxSpecial() {
return false;};
43 TQ_UINT32 intSupportVal;
47class KisHermiteFilterStrategy :
public KisFilterStrategy
50 KisHermiteFilterStrategy() : KisFilterStrategy(KisID(
"Hermite", i18n(
"Hermite")))
51 {supportVal = 1.0; intSupportVal = 256;}
52 virtual ~KisHermiteFilterStrategy() {}
54 virtual TQ_UINT32 intValueAt(TQ_INT32 t)
const;
55 virtual double valueAt(
double t)
const;
58class KisCubicFilterStrategy :
public KisFilterStrategy
61 KisCubicFilterStrategy() : KisFilterStrategy(KisID(
"Bicubic", i18n(
"Bicubic")))
62 {supportVal = 1.0; intSupportVal = 256;}
63 virtual ~KisCubicFilterStrategy() {}
65 virtual TQ_UINT32 intValueAt(TQ_INT32 t)
const;
66 virtual double valueAt(
double t)
const;
69class KisBoxFilterStrategy :
public KisFilterStrategy
72 KisBoxFilterStrategy() : KisFilterStrategy(KisID(
"Box", i18n(
"Box")))
73 {supportVal = 0.5; intSupportVal = 128;}
74 virtual ~KisBoxFilterStrategy() {}
76 virtual TQ_UINT32 intValueAt(TQ_INT32 t)
const;
77 virtual double valueAt(
double t)
const;
78 virtual bool boxSpecial() {
return true;};
81class KisTriangleFilterStrategy :
public KisFilterStrategy
84 KisTriangleFilterStrategy() : KisFilterStrategy(KisID(
"Triangle", i18n(
"Triangle aka (bi)linear")))
85 {supportVal = 1.0; intSupportVal = 256;}
86 virtual ~KisTriangleFilterStrategy() {}
88 virtual TQ_UINT32 intValueAt(TQ_INT32 t)
const;
89 virtual double valueAt(
double t)
const;
92class KisBellFilterStrategy :
public KisFilterStrategy
95 KisBellFilterStrategy() : KisFilterStrategy(KisID(
"Bell", i18n(
"Bell")))
96 {supportVal = 1.5; intSupportVal = 128+256;}
97 virtual ~KisBellFilterStrategy() {}
99 virtual double valueAt(
double t)
const;
102class KisBSplineFilterStrategy :
public KisFilterStrategy
105 KisBSplineFilterStrategy() : KisFilterStrategy(KisID(
"BSpline", i18n(
"BSpline")))
106 {supportVal = 2.0; intSupportVal = 512;}
107 virtual ~KisBSplineFilterStrategy() {}
109 virtual double valueAt(
double t)
const;
112class KisLanczos3FilterStrategy :
public KisFilterStrategy
115 KisLanczos3FilterStrategy() : KisFilterStrategy(KisID(
"Lanczos3", i18n(
"Lanczos3")))
116 {supportVal = 3.0; intSupportVal = 768;}
117 virtual ~KisLanczos3FilterStrategy() {}
119 virtual double valueAt(
double t)
const;
121 double sinc(
double x)
const;
124class KisMitchellFilterStrategy :
public KisFilterStrategy
127 KisMitchellFilterStrategy() : KisFilterStrategy(KisID(
"Mitchell", i18n(
"Mitchell")))
128 {supportVal = 2.0; intSupportVal = 256;}
129 virtual ~KisMitchellFilterStrategy() {}
131 virtual double valueAt(
double t)
const;
137 virtual ~KisFilterStrategyRegistry();
139 static KisFilterStrategyRegistry* instance();
142 KisFilterStrategyRegistry();
143 KisFilterStrategyRegistry(
const KisFilterStrategyRegistry&);
144 KisFilterStrategyRegistry operator=(
const KisFilterStrategyRegistry&);
147 static KisFilterStrategyRegistry *m_singleton;
Base class for registry objects in Chalk.