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

#include <kis_lazy_fill_capacity_map.h>

Public Types

typedef boost::readable_property_map_tag category
 
typedef EdgeDescriptor key_type
 
typedef const int & reference
 
typedef int value_type
 

Public Member Functions

KisLazyFillGraphgraph ()
 
 KisLazyFillCapacityMap (KisPaintDeviceSP mainImage, KisPaintDeviceSP aLabelImage, KisPaintDeviceSP bLabelImage, KisPaintDeviceSP maskImage, const QRect &boundingRect)
 
int maxCapacity () const
 

Private Types

typedef boost::graph_traits< KisLazyFillGraph >::edge_descriptor EdgeDescriptor
 
typedef KisLazyFillCapacityMap type
 
typedef boost::graph_traits< KisLazyFillGraph >::vertex_descriptor VertexDescriptor
 

Private Attributes

KisRandomConstAccessorSP m_aAccessor
 
KisPaintDeviceSP m_aLabelImage
 
QRect m_aLabelRect
 
KisRandomConstAccessorSP m_bAccessor
 
KisPaintDeviceSP m_bLabelImage
 
QRect m_bLabelRect
 
const KoColorSpacem_colorSpace
 
KisLazyFillGraph m_graph
 
KisRandomConstAccessorSP m_mainAccessor
 
KisPaintDeviceSP m_mainImage
 
QRect m_mainRect
 
KisRandomConstAccessorSP m_maskAccessor
 
KisPaintDeviceSP m_maskImage
 
int m_pixelSize
 
QByteArray m_srcPixelBuf
 

Friends

value_type get (type &map, const key_type &key)
 

Detailed Description

Definition at line 21 of file kis_lazy_fill_capacity_map.h.

Member Typedef Documentation

◆ category

typedef boost::readable_property_map_tag KisLazyFillCapacityMap::category

Definition at line 31 of file kis_lazy_fill_capacity_map.h.

◆ EdgeDescriptor

typedef boost::graph_traits<KisLazyFillGraph>::edge_descriptor KisLazyFillCapacityMap::EdgeDescriptor
private

Definition at line 25 of file kis_lazy_fill_capacity_map.h.

◆ key_type

◆ reference

Definition at line 30 of file kis_lazy_fill_capacity_map.h.

◆ type

◆ value_type

Definition at line 29 of file kis_lazy_fill_capacity_map.h.

◆ VertexDescriptor

typedef boost::graph_traits<KisLazyFillGraph>::vertex_descriptor KisLazyFillCapacityMap::VertexDescriptor
private

Definition at line 24 of file kis_lazy_fill_capacity_map.h.

Constructor & Destructor Documentation

◆ KisLazyFillCapacityMap()

KisLazyFillCapacityMap::KisLazyFillCapacityMap ( KisPaintDeviceSP mainImage,
KisPaintDeviceSP aLabelImage,
KisPaintDeviceSP bLabelImage,
KisPaintDeviceSP maskImage,
const QRect & boundingRect )
inline

Definition at line 33 of file kis_lazy_fill_capacity_map.h.

38 : m_mainImage(mainImage),
39 m_aLabelImage(aLabelImage),
40 m_bLabelImage(bLabelImage),
41 m_maskImage(maskImage),
42 m_mainRect(boundingRect),
43 m_aLabelRect(m_aLabelImage->exactBounds() & boundingRect),
44 m_bLabelRect(m_bLabelImage->exactBounds() & boundingRect),
45 m_colorSpace(mainImage->colorSpace()),
48 m_aLabelImage->regionExact() & boundingRect,
49 m_bLabelImage->regionExact() & boundingRect)
50 {
54
60 }
KisRandomConstAccessorSP m_mainAccessor
KisRandomConstAccessorSP m_maskAccessor
KisRandomConstAccessorSP m_bAccessor
KisRandomConstAccessorSP m_aAccessor
KisRandomConstAccessorSP createRandomConstAccessorNG() const
QRect exactBounds() const
KisRegion regionExact() const
const KoColorSpace * colorSpace() const
virtual quint32 pixelSize() const =0
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97

References KisPaintDevice::colorSpace(), KisPaintDevice::createRandomConstAccessorNG(), KIS_ASSERT_RECOVER_NOOP, m_aAccessor, m_aLabelImage, m_bAccessor, m_bLabelImage, m_mainAccessor, m_mainImage, m_maskAccessor, m_maskImage, m_pixelSize, m_srcPixelBuf, and KoColorSpace::pixelSize().

Member Function Documentation

◆ graph()

KisLazyFillGraph & KisLazyFillCapacityMap::graph ( )
inline

Definition at line 143 of file kis_lazy_fill_capacity_map.h.

143 {
144 return m_graph;
145 }

References m_graph.

◆ maxCapacity()

int KisLazyFillCapacityMap::maxCapacity ( ) const
inline

Definition at line 62 of file kis_lazy_fill_capacity_map.h.

62 {
63 const int k = 2 * (m_mainRect.width() + m_mainRect.height());
64 return k + 1;
65 }

References m_mainRect.

Friends And Related Symbol Documentation

◆ get

value_type get ( type & map,
const key_type & key )
friend

Definition at line 67 of file kis_lazy_fill_capacity_map.h.

