krita

kis_filter_strategy.h

00001 /*
00002  *  Copyright (c) 2004 Michael Thaler <michael.thaler@physik.tu-muenchen.de>
00003  *  Copyright (c) 2005 Casper Boemann <cbr@boemann.dk>
00004  *
00005  *  This program is free software; you can redistribute it and/or modify
00006  *  it under the terms of the GNU General Public License as published by
00007  *  the Free Software Foundation; either version 2 of the License, or
00008  *  (at your option) any later version.
00009  *
00010  *  This program is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  *  GNU General Public License for more details.
00014  *
00015  *  You should have received a copy of the GNU General Public License
00016  *  along with this program; if not, write to the Free Software
00017  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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 /*t*/) 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 KisBoxFilterStrategy : public KisFilterStrategy
00059 {
00060     public:
00061         KisBoxFilterStrategy() : KisFilterStrategy(KisID("Box", i18n("Box")))
00062              {supportVal = 0.5; intSupportVal = 128;}
00063         virtual ~KisBoxFilterStrategy() {}
00064 
00065         virtual Q_UINT32 intValueAt(Q_INT32 t) const;
00066         virtual double valueAt(double t) const;
00067         virtual bool boxSpecial() { return true;};
00068 };
00069 
00070 class KisTriangleFilterStrategy : public KisFilterStrategy
00071 {
00072     public:
00073         KisTriangleFilterStrategy() : KisFilterStrategy(KisID("Triangle", i18n("Triangle aka (bi)linear")))
00074             {supportVal = 1.0; intSupportVal = 256;}
00075         virtual ~KisTriangleFilterStrategy() {}
00076 
00077         virtual Q_UINT32 intValueAt(Q_INT32 t) const;
00078         virtual double valueAt(double t) const;
00079 };
00080 
00081 class KisBellFilterStrategy : public KisFilterStrategy
00082 {
00083     public:
00084         KisBellFilterStrategy() : KisFilterStrategy(KisID("Bell", i18n("Bell")))
00085             {supportVal = 1.5; intSupportVal = 128+256;}
00086         virtual ~KisBellFilterStrategy() {}
00087 
00088         virtual double valueAt(double t) const;
00089 };
00090 
00091 class KisBSplineFilterStrategy : public KisFilterStrategy
00092 {
00093     public:
00094         KisBSplineFilterStrategy() : KisFilterStrategy(KisID("BSpline", i18n("BSpline")))
00095             {supportVal = 2.0; intSupportVal = 512;}
00096         virtual ~KisBSplineFilterStrategy() {}
00097 
00098         virtual double valueAt(double t) const;
00099 };
00100 
00101 class KisLanczos3FilterStrategy : public KisFilterStrategy
00102 {
00103     public:
00104         KisLanczos3FilterStrategy() : KisFilterStrategy(KisID("Lanczos3", i18n("Lanczos3")))
00105             {supportVal = 3.0; intSupportVal = 768;}
00106         virtual ~KisLanczos3FilterStrategy() {}
00107 
00108         virtual double valueAt(double t) const;
00109     private:
00110         double sinc(double x) const; 
00111 };
00112 
00113 class KisMitchellFilterStrategy : public KisFilterStrategy
00114 {
00115     public:
00116         KisMitchellFilterStrategy() : KisFilterStrategy(KisID("Mitchell", i18n("Mitchell")))
00117             {supportVal = 2.0; intSupportVal = 256;}
00118         virtual ~KisMitchellFilterStrategy() {}
00119 
00120         virtual double valueAt(double t) const;
00121 };
00122 
00123 class KisFilterStrategyRegistry : public KisGenericRegistry<KisFilterStrategy *>
00124 {
00125 public:
00126     virtual ~KisFilterStrategyRegistry();
00127     
00128     static KisFilterStrategyRegistry* instance();
00129 
00130 private:
00131     KisFilterStrategyRegistry();
00132      KisFilterStrategyRegistry(const KisFilterStrategyRegistry&);
00133      KisFilterStrategyRegistry operator=(const KisFilterStrategyRegistry&);
00134 
00135 private:
00136     static KisFilterStrategyRegistry *m_singleton;
00137 };
00138 
00139 #endif // KIS_FILTER_STRATEGY_H_
KDE Home | KDE Accessibility Home | Description of Access Keys