37 #ifndef VIGRA_INITIMAGE_HXX
38 #define VIGRA_INITIMAGE_HXX
40 #include "utilities.hxx"
41 #include "iteratortraits.hxx"
42 #include "functortraits.hxx"
58 template <
class DestIterator,
class DestAccessor,
class VALUETYPE>
60 initLineImpl(DestIterator d, DestIterator dend, DestAccessor dest,
61 VALUETYPE
const & v, VigraFalseType)
67 template <
class DestIterator,
class DestAccessor,
class FUNCTOR>
69 initLineImpl(DestIterator d, DestIterator dend, DestAccessor dest,
70 FUNCTOR
const & f, VigraTrueType)
76 template <
class DestIterator,
class DestAccessor,
class VALUETYPE>
78 initLine(DestIterator d, DestIterator dend, DestAccessor dest,
81 initLineImpl(d, dend, dest, v,
typename FunctorTraits<VALUETYPE>::isInitializer());
84 template <
class DestIterator,
class DestAccessor,
class FUNCTOR>
86 initLineFunctor(DestIterator d, DestIterator dend, DestAccessor dest,
93 template <
class DestIterator,
class DestAccessor,
94 class MaskIterator,
class MaskAccessor,
97 initLineIfImpl(DestIterator d, DestIterator dend, DestAccessor dest,
98 MaskIterator m, MaskAccessor mask,
99 VALUETYPE
const & v, VigraFalseType)
101 for(; d != dend; ++d, ++m)
106 template <
class DestIterator,
class DestAccessor,
107 class MaskIterator,
class MaskAccessor,
110 initLineIfImpl(DestIterator d, DestIterator dend, DestAccessor dest,
111 MaskIterator m, MaskAccessor mask,
112 FUNCTOR
const & f, VigraTrueType)
114 for(; d != dend; ++d, ++m)
119 template <
class DestIterator,
class DestAccessor,
120 class MaskIterator,
class MaskAccessor,
123 initLineIf(DestIterator d, DestIterator dend, DestAccessor dest,
124 MaskIterator m, MaskAccessor mask,
127 initLineIfImpl(d, dend, dest, m, mask, v,
typename FunctorTraits<VALUETYPE>::isInitializer());
130 template <
class DestIterator,
class DestAccessor,
131 class MaskIterator,
class MaskAccessor,
134 initLineFunctorIf(DestIterator d, DestIterator dend, DestAccessor dest,
135 MaskIterator m, MaskAccessor mask,
138 for(; d != dend; ++d, ++m)
231 doxygen_overloaded_function(template <...>
void initImage)
233 template <
class ImageIterator,
class Accessor,
class VALUETYPE>
235 initImage(ImageIterator upperleft, ImageIterator lowerright,
236 Accessor a, VALUETYPE
const & v)
238 int w = lowerright.x - upperleft.x;
240 for(; upperleft.y < lowerright.y; ++upperleft.y)
242 initLineImpl(upperleft.rowIterator(), upperleft.rowIterator() + w, a,
243 v,
typename FunctorTraits<VALUETYPE>::isInitializer());
247 template <
class ImageIterator,
class Accessor,
class VALUETYPE>
250 initImage(triple<ImageIterator, ImageIterator, Accessor> img, VALUETYPE
const & v)
252 initImage(img.first, img.second, img.third, v);
324 template <
class ImageIterator,
class Accessor,
class FUNCTOR>
327 Accessor a, FUNCTOR & f)
329 int w = lowerright.x - upperleft.x;
331 for(; upperleft.y < lowerright.y; ++upperleft.y)
333 initLineFunctor(upperleft.rowIterator(), upperleft.rowIterator() + w, a, f);
337 template <
class ImageIterator,
class Accessor,
class FUNCTOR>
433 doxygen_overloaded_function(template <...>
void initImageIf)
435 template <
class ImageIterator,
class Accessor,
436 class MaskImageIterator,
class MaskAccessor,
439 initImageIf(ImageIterator upperleft, ImageIterator lowerright, Accessor a,
440 MaskImageIterator mask_upperleft, MaskAccessor ma,
443 int w = lowerright.x - upperleft.x;
445 for(; upperleft.y < lowerright.y; ++upperleft.y, ++mask_upperleft.y)
447 initLineIfImpl(upperleft.rowIterator(),
448 upperleft.rowIterator() + w, a,
449 mask_upperleft.rowIterator(), ma,
450 v,
typename FunctorTraits<VALUETYPE>::isInitializer());
454 template <
class ImageIterator,
class Accessor,
455 class MaskImageIterator,
class MaskAccessor,
459 initImageIf(triple<ImageIterator, ImageIterator, Accessor> img,
460 pair<MaskImageIterator, MaskAccessor> mask,
463 initImageIf(img.first, img.second, img.third, mask.first, mask.second, v);
531 template <
class ImageIterator,
class Accessor,
class VALUETYPE>
535 Accessor a,
int border_width, VALUETYPE
const & v)
537 int w = lowerright.x - upperleft.x;
538 int h = lowerright.y - upperleft.y;
540 int hb = (border_width > h) ? h : border_width;
541 int wb = (border_width > w) ? w : border_width;
543 initImage(upperleft, upperleft+Diff2D(w,hb), a, v);
544 initImage(upperleft, upperleft+Diff2D(wb,h), a, v);
545 initImage(upperleft+Diff2D(0,h-hb), lowerright, a, v);
546 initImage(upperleft+Diff2D(w-wb,0), lowerright, a, v);
549 template <
class ImageIterator,
class Accessor,
class VALUETYPE>
553 int border_width, VALUETYPE
const & v)
563 #endif // VIGRA_INITIMAGE_HXX
void initImage(...)
Write a value to every pixel in an image or rectangular ROI.
void initImageWithFunctor(...)
Write the result of a functor call to every pixel in an image or rectangular ROI. ...
void initImageBorder(...)
Write value to the specified border pixels in the image.
void initImageIf(...)
Write value to pixel in the image if mask is true.