1 // This code is in the public domain -- castanyo@yahoo.es
3 #ifndef NV_IMAGE_FILTER_H
4 #define NV_IMAGE_FILTER_H
6 #define uint unsigned int
15 float width() const { return m_width; }
16 float sampleDelta(float x, float scale) const;
17 float sampleBox(float x, float scale, int samples) const;
18 float sampleTriangle(float x, float scale, int samples) const;
20 virtual float evaluate(float x) const = 0;
27 class BoxFilter : public Filter
31 BoxFilter(float width);
32 virtual float evaluate(float x) const;
35 // Triangle (bilinear/tent) filter.
36 class TriangleFilter : public Filter
40 TriangleFilter(float width);
41 virtual float evaluate(float x) const;
45 class KaiserFilter : public Filter
48 KaiserFilter(float w);
49 virtual float evaluate(float x) const;
51 void setParameters(float a, float stretch);
60 /// A 1D kernel. Used to precompute filter weights.
64 Kernel1(const Filter & f, int iscale, int samples = 32);
67 float valueAt(uint x) const {
71 int windowSize() const {
93 Kernel2(const Kernel2 & k);
99 float valueAt(uint x, uint y) const {
100 return m_data[y * m_windowSize + x];
103 uint windowSize() const {
108 const uint m_windowSize;
113 /// A 1D polyphase kernel
114 class PolyphaseKernel
117 PolyphaseKernel(const Filter & f, uint srcLength, uint dstLength, int samples = 32);
120 int windowSize() const {
124 uint length() const {
128 float width() const {
132 float valueAt(uint column, uint x) const {
133 return m_data[column * m_windowSize + x];
136 void debugPrint() const;
145 #endif // NV_IMAGE_FILTER_H