Krita Source Code Documentation
Loading...
Searching...
No Matches
posterize.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Manuel Riecke <spell1337@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "posterize.h"
8#include <stdlib.h>
9#include <vector>
10
11#include <QPoint>
12#include <QTime>
13
14#include <klocalizedstring.h>
15
16#include <kis_debug.h>
17#include <kpluginfactory.h>
18
20#include <kis_types.h>
21#include <kis_selection.h>
22#include <kis_layer.h>
25#include <kis_global.h>
26
27#include <KoColorSpaceMaths.h>
30
31K_PLUGIN_FACTORY_WITH_JSON(PosterizeFactory, "kritaposterize.json", registerPlugin<Posterize>();)
32
33Posterize::Posterize(QObject *parent, const QVariantList &)
34 : QObject(parent)
35{
37}
38
42
49
51{
52 return new KisPosterizeColorTransformation(config->getInt("steps", 16), cs);
53}
54
70
76
78{
79 Q_UNUSED(dev);
81 param.push_back(KisIntegerWidgetParam(2, 128, 16, i18n("Steps"), "steps"));
82 return new KisMultiIntegerFilterWidget(id().id(), parent, id().id(), param);
83}
84
86{
87 KisFilterConfigurationSP config = factoryConfiguration(resourcesInterface);
88 config->setProperty("steps", 16);
89 return config;
90}
91
92void KisPosterizeColorTransformation::transform(const quint8* src, quint8* dst, qint32 nPixels) const
93{
94 quint16 m_rgba[4];
95 quint16 m_mod[4];
96
97 while (nPixels--) {
98 m_fromConversion->transform(src, reinterpret_cast<quint8 *>(m_rgba), 1);
99
100 m_mod[0] = m_rgba[0] % m_step;
101 m_mod[1] = m_rgba[1] % m_step;
102 m_mod[2] = m_rgba[2] % m_step;
103 m_mod[3] = m_rgba[3] % m_step;
104
105 m_rgba[0] = m_rgba[0] + (m_mod[0] > m_halfStep ? m_step - m_mod[0] : -m_mod[0]);
106 m_rgba[1] = m_rgba[1] + (m_mod[1] > m_halfStep ? m_step - m_mod[1] : -m_mod[1]);
107 m_rgba[2] = m_rgba[2] + (m_mod[2] > m_halfStep ? m_step - m_mod[2] : -m_mod[2]);
108 m_rgba[3] = m_rgba[3] + (m_mod[3] > m_halfStep ? m_step - m_mod[3] : -m_mod[3]);
109
110 m_toConversion->transform(reinterpret_cast<quint8 *>(m_rgba), dst, 1);
111 src += m_psize;
112 dst += m_psize;
113 }
114}
115
116#include "posterize.moc"
@ FULLY_INDEPENDENT
KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const override
KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const override
Definition posterize.cpp:77
KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const override
Definition posterize.cpp:85
KoColorTransformation * createTransformation(const KoColorSpace *cs, const KisFilterConfigurationSP config) const override
Definition posterize.cpp:50
void add(KisFilterSP item)
static KisFilterRegistry * instance()
KisPosterizeColorTransformation(int steps, const KoColorSpace *cs)
Definition posterize.cpp:55
KoColorConversionTransformation * m_toConversion
Definition posterize.h:49
void transform(const quint8 *src, quint8 *dst, qint32 nPixels) const override
Definition posterize.cpp:92
KoColorConversionTransformation * m_fromConversion
Definition posterize.h:48
~KisPosterizeColorTransformation() override
Definition posterize.cpp:71
const KoColorSpace * m_colorSpace
Definition posterize.h:44
Posterize(QObject *parent, const QVariantList &)
Definition posterize.cpp:33
~Posterize() override
Definition posterize.cpp:39
K_PLUGIN_FACTORY_WITH_JSON(KritaASCCDLFactory, "kritaasccdl.json", registerPlugin< KritaASCCDL >();) KritaASCCDL
const KoID FiltersCategoryArtisticId("artistic_filters", ki18nc("The category of artistic filters, like raindrops. Adjective.", "Artistic"))
std::vector< KisIntegerWidgetParam > vKisIntegerWidgetParam
KisSharedPtr< KisFilter > KisFilterSP
Definition kis_types.h:167
void setShowConfigurationWidget(bool v)
void setSupportsPainting(bool v)
void setColorSpaceIndependence(ColorSpaceIndependence v)
void transform(const quint8 *src, quint8 *dst, qint32 nPixels) const override=0
KoColorConversionTransformation * createColorConverter(const KoColorSpace *srcColorSpace, const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
static KoColorSpaceRegistry * instance()