27
27
#include "kis_paint_device.h"
29
KisRandomSubAccessor::KisRandomSubAccessor(const KisPaintDeviceSP device)
29
KisRandomSubAccessor::KisRandomSubAccessor(KisPaintDeviceSP device)
31
31
, m_currentPoint(0, 0)
32
, m_randomAccessor(device->createRandomConstAccessorNG(0, 0))
32
, m_randomAccessor(device->createRandomAccessorNG(0, 0))
63
63
pixels[3] = m_randomAccessor->oldRawData();
64
64
m_device->colorSpace()->mixColorsOp()->mixColors(pixels, weights, 4, dst);
68
void KisRandomSubAccessor::sampledRawData(quint8* dst)
70
const quint8* pixels[4];
72
int x = (int)floor(m_currentPoint.x());
73
int y = (int)floor(m_currentPoint.y());
74
double hsub = m_currentPoint.x() - x;
75
if (hsub < 0.0) hsub = 1.0 + hsub;
76
double vsub = m_currentPoint.y() - y;
77
if (vsub < 0.0) vsub = 1.0 + vsub;
78
weights[0] = (int)round((1.0 - hsub) * (1.0 - vsub) * 255);
79
m_randomAccessor->moveTo(x, y);
80
pixels[0] = m_randomAccessor->rawData();
81
weights[1] = (int)round((1.0 - vsub) * hsub * 255);
82
m_randomAccessor->moveTo(x + 1, y);
83
pixels[1] = m_randomAccessor->rawData();
84
weights[2] = (int)round(vsub * (1.0 - hsub) * 255);
85
m_randomAccessor->moveTo(x, y + 1);
86
pixels[2] = m_randomAccessor->rawData();
87
weights[3] = (int)round(hsub * vsub * 255);
88
m_randomAccessor->moveTo(x + 1, y + 1);
89
pixels[3] = m_randomAccessor->rawData();
90
m_device->colorSpace()->mixColorsOp()->mixColors(pixels, weights, 4, dst);