65{
68
71
72 const QRect dataRect =
kisGrowRect(selectionRect, 1);
73
74 const int dataRowSize = dataRect.width() * sizeof(quint8);
75 const int selectionRowSize = selectionRect.width() * sizeof(quint8);
76 QScopedArrayPointer<quint8> dstRow(new quint8[selectionRowSize]);
77
78 QScopedArrayPointer<quint8> bmRow1(new quint8[dataRowSize]);
79 QScopedArrayPointer<quint8> bmRow2(new quint8[dataRowSize]);
80 QScopedArrayPointer<quint8> bmRow3(new quint8[dataRowSize]);
81
82 device->
readBytes(bmRow1.data(), dataRect.left(), dataRect.top(), dataRect.width(), 1);
83 device->
readBytes(bmRow2.data(), dataRect.left(), dataRect.top() + 1, dataRect.width(), 1);
84 device->
readBytes(bmRow3.data(), dataRect.left(), dataRect.top() + 2, dataRect.width(), 1);
85
89
90 for (int row = selectionRect.top();
91 row < selectionRect.top() + selectionRect.height(); row++) {
92
93 bumpmap_row (bmvals, dstRow.data(), selectionRect.width(),
94 bmRow1.data() + 1, bmRow2.data() + 1, bmRow3.data() + 1,
95 ¶ms);
96
97 device->
writeBytes(dstRow.data(), selectionRect.left(), row, selectionRect.width(), 1);
98
99 bmRow1.swap(bmRow2);
100 bmRow2.swap(bmRow3);
101
102 device->
readBytes(bmRow3.data(), dataRect.left(), row + 1, dataRect.width(), 1);
104 }
105}
void readBytes(quint8 *data, qint32 x, qint32 y, qint32 w, qint32 h) const
void writeBytes(const quint8 *data, qint32 x, qint32 y, qint32 w, qint32 h)
void bumpmap_init_params(bumpmap_params_t *params, const bumpmap_vals_t &bmvals)
void bumpmap_row(const bumpmap_vals_t &bmvals, guchar *dest, gint width, const guchar *bm_row1, const guchar *bm_row2, const guchar *bm_row3, bumpmap_params_t *params)
void convertRow(quint8 *data, int width, const quint8 *lut)
#define KIS_ASSERT_RECOVER_RETURN(cond)
T kisGrowRect(const T &rect, U offset)