diff --git a/plugins/filters/posterize/posterize.h b/plugins/filters/posterize/posterize.h --- a/plugins/filters/posterize/posterize.h +++ b/plugins/filters/posterize/posterize.h @@ -50,12 +50,15 @@ { public: KisPosterizeColorTransformation(int steps, const KoColorSpace* cs); + ~KisPosterizeColorTransformation() override; void transform(const quint8* src, quint8* dst, qint32 nPixels) const override; private: const KoColorSpace* m_colorSpace; quint32 m_psize; quint16 m_step; quint16 m_halfStep; + KoColorConversionTransformation* m_fromConversion; + KoColorConversionTransformation* m_toConversion; }; #endif diff --git a/plugins/filters/posterize/posterize.cpp b/plugins/filters/posterize/posterize.cpp --- a/plugins/filters/posterize/posterize.cpp +++ b/plugins/filters/posterize/posterize.cpp @@ -68,6 +68,22 @@ { m_step = KoColorSpaceMathsTraits::max / steps; m_halfStep = m_step / 2; + m_fromConversion = KoColorSpaceRegistry::instance()->createColorConverter( + m_colorSpace, + KoColorSpaceRegistry::instance()->rgb16("sRGB-elle-V2-srgbtrc.icc"), + KoColorConversionTransformation::internalRenderingIntent(), + KoColorConversionTransformation::internalConversionFlags()); + m_toConversion = KoColorSpaceRegistry::instance()->createColorConverter( + KoColorSpaceRegistry::instance()->rgb16("sRGB-elle-V2-srgbtrc.icc"), + m_colorSpace, + KoColorConversionTransformation::internalRenderingIntent(), + KoColorConversionTransformation::internalConversionFlags()); +} + +KisPosterizeColorTransformation::~KisPosterizeColorTransformation() +{ + delete m_fromConversion; + delete m_toConversion; } KisConfigWidget* KisFilterPosterize::createConfigurationWidget(QWidget* parent, const KisPaintDeviceSP dev, bool) const @@ -89,20 +105,9 @@ { quint16 m_rgba[4]; quint16 m_mod[4]; - KoColorConversionTransformation* t = - KoColorSpaceRegistry::instance()->createColorConverter(m_colorSpace, - KoColorSpaceRegistry::instance()->rgb16("sRGB-elle-V2-srgbtrc.icc"), - KoColorConversionTransformation::internalRenderingIntent(), - KoColorConversionTransformation::internalConversionFlags()); - KoColorConversionTransformation* b = - KoColorSpaceRegistry::instance()->createColorConverter( - KoColorSpaceRegistry::instance()->rgb16("sRGB-elle-V2-srgbtrc.icc"), - m_colorSpace, - KoColorConversionTransformation::internalRenderingIntent(), - KoColorConversionTransformation::internalConversionFlags()); while (nPixels--) { - t->transform(src, reinterpret_cast(m_rgba), 1); + m_fromConversion->transform(src, reinterpret_cast(m_rgba), 1); m_mod[0] = m_rgba[0] % m_step; m_mod[1] = m_rgba[1] % m_step; @@ -114,7 +119,7 @@ m_rgba[2] = m_rgba[2] + (m_mod[2] > m_halfStep ? m_step - m_mod[2] : -m_mod[2]); m_rgba[3] = m_rgba[3] + (m_mod[3] > m_halfStep ? m_step - m_mod[3] : -m_mod[3]); - b->transform(reinterpret_cast(m_rgba), dst, 1); + m_toConversion->transform(reinterpret_cast(m_rgba), dst, 1); src += m_psize; dst += m_psize; }