37#ifndef VIGRA_INITIMAGE_HXX
38#define VIGRA_INITIMAGE_HXX
41#include "iteratortraits.hxx"
42#include "functortraits.hxx"
43#include "multi_shape.hxx"
59template <
class DestIterator,
class DestAccessor,
class VALUETYPE>
61initLineImpl(DestIterator d, DestIterator dend, DestAccessor dest,
62 VALUETYPE
const & v, VigraFalseType)
68template <
class DestIterator,
class DestAccessor,
class FUNCTOR>
70initLineImpl(DestIterator d, DestIterator dend, DestAccessor dest,
71 FUNCTOR
const & f, VigraTrueType)
77template <
class DestIterator,
class DestAccessor,
class VALUETYPE>
79initLine(DestIterator d, DestIterator dend, DestAccessor dest,
82 initLineImpl(d, dend, dest, v,
typename FunctorTraits<VALUETYPE>::isInitializer());
85template <
class DestIterator,
class DestAccessor,
class FUNCTOR>
87initLineFunctor(DestIterator d, DestIterator dend, DestAccessor dest,
94template <
class DestIterator,
class DestAccessor,
95 class MaskIterator,
class MaskAccessor,
98initLineIfImpl(DestIterator d, DestIterator dend, DestAccessor dest,
99 MaskIterator m, MaskAccessor mask,
100 VALUETYPE
const & v, VigraFalseType)
102 for(; d != dend; ++d, ++m)
107template <
class DestIterator,
class DestAccessor,
108 class MaskIterator,
class MaskAccessor,
111initLineIfImpl(DestIterator d, DestIterator dend, DestAccessor dest,
112 MaskIterator m, MaskAccessor mask,
113 FUNCTOR
const & f, VigraTrueType)
115 for(; d != dend; ++d, ++m)
120template <
class DestIterator,
class DestAccessor,
121 class MaskIterator,
class MaskAccessor,
124initLineIf(DestIterator d, DestIterator dend, DestAccessor dest,
125 MaskIterator m, MaskAccessor mask,
128 initLineIfImpl(d, dend, dest, m, mask, v,
typename FunctorTraits<VALUETYPE>::isInitializer());
131template <
class DestIterator,
class DestAccessor,
132 class MaskIterator,
class MaskAccessor,
135initLineFunctorIf(DestIterator d, DestIterator dend, DestAccessor dest,
136 MaskIterator m, MaskAccessor mask,
139 for(; d != dend; ++d, ++m)
277doxygen_overloaded_function(template <...>
void initImage)
279template <
class ImageIterator,
class Accessor,
class VALUETYPE>
284 int w = lowerright.
x - upperleft.
x;
286 for(; upperleft.
y < lowerright.
y; ++upperleft.
y)
288 initLineImpl(upperleft.rowIterator(), upperleft.rowIterator() + w, a,
289 v,
typename FunctorTraits<VALUETYPE>::isInitializer());
293template <
class ImageIterator,
class Accessor,
class VALUETYPE>
295initImage(triple<ImageIterator, ImageIterator, Accessor> img, VALUETYPE
const & v)
297 initImage(img.first, img.second, img.third, v);
300template <
class T,
class S,
class VALUETYPE>
406template <
class ImageIterator,
class Accessor,
class FUNCTOR>
411 int w = lowerright.
x - upperleft.
x;
413 for(; upperleft.
y < lowerright.
y; ++upperleft.
y)
415 initLineFunctor(upperleft.rowIterator(), upperleft.rowIterator() + w, a, f);
419template <
class ImageIterator,
class Accessor,
class FUNCTOR>
426template <
class T,
class S,
class FUNCTOR>
553 class MaskImageIterator,
class MaskAccessor,
557 MaskImageIterator mask_upperleft, MaskAccessor ma,
560 int w = lowerright.
x - upperleft.
x;
562 for(; upperleft.
y < lowerright.
y; ++upperleft.
y, ++mask_upperleft.y)
564 initLineIfImpl(upperleft.rowIterator(),
565 upperleft.rowIterator() + w, a,
566 mask_upperleft.rowIterator(), ma,
567 v,
typename FunctorTraits<VALUETYPE>::isInitializer());
571template <
class ImageIterator,
class Accessor,
572 class MaskImageIterator,
class MaskAccessor,
575initImageIf(triple<ImageIterator, ImageIterator, Accessor> img,
576 pair<MaskImageIterator, MaskAccessor> mask,
579 initImageIf(img.first, img.second, img.third, mask.first, mask.second, v);
582template <
class T,
class S,
590 vigra_precondition(img.shape() == mask.shape(),
591 "initImageIf(): shape mismatch between input and mask.");
592 initImageIf(destImageRange(img), maskImage(mask), v);
684template <
class ImageIterator,
class Accessor,
class VALUETYPE>
688 Accessor a,
int border_width, VALUETYPE
const & v)
690 int w = lowerright.
x - upperleft.
x;
691 int h = lowerright.
y - upperleft.
y;
693 int hb = (border_width > h) ? h : border_width;
694 int wb = (border_width > w) ? w : border_width;
702template <
class ImageIterator,
class Accessor,
class VALUETYPE>
705 int border_width, VALUETYPE
const & v)
710template <
class T,
class S,
class VALUETYPE>
713 int border_width, VALUETYPE
const & v)
Two dimensional difference vector.
Definition diff2d.hxx:186
MoveX x
Definition imageiterator.hxx:660
MoveY y
Definition imageiterator.hxx:673
Standard 2D random access iterator for images that store the data in a linear array.
Definition imageiterator.hxx:851
Base class for, and view to, MultiArray.
Definition multi_array.hxx:705
void initImageIf(...)
Write value to pixel in the image if mask is true.
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.