You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/chalk/core/kis_filter_strategy.h

151 rivejä
4.8 KiB

/*
* Copyright (c) 2004 Michael Thaler <michael.thaler@physik.tu-muenchen.de>
* Copyright (c) 2005 Casper Boemann <cbr@boemann.dk>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef KIS_FILTER_STRATEGY_H_
#define KIS_FILTER_STRATEGY_H_
#include <tdelocale.h>
#include "kis_types.h"
#include "kis_generic_registry.h"
#include "kis_id.h"
class KisFilterStrategy
{
public:
KisFilterStrategy(KisID id) : m_id(id) {}
virtual ~KisFilterStrategy() {}
KisID id() {return m_id;};
virtual double valueAt(double /*t*/) const {return 0;};
virtual TQ_UINT32 intValueAt(TQ_INT32 t) const {return TQ_UINT32(255*valueAt(t/256.0));};
double support() { return supportVal;};
TQ_UINT32 intSupport() { return intSupportVal;};
virtual bool boxSpecial() { return false;};
protected:
double supportVal;
TQ_UINT32 intSupportVal;
KisID m_id;
};
class KisHermiteFilterStrategy : public KisFilterStrategy
{
public:
KisHermiteFilterStrategy() : KisFilterStrategy(KisID("Hermite", i18n("Hermite")))
{supportVal = 1.0; intSupportVal = 256;}
virtual ~KisHermiteFilterStrategy() {}
virtual TQ_UINT32 intValueAt(TQ_INT32 t) const;
virtual double valueAt(double t) const;
};
class KisCubicFilterStrategy : public KisFilterStrategy
{
public:
KisCubicFilterStrategy() : KisFilterStrategy(KisID("Bicubic", i18n("Bicubic")))
{supportVal = 1.0; intSupportVal = 256;}
virtual ~KisCubicFilterStrategy() {}
virtual TQ_UINT32 intValueAt(TQ_INT32 t) const;
virtual double valueAt(double t) const;
};
class KisBoxFilterStrategy : public KisFilterStrategy
{
public:
KisBoxFilterStrategy() : KisFilterStrategy(KisID("Box", i18n("Box")))
{supportVal = 0.5; intSupportVal = 128;}
virtual ~KisBoxFilterStrategy() {}
virtual TQ_UINT32 intValueAt(TQ_INT32 t) const;
virtual double valueAt(double t) const;
virtual bool boxSpecial() { return true;};
};
class KisTriangleFilterStrategy : public KisFilterStrategy
{
public:
KisTriangleFilterStrategy() : KisFilterStrategy(KisID("Triangle", i18n("Triangle aka (bi)linear")))
{supportVal = 1.0; intSupportVal = 256;}
virtual ~KisTriangleFilterStrategy() {}
virtual TQ_UINT32 intValueAt(TQ_INT32 t) const;
virtual double valueAt(double t) const;
};
class KisBellFilterStrategy : public KisFilterStrategy
{
public:
KisBellFilterStrategy() : KisFilterStrategy(KisID("Bell", i18n("Bell")))
{supportVal = 1.5; intSupportVal = 128+256;}
virtual ~KisBellFilterStrategy() {}
virtual double valueAt(double t) const;
};
class KisBSplineFilterStrategy : public KisFilterStrategy
{
public:
KisBSplineFilterStrategy() : KisFilterStrategy(KisID("BSpline", i18n("BSpline")))
{supportVal = 2.0; intSupportVal = 512;}
virtual ~KisBSplineFilterStrategy() {}
virtual double valueAt(double t) const;
};
class KisLanczos3FilterStrategy : public KisFilterStrategy
{
public:
KisLanczos3FilterStrategy() : KisFilterStrategy(KisID("Lanczos3", i18n("Lanczos3")))
{supportVal = 3.0; intSupportVal = 768;}
virtual ~KisLanczos3FilterStrategy() {}
virtual double valueAt(double t) const;
private:
double sinc(double x) const;
};
class KisMitchellFilterStrategy : public KisFilterStrategy
{
public:
KisMitchellFilterStrategy() : KisFilterStrategy(KisID("Mitchell", i18n("Mitchell")))
{supportVal = 2.0; intSupportVal = 256;}
virtual ~KisMitchellFilterStrategy() {}
virtual double valueAt(double t) const;
};
class KisFilterStrategyRegistry : public KisGenericRegistry<KisFilterStrategy *>
{
public:
virtual ~KisFilterStrategyRegistry();
static KisFilterStrategyRegistry* instance();
private:
KisFilterStrategyRegistry();
KisFilterStrategyRegistry(const KisFilterStrategyRegistry&);
KisFilterStrategyRegistry operator=(const KisFilterStrategyRegistry&);
private:
static KisFilterStrategyRegistry *m_singleton;
};
#endif // KIS_FILTER_STRATEGY_H_