69 {
70 VertexDescriptor src = source(key, map.m_graph);
71 VertexDescriptor dst = target(key, map.m_graph);
72
73 if (src.type == VertexDescriptor::NORMAL) {
74 map.m_maskAccessor->moveTo(src.x, src.y);
75 if (*map.m_maskAccessor->rawDataConst()) {
76 return 0;
77 }
78 }
79
80 if (dst.type == VertexDescriptor::NORMAL) {
81 map.m_maskAccessor->moveTo(dst.x, dst.y);
82 if (*map.m_maskAccessor->rawDataConst()) {
83 return 0;
84 }
85 }
86
87 bool srcLabelA = src.type == VertexDescriptor::LABEL_A;
88 bool srcLabelB = src.type == VertexDescriptor::LABEL_B;
89 bool dstLabelA = dst.type == VertexDescriptor::LABEL_A;
90 bool dstLabelB = dst.type == VertexDescriptor::LABEL_B;
91
92 if (srcLabelA || srcLabelB) {
93 std::swap(src, dst);
94 std::swap(srcLabelA, dstLabelA);
95 std::swap(srcLabelB, dstLabelB);
96 }
97
98 Q_ASSERT(!srcLabelA && !srcLabelB);
99
100
101 // TODO: precalculate!
102 const int k = 2 * (map.m_mainRect.width() + map.m_mainRect.height());
103
104 static const int unitValue = 256;
105
106 qreal value = 0.0;
107
108 if (dstLabelA) {
109 map.m_aAccessor->moveTo(src.x, src.y);
110 const int i0 = *((quint8*)map.m_aAccessor->rawDataConst());
111 value = i0 / 255.0 * k;
112
113 } else if (dstLabelB) {
114 map.m_bAccessor->moveTo(src.x, src.y);
115 const int i0 = *((quint8*)map.m_bAccessor->rawDataConst());
116 value = i0 / 255.0 * k;
117
118 } else {
119 map.m_mainAccessor->moveTo(src.x, src.y);
120 memcpy(map.m_srcPixelBuf.data(), map.m_mainAccessor->rawDataConst(), map.m_pixelSize);
121 map.m_mainAccessor->moveTo(dst.x, dst.y);
122
123 //const quint8 diff = map.m_colorSpace->differenceA((quint8*)map.m_srcPixelBuf.data(), map.m_mainAccessor->rawDataConst());
124 //const quint8 i0 = map.m_colorSpace->intensity8((quint8*)map.m_srcPixelBuf.data());
125 //const quint8 i1 = map.m_colorSpace->intensity8(map.m_mainAccessor->rawDataConst());
126
127 const quint8 i0 = *((quint8*)map.m_srcPixelBuf.data());
128 const quint8 i1 = *map.m_mainAccessor->rawDataConst();
129
130 const quint8 diff = qAbs(i1 - i0);
131
132 const qreal diffPenalty = qBound(0.0, qreal(diff) / 10.0, 1.0);
133 const qreal intensityPenalty = 1.0 - i1 / 255.0;
134
135 const qreal totalPenalty = qMax(0.0 * diffPenalty, intensityPenalty);
136
137 value = 1.0 + k * (1.0 - pow2(totalPenalty));
138 }
139
140 return value * unitValue;
141 }
float value(const T *src, size_t ch)
KisMagneticGraph::vertex_descriptor target(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
T pow2(const T &x)
Definition kis_global.h:166

Member Data Documentation

◆ m_aAccessor

KisRandomConstAccessorSP KisLazyFillCapacityMap::m_aAccessor
private

Definition at line 160 of file kis_lazy_fill_capacity_map.h.

◆ m_aLabelImage

KisPaintDeviceSP KisLazyFillCapacityMap::m_aLabelImage
private

Definition at line 149 of file kis_lazy_fill_capacity_map.h.

◆ m_aLabelRect

QRect KisLazyFillCapacityMap::m_aLabelRect
private

Definition at line 154 of file kis_lazy_fill_capacity_map.h.

◆ m_bAccessor

KisRandomConstAccessorSP KisLazyFillCapacityMap::m_bAccessor
private

Definition at line 161 of file kis_lazy_fill_capacity_map.h.

◆ m_bLabelImage

KisPaintDeviceSP KisLazyFillCapacityMap::m_bLabelImage
private

Definition at line 150 of file kis_lazy_fill_capacity_map.h.

◆ m_bLabelRect

QRect KisLazyFillCapacityMap::m_bLabelRect
private

Definition at line 155 of file kis_lazy_fill_capacity_map.h.

◆ m_colorSpace

const KoColorSpace* KisLazyFillCapacityMap::m_colorSpace
private

Definition at line 157 of file kis_lazy_fill_capacity_map.h.

◆ m_graph

KisLazyFillGraph KisLazyFillCapacityMap::m_graph
private

Definition at line 165 of file kis_lazy_fill_capacity_map.h.

◆ m_mainAccessor

KisRandomConstAccessorSP KisLazyFillCapacityMap::m_mainAccessor
private

Definition at line 159 of file kis_lazy_fill_capacity_map.h.

◆ m_mainImage

KisPaintDeviceSP KisLazyFillCapacityMap::m_mainImage
private

Definition at line 148 of file kis_lazy_fill_capacity_map.h.

◆ m_mainRect

QRect KisLazyFillCapacityMap::m_mainRect
private

Definition at line 153 of file kis_lazy_fill_capacity_map.h.

◆ m_maskAccessor

KisRandomConstAccessorSP KisLazyFillCapacityMap::m_maskAccessor
private

Definition at line 162 of file kis_lazy_fill_capacity_map.h.

◆ m_maskImage

KisPaintDeviceSP KisLazyFillCapacityMap::m_maskImage
private

Definition at line 151 of file kis_lazy_fill_capacity_map.h.

◆ m_pixelSize

int KisLazyFillCapacityMap::m_pixelSize
private

Definition at line 158 of file kis_lazy_fill_capacity_map.h.

◆ m_srcPixelBuf

QByteArray KisLazyFillCapacityMap::m_srcPixelBuf
private

Definition at line 163 of file kis_lazy_fill_capacity_map.h.


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