55 const QRect& applyRect,
63 const int pixelWidth = qCeil(t.
scale(config ? qMax(1, config->getInt(
"pixelWidth", 10)) : 10));
64 const int pixelHeight = qCeil(t.
scale(config ? qMax(1, config->getInt(
"pixelHeight", 10)) : 10));
66 const qint32 pixelSize = device->
pixelSize();
70 const int bufferSize = pixelSize * pixelWidth * pixelHeight;
71 QScopedArrayPointer<quint8> buffer(
new quint8[bufferSize]);
77 const qint32 firstCol = divideFloor(applyRect.x(), pixelWidth);
78 const qint32 firstRow = divideFloor(applyRect.y(), pixelHeight);
80 const qint32 lastCol = divideFloor(applyRect.x() + applyRect.width() - 1, pixelWidth);
81 const qint32 lastRow = divideFloor(applyRect.y() + applyRect.height() - 1, pixelHeight);
83 progressUpdater->
setRange(firstRow, lastRow);
85 for(qint32 i = firstRow; i <= lastRow; i++) {
86 for(qint32 j = firstCol; j <= lastCol; j++) {
87 const QRect maxPatchRect(j * pixelWidth, i * pixelHeight,
88 pixelWidth, pixelHeight);
89 const QRect pixelRect = maxPatchRect & deviceBounds;
90 const int numColors = pixelRect.width() * pixelRect.height();
96 memset(buffer.data(), 0, bufferSize);
97 quint8 *bufferPtr = buffer.data();
100 memcpy(bufferPtr, srcIt.
oldRawData(), pixelSize);
101 bufferPtr += pixelSize;
105 mixOp->
mixColors(buffer.data(), numColors, pixelColor.
data());
108 const QRect writeRect = pixelRect & applyRect;
112 memcpy(dstIt.
rawData(), pixelColor.
data(), pixelSize);
virtual void mixColors(const quint8 *const *colors, const qint16 *weights, int nColors, quint8 *dst, int weightSum=255) const =0