Krita Source Code Documentation
Loading...
Searching...
No Matches
KisRandomSubAccessor Class Reference

#include <kis_random_sub_accessor.h>

+ Inheritance diagram for KisRandomSubAccessor:

Public Member Functions

 KisRandomSubAccessor (KisPaintDeviceSP device)
 
void moveTo (const QPointF &p)
 
void moveTo (qreal x, qreal y)
 
void sampledOldRawData (quint8 *dst)
 
void sampledRawData (quint8 *dst)
 
 ~KisRandomSubAccessor ()
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Private Attributes

QPointF m_currentPoint
 
KisPaintDeviceSP m_device
 
KisRandomConstAccessorSP m_randomAccessor
 

Additional Inherited Members

- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

Gives a random access to the sampled subpixels of an image. Use the moveTo function to select the pixel. And then rawData to access the value of a pixel.

Definition at line 23 of file kis_random_sub_accessor.h.

Constructor & Destructor Documentation

◆ KisRandomSubAccessor()

KisRandomSubAccessor::KisRandomSubAccessor ( KisPaintDeviceSP device)

Definition at line 18 of file kis_random_sub_accessor.cpp.

19 : m_device(device)
20 , m_currentPoint(0, 0)
22{
23}
KisRandomConstAccessorSP createRandomConstAccessorNG() const
KisRandomConstAccessorSP m_randomAccessor

◆ ~KisRandomSubAccessor()

KisRandomSubAccessor::~KisRandomSubAccessor ( )

Definition at line 26 of file kis_random_sub_accessor.cpp.

27{
28}

Member Function Documentation

◆ moveTo() [1/2]

void KisRandomSubAccessor::moveTo ( const QPointF & p)
inline

Definition at line 41 of file kis_random_sub_accessor.h.

41 {
43 }
const Params2D p

References p.

◆ moveTo() [2/2]

void KisRandomSubAccessor::moveTo ( qreal x,
qreal y )
inline

Definition at line 38 of file kis_random_sub_accessor.h.

38 {
39 m_currentPoint.setX(x); m_currentPoint.setY(y);
40 }

◆ sampledOldRawData()

void KisRandomSubAccessor::sampledOldRawData ( quint8 * dst)

Copy the sampled old value to destination

Definition at line 31 of file kis_random_sub_accessor.cpp.

32{
33 const quint8* pixels[4];
34 qint16 weights[4];
35 int x = qFloor(m_currentPoint.x());
36 int y = qFloor(m_currentPoint.y());
37
38 double hsub = m_currentPoint.x() - x;
39 if (hsub < 0.0) {
40 hsub = 1.0 + hsub;
41 }
42 double vsub = m_currentPoint.y() - y;
43 if (vsub < 0.0) {
44 vsub = 1.0 + vsub;
45 }
46
47 int sumOfWeights = 0;
48
49 weights[0] = qRound((1.0 - hsub) * (1.0 - vsub) * 255);
50 sumOfWeights += weights[0];
52 pixels[0] = m_randomAccessor->oldRawData();
53 weights[1] = qRound((1.0 - vsub) * hsub * 255);
54 sumOfWeights += weights[1];
55 m_randomAccessor->moveTo(x + 1, y);
56 pixels[1] = m_randomAccessor->oldRawData();
57 weights[2] = qRound(vsub * (1.0 - hsub) * 255);
58 sumOfWeights += weights[2];
59 m_randomAccessor->moveTo(x, y + 1);
60 pixels[2] = m_randomAccessor->oldRawData();
61 weights[3] = qRound(hsub * vsub * 255);
62 sumOfWeights += weights[3];
63 m_randomAccessor->moveTo(x + 1, y + 1);
64 pixels[3] = m_randomAccessor->oldRawData();
65
66 m_device->colorSpace()->mixColorsOp()->mixColors(pixels, weights, 4, dst, sumOfWeights);
67}
virtual const quint8 * oldRawData() const =0
const KoColorSpace * colorSpace() const
virtual void moveTo(qint32 x, qint32 y)=0
KoMixColorsOp * mixColorsOp
virtual void mixColors(const quint8 *const *colors, const qint16 *weights, int nColors, quint8 *dst, int weightSum=255) const =0

References KisPaintDevice::colorSpace(), m_currentPoint, m_device, m_randomAccessor, KoMixColorsOp::mixColors(), KoColorSpace::mixColorsOp, KisRandomConstAccessorNG::moveTo(), and KisBaseConstAccessor::oldRawData().

◆ sampledRawData()

void KisRandomSubAccessor::sampledRawData ( quint8 * dst)

Copy the sampled value to destination

Definition at line 70 of file kis_random_sub_accessor.cpp.

71{
72 const quint8* pixels[4];
73 qint16 weights[4];
74 int x = qFloor(m_currentPoint.x());
75 int y = qFloor(m_currentPoint.y());
76
77 double hsub = m_currentPoint.x() - x;
78 if (hsub < 0.0) {
79 hsub = 1.0 + hsub;
80 }
81 double vsub = m_currentPoint.y() - y;
82 if (vsub < 0.0) {
83 vsub = 1.0 + vsub;
84 }
85
86 int sumOfWeights = 0;
87
88 weights[0] = qRound((1.0 - hsub) * (1.0 - vsub) * 255);
89 sumOfWeights += weights[0];
91 pixels[0] = m_randomAccessor->rawDataConst();
92 weights[1] = qRound((1.0 - vsub) * hsub * 255);
93 sumOfWeights += weights[1];
94 m_randomAccessor->moveTo(x + 1, y);
95 pixels[1] = m_randomAccessor->rawDataConst();
96 weights[2] = qRound(vsub * (1.0 - hsub) * 255);
97 sumOfWeights += weights[2];
98 m_randomAccessor->moveTo(x, y + 1);
99 pixels[2] = m_randomAccessor->rawDataConst();
100 weights[3] = qRound(hsub * vsub * 255);
101 sumOfWeights += weights[3];
102 m_randomAccessor->moveTo(x + 1, y + 1);
103 pixels[3] = m_randomAccessor->rawDataConst();
104 m_device->colorSpace()->mixColorsOp()->mixColors(pixels, weights, 4, dst, sumOfWeights);
105}
virtual const quint8 * rawDataConst() const =0

References KisPaintDevice::colorSpace(), m_currentPoint, m_device, m_randomAccessor, KoMixColorsOp::mixColors(), KoColorSpace::mixColorsOp, KisRandomConstAccessorNG::moveTo(), and KisBaseConstAccessor::rawDataConst().

Member Data Documentation

◆ m_currentPoint

QPointF KisRandomSubAccessor::m_currentPoint
private

Definition at line 47 of file kis_random_sub_accessor.h.

◆ m_device

KisPaintDeviceSP KisRandomSubAccessor::m_device
private

Definition at line 46 of file kis_random_sub_accessor.h.

◆ m_randomAccessor

KisRandomConstAccessorSP KisRandomSubAccessor::m_randomAccessor
private

Definition at line 48 of file kis_random_sub_accessor.h.


The documentation for this class was generated from the following files: