17 return 2 * ceil(radius) + 1;
20Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic>
24 Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic> matrix(1, kernelSize);
31 const int center = kernelSize / 2;
33 for (
int x = 0; x < kernelSize; x++) {
34 if (x == 0 || x == kernelSize - 1)
45Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic>
49 Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic> matrix(kernelSize, 1);
57 const int center = kernelSize / 2;
59 for (
int y = 0; y < kernelSize; y++) {
60 if (y == 0 || y == kernelSize - 1)
87 qreal xRadius, qreal yRadius,
88 const QBitArray &channelFlags,
91 QPoint srcTopLeft =
rect.topLeft();
93 if (xRadius > 0.0 && yRadius > 0.0) {
100 qreal verticalCenter = qreal(kernelVertical->
height()) / 2.0;
106 srcTopLeft - QPoint(0, ceil(verticalCenter)),
107 srcTopLeft - QPoint(0, ceil(verticalCenter)),
115 }
else if (xRadius > 0.0) {
123 }
else if (yRadius > 0.0) {
The KisConvolutionPainter class applies a convolution kernel to a paint device.
void applyMatrix(const KisConvolutionKernelSP kernel, const KisPaintDeviceSP src, QPoint srcPos, QPoint dstPos, QSize areaSize, KisConvolutionBorderOp borderOp=BORDER_REPEAT)
const KoColorSpace * colorSpace() const
void prepareClone(KisPaintDeviceSP src)
void setProgress(KoUpdater *progressUpdater)
void setChannelFlags(QBitArray channelFlags)
static int kernelSizeFromRadius(qreal radius)
static KisConvolutionKernelSP createHorizontalKernel(qreal radius)
static KisConvolutionKernelSP createVerticalKernel(qreal radius)
static Eigen::Matrix< qreal, Eigen::Dynamic, Eigen::Dynamic > createHorizontalMatrix(qreal radius)
static void applyWavelet(KisPaintDeviceSP device, const QRect &rect, qreal xRadius, qreal yRadius, const QBitArray &channelFlags, KoUpdater *updater)
static Eigen::Matrix< qreal, Eigen::Dynamic, Eigen::Dynamic > createVerticalMatrix(qreal radius)
#define KIS_ASSERT_RECOVER_NOOP(cond)
static KisConvolutionKernelSP fromMatrix(Eigen::Matrix< qreal, Eigen::Dynamic, Eigen::Dynamic > matrix, qreal offset, qreal factor)