122 QPoint srcTopLeft =
rect.topLeft();
124 Q_ASSERT(device != 0);
127 QBitArray channelFlags = config->channelFlags();
128 if (channelFlags.isEmpty()) {
134 if (transformedIris.isEmpty())
return;
136 QRectF boundingRect = transformedIris.boundingRect();
138 int kernelWidth = boundingRect.toAlignedRect().width();
139 int kernelHeight = boundingRect.toAlignedRect().height();
141 QImage kernelRepresentation(kernelWidth, kernelHeight, QImage::Format_RGB32);
142 kernelRepresentation.fill(0);
144 QPainter imagePainter(&kernelRepresentation);
145 imagePainter.setRenderHint(QPainter::Antialiasing);
146 imagePainter.setBrush(QColor::fromRgb(255, 255, 255));
148 QTransform offsetTransform;
149 offsetTransform.translate(-boundingRect.x(), -boundingRect.y());
150 imagePainter.setTransform(offsetTransform);
151 imagePainter.drawPolygon(transformedIris, Qt::WindingFill);
154 Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic> irisKernel(kernelHeight, kernelWidth);
155 for (
int j = 0; j < kernelHeight; ++j) {
156 for (
int i = 0; i < kernelWidth; ++i) {
157 irisKernel(j, i) = qRed(kernelRepresentation.pixel(i, j));
void applyMatrix(const KisConvolutionKernelSP kernel, const KisPaintDeviceSP src, QPoint srcPos, QPoint dstPos, QSize areaSize, KisConvolutionBorderOp borderOp=BORDER_REPEAT)