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