Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_filter_strategy.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2004 Michael Thaler <michael.thaler@physik.tu-muenchen.de>
3 * SPDX-FileCopyrightText: 2005 C. Boemann <cbo@boemann.dk>
4 * SPDX-FileCopyrightText: 2013 Juan Palacios <jpalaciosdev@gmail.com>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9#ifndef KIS_FILTER_STRATEGY_H_
10#define KIS_FILTER_STRATEGY_H_
11
12#include <klocalizedstring.h>
13
14#include "KoGenericRegistry.h"
15#include "KoID.h"
16#include "kritaimage_export.h"
17#include <QSize>
18
19class KRITAIMAGE_EXPORT KisFilterStrategy
20{
21public:
22 KisFilterStrategy(KoID id) : m_id(id) {}
23 virtual ~KisFilterStrategy() { }
24
25 QString id() {
26 return m_id.id();
27 }
28 QString name() {
29 return m_id.name();
30 }
31 virtual qreal valueAt(qreal t, qreal weightsPositionScale) const {
32 Q_UNUSED(t);
33 Q_UNUSED(weightsPositionScale);
34 return 0;
35 }
36 virtual qint32 intValueAt(qint32 t, qreal weightsPositionScale) const {
37 return qint32(255*valueAt(t / 256.0, weightsPositionScale));
38 }
39 virtual qreal support(qreal weightsPositionScale) {
40 Q_UNUSED(weightsPositionScale);
41 return supportVal;
42 }
43 virtual qint32 intSupport(qreal weightsPositionScale) {
44 Q_UNUSED(weightsPositionScale);
45 return intSupportVal;
46 }
47 virtual QString description() {
48 return QString();
49 }
50
51protected:
52 qreal supportVal {0.0};
53 qint32 intSupportVal {0};
55};
56
57class KRITAIMAGE_EXPORT KisHermiteFilterStrategy : public KisFilterStrategy
58{
59public:
60 KisHermiteFilterStrategy() : KisFilterStrategy(KoID("Hermite", i18n("Hermite"))) {
61 supportVal = 1.0; intSupportVal = 256;
62 }
64
65 qint32 intValueAt(qint32 t, qreal weightsPositionScale) const override;
66 qreal valueAt(qreal t, qreal weightsPositionScale) const override;
67};
68
69class KRITAIMAGE_EXPORT KisBicubicFilterStrategy : public KisFilterStrategy
70{
71public:
72 KisBicubicFilterStrategy() : KisFilterStrategy(KoID("Bicubic", i18n("Bicubic"))) {
73 supportVal = 2.0; intSupportVal = 512;
74 }
76
77 QString description() override {
78 return i18n("Adds pixels using the color of surrounding pixels. Produces smoother tonal gradations than Bilinear.");
79 }
80
81 qint32 intValueAt(qint32 t, qreal weightsPositionScale) const override;
82};
83class KRITAIMAGE_EXPORT KisBoxFilterStrategy : public KisFilterStrategy
84{
85public:
86 KisBoxFilterStrategy() : KisFilterStrategy(KoID("NearestNeighbor", i18n("Nearest Neighbor"))) {
87 // 0.5 and 128, but with a bit of margin to ensure the correct pixel will be used
88 // even in case of calculation errors
89 supportVal = 0.51; intSupportVal = 129;
90 }
92
93 QString description() override {
94 return i18n("Replicate pixels in the image. Preserves all the original detail, but can produce jagged effects.");
95 }
96
97 virtual qreal support(qreal weightsPositionScale) override;
98 virtual qint32 intSupport(qreal weightsPositionScale) override;
99
100
101 qint32 intValueAt(qint32 t, qreal weightsPositionScale) const override;
102 qreal valueAt(qreal t, qreal weightsPositionScale) const override;
103};
104
105class KRITAIMAGE_EXPORT KisBilinearFilterStrategy : public KisFilterStrategy
106{
107public:
108 KisBilinearFilterStrategy() : KisFilterStrategy(KoID("Bilinear", i18n("Bilinear"))) {
109 supportVal = 1.0; intSupportVal = 256;
110 }
112
113 QString description() override {
114 return i18n("Adds pixels averaging the color values of surrounding pixels. Produces medium quality results when the image is scaled from half to two times the original size.");
115 }
116
117 qint32 intValueAt(qint32 t, qreal weightsPositionScale) const override;
118 qreal valueAt(qreal t, qreal weightsPositionScale) const override;
119};
120
121class KRITAIMAGE_EXPORT KisBellFilterStrategy : public KisFilterStrategy
122{
123public:
124 KisBellFilterStrategy() : KisFilterStrategy(KoID("Bell", i18n("Bell"))) {
125 supportVal = 1.5; intSupportVal = 128 + 256;
126 }
128
129 qreal valueAt(qreal t, qreal weightsPositionScale) const override;
130};
131
132class KRITAIMAGE_EXPORT KisBSplineFilterStrategy : public KisFilterStrategy
133{
134public:
135 KisBSplineFilterStrategy() : KisFilterStrategy(KoID("BSpline", i18n("BSpline"))) {
136 supportVal = 2.0; intSupportVal = 512;
137 }
139
140 qreal valueAt(qreal t, qreal weightsPositionScale) const override;
141};
142
143class KRITAIMAGE_EXPORT KisLanczos3FilterStrategy : public KisFilterStrategy
144{
145public:
146 KisLanczos3FilterStrategy() : KisFilterStrategy(KoID("Lanczos3", i18n("Lanczos3"))) {
147 supportVal = 3.0; intSupportVal = 768;
148 }
150
151 QString description() override {
152 return i18n("Offers similar results than Bicubic, but maybe a little bit sharper. Can produce light and dark halos along strong edges.");
153 }
154
155 qreal valueAt(qreal t, qreal weightsPositionScale) const override;
156private:
157 qreal sinc(qreal x) const;
158};
159
160class KRITAIMAGE_EXPORT KisMitchellFilterStrategy : public KisFilterStrategy
161{
162public:
163 KisMitchellFilterStrategy() : KisFilterStrategy(KoID("Mitchell", i18n("Mitchell"))) {
164 supportVal = 2.0; intSupportVal = 256;
165 }
167
168 qreal valueAt(qreal t, qreal weightsPositionScale) const override;
169};
170
171class KRITAIMAGE_EXPORT KisFilterStrategyRegistry : public KoGenericRegistry<KisFilterStrategy *>
172{
173
174public:
175
179
184 QList<KoID> listKeys() const;
185
190 QString formattedDescriptions() const;
191
195 KisFilterStrategy* autoFilterStrategy(QSize originalSize, QSize desiredSize) const;
196
197private:
198
201
202};
203
204#endif // KIS_FILTER_STRATEGY_H_
PythonPluginManager * instance
QString description() override
QString description() override
KisFilterStrategyRegistry(const KisFilterStrategyRegistry &)
KisFilterStrategyRegistry operator=(const KisFilterStrategyRegistry &)
virtual qint32 intSupport(qreal weightsPositionScale)
virtual qreal support(qreal weightsPositionScale)
virtual qint32 intValueAt(qint32 t, qreal weightsPositionScale) const
virtual qreal valueAt(qreal t, qreal weightsPositionScale) const
virtual QString description()
Definition KoID.h:30