26#include "ui_wdgunsharp.h"
56 config->setProperty(
"halfSize", 1);
57 config->setProperty(
"amount", 0.5);
58 config->setProperty(
"threshold", 0);
59 config->setProperty(
"lightnessOnly",
true);
64 const QRect& applyRect,
72 QScopedPointer<KoProgressUpdater> updater;
74 if (progressUpdater) {
76 updater->start(100, i18n(
"Unsharp Mask"));
78 convolutionUpdater = updater->startSubtask();
79 filterUpdater = updater->startSubtask();
88 const qreal halfSize = t.
scale(config->getProperty(
"halfSize",
value) ?
value.toDouble() : 1.0);
89 const qreal amount = (config->getProperty(
"amount",
value)) ?
value.toDouble() : 0.5;
90 const uint threshold = (config->getProperty(
"threshold",
value)) ?
value.toUInt() : 0;
91 const uint lightnessOnly = (config->getProperty(
"lightnessOnly",
value)) ?
value.toBool() :
true;
93 QBitArray channelFlags = config->channelFlags();
102 weights[0] = factor * (1. + amount);
103 weights[1] = -factor * amount;
106 processLightnessOnly(device, applyRect, threshold, weights, factor, channelFlags, filterUpdater);
108 processRaw(device, applyRect, threshold, weights, factor, channelFlags, filterUpdater);
117 const QBitArray &channelFlags,
125 colors[0] =
new quint8[pixelSize];
126 colors[1] =
new quint8[pixelSize];
132 if (threshold == 1) {
141 if (diff >= threshold) {
142 memcpy(colors[0], dstIt.
oldRawData(), pixelSize);
165 quint16 labColorSrc[4];
166 quint16 labColorDst[4];
169 const int posAlpha = 3;
171 const qreal factorInv = 1.0 / factor;
177 if (diff >= threshold) {
181 qint32 valueL = (labColorSrc[posL] * weights[0] + labColorDst[posL] * weights[1]) * factorInv;
182 labColorSrc[posL] =
CLAMP(valueL,
186 qint32 valueAlpha = (labColorSrc[posAlpha] * weights[0] + labColorDst[posAlpha] * weights[1]) * factorInv;
187 labColorSrc[posAlpha] =
CLAMP(valueAlpha,
203 const qreal halfSize = t.
scale(config->getProperty(
"halfSize",
value) ?
value.toDouble() : 1.0);
205 return rect.adjusted(-halfSize * 2, -halfSize * 2, halfSize * 2, halfSize * 2);
213 const qreal halfSize = t.
scale(config->getProperty(
"halfSize",
value) ?
value.toDouble() : 1.0);
215 return rect.adjusted( -halfSize, -halfSize, halfSize, halfSize);
float value(const T *src, size_t ch)
void setSupportsLevelOfDetail(bool value)
static void applyGaussian(KisPaintDeviceSP device, const QRect &rect, qreal xRadius, qreal yRadius, const QBitArray &channelFlags, KoUpdater *updater, bool createTransaction=false, KisConvolutionBorderOp borderOp=BORDER_REPEAT)
const KoColorSpace * colorSpace() const
ALWAYS_INLINE quint8 * rawData()
ALWAYS_INLINE const quint8 * oldRawData() const
ALWAYS_INLINE const quint8 * rawDataConst() const
KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const override
KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const override
void processRaw(KisPaintDeviceSP device, const QRect &rect, quint8 threshold, qreal weights[2], qreal factor, const QBitArray &channelFlags, KoUpdater *progressUpdater) const
void processImpl(KisPaintDeviceSP device, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const override
QRect neededRect(const QRect &rect, const KisFilterConfigurationSP _config, int lod) const override
QRect changedRect(const QRect &rect, const KisFilterConfigurationSP _config, int lod) const override
void processLightnessOnly(KisPaintDeviceSP device, const QRect &rect, quint8 threshold, qreal weights[2], qreal factor, const QBitArray &channelFlags, KoUpdater *progressUpdater) const
virtual quint32 pixelSize() const =0
virtual quint8 difference(const quint8 *src1, const quint8 *src2) const =0
KoConvolutionOp * convolutionOp
virtual void toLabA16(const quint8 *src, quint8 *dst, quint32 nPixels) const
virtual void fromLabA16(const quint8 *src, quint8 *dst, quint32 nPixels) const
virtual quint8 differenceA(const quint8 *src1, const quint8 *src2) const =0
virtual void convolveColors(const quint8 *const *colors, const qreal *kernelValues, quint8 *dst, qreal factor, qreal offset, qint32 nColors, const QBitArray &channelFlags) const =0
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
const KoID FiltersCategoryEnhanceId("enhance_filters", ki18nc("The category of enhancement filters, like sharpen. Verb.", "Enhance"))
void setSupportsThreading(bool v)
virtual KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const
void setSupportsAdjustmentLayers(bool v)
void setSupportsPainting(bool v)
void setColorSpaceIndependence(ColorSpaceIndependence v)