37 #ifndef VIGRA_COPYIMAGE_HXX
38 #define VIGRA_COPYIMAGE_HXX
40 #include "utilities.hxx"
55 template <
class SrcIterator,
class SrcAccessor,
56 class DestIterator,
class DestAccessor>
58 copyLine(SrcIterator s,
59 SrcIterator send, SrcAccessor src,
60 DestIterator d, DestAccessor dest)
62 for(; s != send; ++s, ++d)
66 template <
class SrcIterator,
class SrcAccessor,
67 class MaskIterator,
class MaskAccessor,
68 class DestIterator,
class DestAccessor>
70 copyLineIf(SrcIterator s,
71 SrcIterator send, SrcAccessor src,
72 MaskIterator m, MaskAccessor mask,
73 DestIterator d, DestAccessor dest)
75 for(; s != send; ++s, ++d, ++m)
80 template <
class SrcIterator,
class SrcAccessor,
81 class DestIterator,
class DestAccessor>
83 swapLine(SrcIterator s,
84 SrcIterator send, SrcAccessor src,
85 DestIterator d, DestAccessor dest)
87 for(; s != send; ++s, ++d)
89 typename SrcAccessor::value_type t = src(s);
160 template <
class SrcImageIterator,
class SrcAccessor,
161 class DestImageIterator,
class DestAccessor>
163 copyImage(SrcImageIterator src_upperleft,
164 SrcImageIterator src_lowerright, SrcAccessor sa,
165 DestImageIterator dest_upperleft, DestAccessor da)
167 int w = src_lowerright.x - src_upperleft.x;
169 for(; src_upperleft.y<src_lowerright.y; ++src_upperleft.y, ++dest_upperleft.y)
171 copyLine(src_upperleft.rowIterator(),
172 src_upperleft.rowIterator() + w, sa,
173 dest_upperleft.rowIterator(), da);
177 template <
class SrcImageIterator,
class SrcAccessor,
178 class DestImageIterator,
class DestAccessor>
181 copyImage(triple<SrcImageIterator, SrcImageIterator, SrcAccessor> src,
182 pair<DestImageIterator, DestAccessor> dest)
184 copyImage(src.first, src.second, src.third,
185 dest.first, dest.second);
188 template <
class SrcImageIterator,
class SrcAccessor,
189 class DestImageIterator,
class DestAccessor>
191 swapImageData(SrcImageIterator src_upperleft,
192 SrcImageIterator src_lowerright, SrcAccessor sa,
193 DestImageIterator dest_upperleft, DestAccessor da)
195 int w = src_lowerright.x - src_upperleft.x;
197 for(; src_upperleft.y<src_lowerright.y; ++src_upperleft.y, ++dest_upperleft.y)
199 swapLine(src_upperleft.rowIterator(),
200 src_upperleft.rowIterator() + w, sa,
201 dest_upperleft.rowIterator(), da);
205 template <
class SrcImageIterator,
class SrcAccessor,
206 class DestImageIterator,
class DestAccessor>
209 swapImageData(triple<SrcImageIterator, SrcImageIterator, SrcAccessor> src,
210 pair<DestImageIterator, DestAccessor> dest)
212 swapImageData(src.first, src.second, src.third,
213 dest.first, dest.second);
292 template <
class SrcImageIterator,
class SrcAccessor,
293 class MaskImageIterator,
class MaskAccessor,
294 class DestImageIterator,
class DestAccessor>
297 SrcImageIterator src_lowerright, SrcAccessor sa,
298 MaskImageIterator mask_upperleft, MaskAccessor ma,
299 DestImageIterator dest_upperleft, DestAccessor da)
301 int w = src_lowerright.x - src_upperleft.x;
303 for(; src_upperleft.y<src_lowerright.y;
304 ++src_upperleft.y, ++mask_upperleft.y, ++dest_upperleft.y)
306 copyLineIf(src_upperleft.rowIterator(),
307 src_upperleft.rowIterator() + w, sa,
308 mask_upperleft.rowIterator(), ma,
309 dest_upperleft.rowIterator(), da);
313 template <
class SrcImageIterator,
class SrcAccessor,
314 class MaskImageIterator,
class MaskAccessor,
315 class DestImageIterator,
class DestAccessor>
318 copyImageIf(triple<SrcImageIterator, SrcImageIterator, SrcAccessor> src,
319 pair<MaskImageIterator, MaskAccessor> mask,
320 pair<DestImageIterator, DestAccessor> dest)
323 mask.first, mask.second,
324 dest.first, dest.second);
331 #endif // VIGRA_COPYIMAGE_HXX