36#ifndef VIGRA_BASICIMAGEVIEW_HXX
37#define VIGRA_BASICIMAGEVIEW_HXX
39#include "imageiterator.hxx"
40#include "initimage.hxx"
43#ifdef VIGRA_CHECK_BOUNDS
44#define VIGRA_ASSERT_INSIDE(diff) \
45 vigra_precondition(this->isInside(diff), "Index out of bounds")
47#define VIGRA_ASSERT_INSIDE(diff)
75template <
class PIXELTYPE>
169 IteratorTraits<traverser>::DefaultAccessor
Accessor;
245 return d.
x >= 0 && d.
y >= 0 &&
254 VIGRA_ASSERT_INSIDE(d);
255 return data_[d.
y*stride_ + d.
x];
264 return data_[d.
y*stride_ + d.
x];
273 return data_[dy*stride_ + dx];
282 return data_[dy*stride_ + dx];
292 return data_ + dy*stride_;
302 return data_ + dy*stride_;
342 vigra_precondition(stride_ == width_,
343 "BasicImageView::begin(): "
344 "can only create scan order iterator if width() == stride().");
353 vigra_precondition(stride_ == width_,
354 "BasicImageView::end(): "
355 "can only create scan order iterator if width() == stride().");
364 vigra_precondition(stride_ == width_,
365 "BasicImageView::begin(): "
366 "can only create scan order iterator if width() == stride().");
375 vigra_precondition(stride_ == width_,
376 "BasicImageView::end(): "
377 "can only create scan order iterator if width() == stride().");
385 return data_ + stride_ * y;
399 return data_ + stride_ * y;
413 typedef typename column_iterator::BaseType Iter;
428 typedef typename const_column_iterator::BaseType Iter;
463 std::ptrdiff_t width_, height_, stride_;
473template <
class PixelType,
class Accessor>
474inline triple<typename BasicImageView<PixelType>::const_traverser,
476srcImageRange(BasicImageView<PixelType>
const & img, Accessor a)
478 return triple<typename BasicImageView<PixelType>::const_traverser,
480 Accessor>(img.upperLeft(),
485template <
class PixelType,
class Accessor>
486inline triple<typename BasicImageView<PixelType>::const_traverser,
490 vigra_precondition(roi.left() >= 0 && roi.top() >= 0 &&
491 roi.right() <= img.width() && roi.bottom() <= img.height(),
492 "srcImageRange(): ROI rectangle outside image.");
493 return triple<typename BasicImageView<PixelType>::const_traverser,
495 Accessor>(img.upperLeft() + roi.upperLeft(),
496 img.upperLeft() + roi.lowerRight(),
500template <
class PixelType,
class Accessor>
501inline pair<typename BasicImageView<PixelType>::const_traverser,
Accessor>
504 return pair<typename BasicImageView<PixelType>::const_traverser,
508template <
class PixelType,
class Accessor>
509inline pair<typename BasicImageView<PixelType>::const_traverser,
Accessor>
512 vigra_precondition(img.isInside(ul),
513 "srcImage(): ROI rectangle outside image.");
514 return pair<typename BasicImageView<PixelType>::const_traverser,
518template <
class PixelType,
class Accessor>
519inline triple<typename BasicImageView<PixelType>::traverser,
523 return triple<typename BasicImageView<PixelType>::traverser,
530template <
class PixelType,
class Accessor>
531inline triple<typename BasicImageView<PixelType>::traverser,
535 vigra_precondition(roi.left() >= 0 && roi.top() >= 0 &&
536 roi.right() <= img.width() && roi.bottom() <= img.height(),
537 "destImageRange(): ROI rectangle outside image.");
538 return triple<typename BasicImageView<PixelType>::traverser,
540 Accessor>(img.upperLeft() + roi.upperLeft(),
541 img.upperLeft() + roi.lowerRight(),
545template <
class PixelType,
class Accessor>
546inline pair<typename BasicImageView<PixelType>::traverser,
Accessor>
549 return pair<typename BasicImageView<PixelType>::traverser,
553template <
class PixelType,
class Accessor>
554inline pair<typename BasicImageView<PixelType>::traverser,
Accessor>
557 vigra_precondition(img.isInside(ul),
558 "destImage(): ROI rectangle outside image.");
559 return pair<typename BasicImageView<PixelType>::traverser,
563template <
class PixelType,
class Accessor>
564inline pair<typename BasicImageView<PixelType>::const_traverser,
Accessor>
567 return pair<typename BasicImageView<PixelType>::const_traverser,
571template <
class PixelType,
class Accessor>
572inline pair<typename BasicImageView<PixelType>::const_traverser,
Accessor>
575 vigra_precondition(img.isInside(ul),
576 "maskImage(): ROI rectangle outside image.");
577 return pair<typename BasicImageView<PixelType>::const_traverser,
583template <
class PixelType>
584inline triple<typename BasicImageView<PixelType>::const_traverser,
589 return triple<typename BasicImageView<PixelType>::const_traverser,
596template <
class PixelType>
597inline triple<typename BasicImageView<PixelType>::const_traverser,
602 vigra_precondition(roi.left() >= 0 && roi.top() >= 0 &&
603 roi.right() <= img.width() && roi.bottom() <= img.height(),
604 "srcImageRange(): ROI rectangle outside image.");
605 return triple<typename BasicImageView<PixelType>::const_traverser,
608 img.upperLeft() + roi.lowerRight(),
612template <
class PixelType>
613inline pair< typename BasicImageView<PixelType>::const_traverser,
617 return pair<typename BasicImageView<PixelType>::const_traverser,
622template <
class PixelType>
623inline pair< typename BasicImageView<PixelType>::const_traverser,
627 vigra_precondition(img.isInside(ul),
628 "srcImage(): ROI rectangle outside image.");
629 return pair<typename BasicImageView<PixelType>::const_traverser,
634template <
class PixelType>
635inline triple< typename BasicImageView<PixelType>::traverser,
640 return triple<typename BasicImageView<PixelType>::traverser,
647template <
class PixelType>
648inline triple< typename BasicImageView<PixelType>::traverser,
653 vigra_precondition(roi.left() >= 0 && roi.top() >= 0 &&
654 roi.right() <= img.width() && roi.bottom() <= img.height(),
655 "destImageRange(): ROI rectangle outside image.");
656 return triple<typename BasicImageView<PixelType>::traverser,
659 img.upperLeft() + roi.lowerRight(),
663template <
class PixelType>
664inline pair< typename BasicImageView<PixelType>::traverser,
668 return pair<typename BasicImageView<PixelType>::traverser,
673template <
class PixelType>
674inline pair< typename BasicImageView<PixelType>::traverser,
678 vigra_precondition(img.isInside(ul),
679 "destImage(): ROI rectangle outside image.");
680 return pair<typename BasicImageView<PixelType>::traverser,
685template <
class PixelType>
686inline pair< typename BasicImageView<PixelType>::const_traverser,
690 return pair<typename BasicImageView<PixelType>::const_traverser,
695template <
class PixelType>
696inline pair< typename BasicImageView<PixelType>::const_traverser,
700 vigra_precondition(img.isInside(ul),
701 "maskImage(): ROI rectangle outside image.");
702 return pair<typename BasicImageView<PixelType>::const_traverser,
708#undef VIGRA_ASSERT_INSIDE
BasicImage using foreign memory.
Definition basicimageview.hxx:77
PIXELTYPE * ScanOrderIterator
Definition basicimageview.hxx:114
std::ptrdiff_t height() const
Definition basicimageview.hxx:221
ConstImageIterator< value_type > ConstIterator
Definition basicimageview.hxx:140
const_pointer operator[](std::ptrdiff_t dy) const
Definition basicimageview.hxx:299
const_traverser upperLeft() const
Definition basicimageview.hxx:323
column_iterator columnEnd(std::ptrdiff_t x)
Definition basicimageview.hxx:419
const_row_iterator rowBegin(std::ptrdiff_t y) const
Definition basicimageview.hxx:397
IteratorTraits< traverser >::DefaultAccessor Accessor
Definition basicimageview.hxx:169
const_iterator begin() const
Definition basicimageview.hxx:362
const_traverser lowerRight() const
Definition basicimageview.hxx:332
bool isInside(difference_type const &d) const
Definition basicimageview.hxx:243
PIXELTYPE const * ConstScanOrderIterator
Definition basicimageview.hxx:124
const_pointer data() const
Definition basicimageview.hxx:441
row_iterator rowBegin(std::ptrdiff_t y)
Definition basicimageview.hxx:383
BasicImageView(const_pointer data, std::ptrdiff_t w, std::ptrdiff_t h, std::ptrdiff_t stride=0)
Definition basicimageview.hxx:187
size_type size() const
Definition basicimageview.hxx:236
ImageIterator< value_type > Iterator
Definition basicimageview.hxx:132
IteratorTraits< const_traverser >::DefaultAccessor ConstAccessor
Definition basicimageview.hxx:174
PIXELTYPE & reference
Definition basicimageview.hxx:91
ConstImageIterator< value_type > const_traverser
Definition basicimageview.hxx:136
BasicImageView & init(value_type const &pixel)
Definition basicimageview.hxx:205
const_traverser::row_iterator const_row_iterator
Definition basicimageview.hxx:148
Size2D size_type
Definition basicimageview.hxx:164
ConstAccessor accessor() const
Definition basicimageview.hxx:455
reference operator[](difference_type const &d)
Definition basicimageview.hxx:252
pointer operator[](std::ptrdiff_t dy)
Definition basicimageview.hxx:289
const_traverser::column_iterator const_column_iterator
Definition basicimageview.hxx:156
std::ptrdiff_t width() const
Definition basicimageview.hxx:214
BasicImageView(const_pointer data, difference_type const &size, std::ptrdiff_t stride=0)
Definition basicimageview.hxx:196
traverser::row_iterator row_iterator
Definition basicimageview.hxx:144
traverser::column_iterator column_iterator
Definition basicimageview.hxx:152
row_iterator rowEnd(std::ptrdiff_t y)
Definition basicimageview.hxx:390
PIXELTYPE const * const_iterator
Definition basicimageview.hxx:120
reference operator()(std::ptrdiff_t dx, std::ptrdiff_t dy)
Definition basicimageview.hxx:270
Accessor accessor()
Definition basicimageview.hxx:448
PIXELTYPE const * const_pointer
Definition basicimageview.hxx:104
PIXELTYPE PixelType
Definition basicimageview.hxx:86
ImageIterator< value_type > traverser
Definition basicimageview.hxx:128
iterator end()
Definition basicimageview.hxx:351
traverser lowerRight()
Definition basicimageview.hxx:316
const_iterator end() const
Definition basicimageview.hxx:373
PIXELTYPE value_type
Definition basicimageview.hxx:82
iterator begin()
Definition basicimageview.hxx:340
const_reference operator[](difference_type const &d) const
Definition basicimageview.hxx:261
const_row_iterator rowEnd(std::ptrdiff_t y) const
Definition basicimageview.hxx:404
PIXELTYPE * iterator
Definition basicimageview.hxx:110
const_column_iterator columnBegin(std::ptrdiff_t x) const
Definition basicimageview.hxx:426
const_reference operator()(std::ptrdiff_t dx, std::ptrdiff_t dy) const
Definition basicimageview.hxx:279
std::ptrdiff_t stride() const
Definition basicimageview.hxx:229
PIXELTYPE const & const_reference
Definition basicimageview.hxx:96
PIXELTYPE * pointer
Definition basicimageview.hxx:100
traverser upperLeft()
Definition basicimageview.hxx:307
const_column_iterator columnEnd(std::ptrdiff_t x) const
Definition basicimageview.hxx:434
BasicImageView()
Definition basicimageview.hxx:178
Diff2D difference_type
Definition basicimageview.hxx:160
column_iterator columnBegin(std::ptrdiff_t x)
Definition basicimageview.hxx:411
Standard 2D random access const iterator for images that store the data as a linear array.
Definition imageiterator.hxx:896
Two dimensional difference vector.
Definition diff2d.hxx:186
int y
Definition diff2d.hxx:392
int x
Definition diff2d.hxx:385
RowIteratorSelector::res row_iterator
Definition imageiterator.hxx:605
ColumnIteratorSelector::res column_iterator
Definition imageiterator.hxx:609
Standard 2D random access iterator for images that store the data in a linear array.
Definition imageiterator.hxx:851
Two dimensional point or position.
Definition diff2d.hxx:586
Two dimensional rectangle.
Definition diff2d.hxx:859
Two dimensional size object.
Definition diff2d.hxx:483
void initImage(...)
Write a value to every pixel in an image or rectangular ROI.