25 const int srcPixelSize,
26 const int dstPixelSize,
27 PixelProcessor pixelProcessor)
30 qint32 rowsRemaining = rc.height();
32 while (rowsRemaining > 0) {
37 qint32 rows = std::min({rowsRemaining, numContiguousSrcRows, numContiguousDstRows});
39 qint32 columnsRemaining = rc.width();
41 while (columnsRemaining > 0) {
45 qint32 columns = std::min({columnsRemaining, numContiguousSrcColumns, numContiguousDstColumns});
47 qint32 dstRowStride = dstIt->
rowStride(dstX, dstY);
48 qint32 srcRowStride = srcIt->
rowStride(dstX, dstY);
53 quint8 *dstRowStart = dstIt->
rawData();
56 for (
int i = 0; i < rows; i++) {
57 const quint8 *srcPtr =
reinterpret_cast<const quint8*
>(srcRowStart);
58 quint8 *dstPtr =
reinterpret_cast<quint8*
>(dstRowStart);
60 for (
int j = 0; j < columns; j++) {
61 pixelProcessor(srcPtr, dstPtr);
63 srcPtr += srcPixelSize;
64 dstPtr += dstPixelSize;
67 srcRowStart += srcRowStride;
68 dstRowStart += dstRowStride;
72 columnsRemaining -= columns;
76 rowsRemaining -= rows;
89 PixelProcessor pixelProcessor)
92 qint32 rowsRemaining = rc.height();
94 while (rowsRemaining > 0) {
99 qint32 rows = std::min({rowsRemaining, numContiguousSrcRows, numContiguousDstRows});
101 qint32 columnsRemaining = rc.width();
103 while (columnsRemaining > 0) {
107 qint32 columns = std::min({columnsRemaining, numContiguousSrcColumns, numContiguousDstColumns});
109 qint32 dstRowStride = dstIt->
rowStride(dstX, dstY);
110 qint32 srcRowStride = srcIt->
rowStride(dstX, dstY);
112 dstIt->
moveTo(dstX, dstY);
113 srcIt->
moveTo(dstX, dstY);
115 quint8 *dstRowStart = dstIt->
rawData();
118 pixelProcessor(srcRowStart, srcRowStride,
119 dstRowStart, dstRowStride,
123 columnsRemaining -= columns;
127 rowsRemaining -= rows;
void processTwoDevices(const QRect &rc, KisRandomConstAccessorSP srcIt, KisRandomAccessorSP dstIt, const int srcPixelSize, const int dstPixelSize, PixelProcessor pixelProcessor)