7#ifndef __KIS_LAZY_FILL_CAPACITY_MAP_H
8#define __KIS_LAZY_FILL_CAPACITY_MAP_H
24 typedef typename boost::graph_traits<KisLazyFillGraph>::vertex_descriptor
VertexDescriptor;
25 typedef typename boost::graph_traits<KisLazyFillGraph>::edge_descriptor
EdgeDescriptor;
31 typedef boost::readable_property_map_tag
category;
37 const QRect &boundingRect)
73 if (src.type == VertexDescriptor::NORMAL) {
80 if (dst.type == VertexDescriptor::NORMAL) {
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;
92 if (srcLabelA || srcLabelB) {
94 std::swap(srcLabelA, dstLabelA);
95 std::swap(srcLabelB, dstLabelB);
98 Q_ASSERT(!srcLabelA && !srcLabelB);
104 static const int unitValue = 256;
111 value = i0 / 255.0 * k;
113 }
else if (dstLabelB) {
116 value = i0 / 255.0 * k;
130 const quint8 diff = qAbs(i1 - i0);
132 const qreal diffPenalty = qBound(0.0, qreal(diff) / 10.0, 1.0);
133 const qreal intensityPenalty = 1.0 - i1 / 255.0;
135 const qreal totalPenalty = qMax(0.0 * diffPenalty, intensityPenalty);
137 value = 1.0 + k * (1.0 -
pow2(totalPenalty));
140 return value * unitValue;
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)
virtual const quint8 * rawDataConst() const =0
const KoColorSpace * m_colorSpace
KisLazyFillCapacityMap(KisPaintDeviceSP mainImage, KisPaintDeviceSP aLabelImage, KisPaintDeviceSP bLabelImage, KisPaintDeviceSP maskImage, const QRect &boundingRect)
KisRandomConstAccessorSP m_mainAccessor
boost::readable_property_map_tag category
KisRandomConstAccessorSP m_maskAccessor
KisRandomConstAccessorSP m_bAccessor
KisPaintDeviceSP m_aLabelImage
friend value_type get(type &map, const key_type &key)
KisRandomConstAccessorSP m_aAccessor
KisLazyFillGraph & graph()
KisPaintDeviceSP m_mainImage
KisLazyFillCapacityMap type
KisPaintDeviceSP m_maskImage
boost::graph_traits< KisLazyFillGraph >::vertex_descriptor VertexDescriptor
KisPaintDeviceSP m_bLabelImage
boost::graph_traits< KisLazyFillGraph >::edge_descriptor EdgeDescriptor
KisRandomConstAccessorSP createRandomConstAccessorNG() const
const KoColorSpace * colorSpace() const
virtual void moveTo(qint32 x, qint32 y)=0
virtual quint32 pixelSize() const =0
#define KIS_ASSERT_RECOVER_NOOP(cond)