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) 73 template <
class PIXELTYPE>
186 : data_(const_cast<pointer>(data)),
195 : data_(const_cast<pointer>(data)),
243 return d.
x >= 0 && d.
y >= 0 &&
252 VIGRA_ASSERT_INSIDE(d);
253 return data_[d.
y*stride_ + d.
x];
262 return data_[d.
y*stride_ + d.
x];
271 return data_[dy*stride_ + dx];
277 const_reference
operator()(std::ptrdiff_t dx, std::ptrdiff_t dy)
const 280 return data_[dy*stride_ + dx];
290 return data_ + dy*stride_;
300 return data_ + dy*stride_;
340 vigra_precondition(stride_ == width_,
341 "BasicImageView::begin(): " 342 "can only create scan order iterator if width() == stride().");
351 vigra_precondition(stride_ == width_,
352 "BasicImageView::end(): " 353 "can only create scan order iterator if width() == stride().");
362 vigra_precondition(stride_ == width_,
363 "BasicImageView::begin(): " 364 "can only create scan order iterator if width() == stride().");
371 const_iterator
end()
const 373 vigra_precondition(stride_ == width_,
374 "BasicImageView::end(): " 375 "can only create scan order iterator if width() == stride().");
383 return data_ + stride_ * y;
395 const_row_iterator
rowBegin(std::ptrdiff_t y)
const 397 return data_ + stride_ * y;
402 const_row_iterator
rowEnd(std::ptrdiff_t y)
const 411 typedef typename column_iterator::BaseType Iter;
426 typedef typename const_column_iterator::BaseType Iter;
461 std::ptrdiff_t width_, height_, stride_;
471 template <
class PixelType,
class Accessor>
472 inline triple<typename BasicImageView<PixelType>::const_traverser,
476 return triple<typename BasicImageView<PixelType>::const_traverser,
477 typename BasicImageView<PixelType>::const_traverser,
483 template <
class PixelType,
class Accessor>
484 inline triple<typename BasicImageView<PixelType>::const_traverser,
485 typename BasicImageView<PixelType>::const_traverser,
Accessor>
488 vigra_precondition(roi.
left() >= 0 && roi.
top() >= 0 &&
490 "srcImageRange(): ROI rectangle outside image.");
491 return triple<typename BasicImageView<PixelType>::const_traverser,
492 typename BasicImageView<PixelType>::const_traverser,
498 template <
class PixelType,
class Accessor>
499 inline pair<typename BasicImageView<PixelType>::const_traverser,
Accessor>
502 return pair<typename BasicImageView<PixelType>::const_traverser,
506 template <
class PixelType,
class Accessor>
507 inline pair<typename BasicImageView<PixelType>::const_traverser,
Accessor>
510 vigra_precondition(img.
isInside(ul),
511 "srcImage(): ROI rectangle outside image.");
512 return pair<typename BasicImageView<PixelType>::const_traverser,
516 template <
class PixelType,
class Accessor>
517 inline triple<typename BasicImageView<PixelType>::traverser,
521 return triple<typename BasicImageView<PixelType>::traverser,
522 typename BasicImageView<PixelType>::traverser,
528 template <
class PixelType,
class Accessor>
529 inline triple<typename BasicImageView<PixelType>::traverser,
530 typename BasicImageView<PixelType>::traverser,
Accessor>
533 vigra_precondition(roi.
left() >= 0 && roi.
top() >= 0 &&
535 "destImageRange(): ROI rectangle outside image.");
536 return triple<typename BasicImageView<PixelType>::traverser,
537 typename BasicImageView<PixelType>::traverser,
543 template <
class PixelType,
class Accessor>
544 inline pair<typename BasicImageView<PixelType>::traverser,
Accessor>
547 return pair<typename BasicImageView<PixelType>::traverser,
551 template <
class PixelType,
class Accessor>
552 inline pair<typename BasicImageView<PixelType>::traverser,
Accessor>
555 vigra_precondition(img.
isInside(ul),
556 "destImage(): ROI rectangle outside image.");
557 return pair<typename BasicImageView<PixelType>::traverser,
561 template <
class PixelType,
class Accessor>
562 inline pair<typename BasicImageView<PixelType>::const_traverser,
Accessor>
565 return pair<typename BasicImageView<PixelType>::const_traverser,
569 template <
class PixelType,
class Accessor>
570 inline pair<typename BasicImageView<PixelType>::const_traverser,
Accessor>
573 vigra_precondition(img.
isInside(ul),
574 "maskImage(): ROI rectangle outside image.");
575 return pair<typename BasicImageView<PixelType>::const_traverser,
581 template <
class PixelType>
582 inline triple<typename BasicImageView<PixelType>::const_traverser,
583 typename BasicImageView<PixelType>::const_traverser,
587 return triple<typename BasicImageView<PixelType>::const_traverser,
588 typename BasicImageView<PixelType>::const_traverser,
594 template <
class PixelType>
595 inline triple<typename BasicImageView<PixelType>::const_traverser,
596 typename BasicImageView<PixelType>::const_traverser,
600 vigra_precondition(roi.
left() >= 0 && roi.
top() >= 0 &&
602 "srcImageRange(): ROI rectangle outside image.");
603 return triple<typename BasicImageView<PixelType>::const_traverser,
604 typename BasicImageView<PixelType>::const_traverser,
610 template <
class PixelType>
611 inline pair< typename BasicImageView<PixelType>::const_traverser,
615 return pair<typename BasicImageView<PixelType>::const_traverser,
620 template <
class PixelType>
621 inline pair< typename BasicImageView<PixelType>::const_traverser,
625 vigra_precondition(img.
isInside(ul),
626 "srcImage(): ROI rectangle outside image.");
627 return pair<typename BasicImageView<PixelType>::const_traverser,
632 template <
class PixelType>
633 inline triple< typename BasicImageView<PixelType>::traverser,
634 typename BasicImageView<PixelType>::traverser,
638 return triple<typename BasicImageView<PixelType>::traverser,
639 typename BasicImageView<PixelType>::traverser,
645 template <
class PixelType>
646 inline triple< typename BasicImageView<PixelType>::traverser,
647 typename BasicImageView<PixelType>::traverser,
651 vigra_precondition(roi.
left() >= 0 && roi.
top() >= 0 &&
653 "destImageRange(): ROI rectangle outside image.");
654 return triple<typename BasicImageView<PixelType>::traverser,
655 typename BasicImageView<PixelType>::traverser,
661 template <
class PixelType>
662 inline pair< typename BasicImageView<PixelType>::traverser,
666 return pair<typename BasicImageView<PixelType>::traverser,
671 template <
class PixelType>
672 inline pair< typename BasicImageView<PixelType>::traverser,
676 vigra_precondition(img.
isInside(ul),
677 "destImage(): ROI rectangle outside image.");
678 return pair<typename BasicImageView<PixelType>::traverser,
683 template <
class PixelType>
684 inline pair< typename BasicImageView<PixelType>::const_traverser,
688 return pair<typename BasicImageView<PixelType>::const_traverser,
693 template <
class PixelType>
694 inline pair< typename BasicImageView<PixelType>::const_traverser,
698 vigra_precondition(img.
isInside(ul),
699 "maskImage(): ROI rectangle outside image.");
700 return pair<typename BasicImageView<PixelType>::const_traverser,
706 #undef VIGRA_ASSERT_INSIDE IteratorTraits< traverser >::DefaultAccessor Accessor
Definition: basicimageview.hxx:167
BasicImageView(const_pointer data, std::ptrdiff_t w, std::ptrdiff_t h, std::ptrdiff_t stride=0)
Definition: basicimageview.hxx:185
reference operator[](difference_type const &d)
Definition: basicimageview.hxx:250
const_pointer data() const
Definition: basicimageview.hxx:439
int right() const
Definition: diff2d.hxx:989
std::ptrdiff_t height() const
Definition: basicimageview.hxx:219
const_traverser lowerRight() const
Definition: basicimageview.hxx:330
ImageIterator< value_type > Iterator
Definition: basicimageview.hxx:130
PIXELTYPE * pointer
Definition: basicimageview.hxx:98
PIXELTYPE const & const_reference
Definition: basicimageview.hxx:94
void initImage(...)
Write a value to every pixel in an image or rectangular ROI.
int y
Definition: diff2d.hxx:392
std::ptrdiff_t stride() const
Definition: basicimageview.hxx:227
reference operator()(std::ptrdiff_t dx, std::ptrdiff_t dy)
Definition: basicimageview.hxx:268
row_iterator rowEnd(std::ptrdiff_t y)
Definition: basicimageview.hxx:388
bool isInside(difference_type const &d) const
Definition: basicimageview.hxx:241
const_iterator begin() const
Definition: basicimageview.hxx:360
PIXELTYPE & reference
Definition: basicimageview.hxx:89
int bottom() const
Definition: diff2d.hxx:997
int x
Definition: diff2d.hxx:385
RowIteratorSelector::res row_iterator
Definition: imageiterator.hxx:605
Point2D const & upperLeft() const
Definition: diff2d.hxx:911
Two dimensional difference vector.
Definition: diff2d.hxx:185
traverser lowerRight()
Definition: basicimageview.hxx:314
row_iterator rowBegin(std::ptrdiff_t y)
Definition: basicimageview.hxx:381
ColumnIteratorSelector::res column_iterator
Definition: imageiterator.hxx:609
Size2D size_type
Definition: basicimageview.hxx:162
PIXELTYPE * ScanOrderIterator
Definition: basicimageview.hxx:112
ImageIterator< value_type > traverser
Definition: basicimageview.hxx:126
traverser::column_iterator column_iterator
Definition: basicimageview.hxx:150
Standard 2D random access const iterator for images that store the data as a linear array...
Definition: imageiterator.hxx:893
Definition: accessor.hxx:43
ConstImageIterator< value_type > ConstIterator
Definition: basicimageview.hxx:138
int left() const
Definition: diff2d.hxx:974
PIXELTYPE const * const_iterator
Definition: basicimageview.hxx:118
const_column_iterator columnBegin(std::ptrdiff_t x) const
Definition: basicimageview.hxx:424
const_traverser::row_iterator const_row_iterator
Definition: basicimageview.hxx:146
size_type size() const
Definition: basicimageview.hxx:234
Two dimensional size object.
Definition: diff2d.hxx:482
const_traverser upperLeft() const
Definition: basicimageview.hxx:321
Two dimensional point or position.
Definition: diff2d.hxx:592
traverser::row_iterator row_iterator
Definition: basicimageview.hxx:142
PIXELTYPE * iterator
Definition: basicimageview.hxx:108
iterator end()
Definition: basicimageview.hxx:349
pointer operator[](std::ptrdiff_t dy)
Definition: basicimageview.hxx:287
column_iterator columnEnd(std::ptrdiff_t x)
Definition: basicimageview.hxx:417
Diff2D difference_type
Definition: basicimageview.hxx:158
BasicImageView()
Definition: basicimageview.hxx:176
ConstAccessor accessor() const
Definition: basicimageview.hxx:453
const_pointer operator[](std::ptrdiff_t dy) const
Definition: basicimageview.hxx:297
const_traverser::column_iterator const_column_iterator
Definition: basicimageview.hxx:154
int top() const
Definition: diff2d.hxx:981
BasicImageView & init(value_type const &pixel)
Definition: basicimageview.hxx:203
BasicImage using foreign memory.
Definition: basicimageview.hxx:74
PIXELTYPE value_type
Definition: basicimageview.hxx:80
traverser upperLeft()
Definition: basicimageview.hxx:305
column_iterator columnBegin(std::ptrdiff_t x)
Definition: basicimageview.hxx:409
const_row_iterator rowEnd(std::ptrdiff_t y) const
Definition: basicimageview.hxx:402
iterator begin()
Definition: basicimageview.hxx:338
const_column_iterator columnEnd(std::ptrdiff_t x) const
Definition: basicimageview.hxx:432
std::ptrdiff_t width() const
Definition: basicimageview.hxx:212
const_reference operator()(std::ptrdiff_t dx, std::ptrdiff_t dy) const
Definition: basicimageview.hxx:277
ConstImageIterator< value_type > const_traverser
Definition: basicimageview.hxx:134
const_row_iterator rowBegin(std::ptrdiff_t y) const
Definition: basicimageview.hxx:395
IteratorTraits< const_traverser >::DefaultAccessor ConstAccessor
Definition: basicimageview.hxx:172
Point2D const & lowerRight() const
Definition: diff2d.hxx:919
Two dimensional rectangle.
Definition: diff2d.hxx:872
Standard 2D random access iterator for images that store the data in a linear array.
Definition: imageiterator.hxx:848
const_reference operator[](difference_type const &d) const
Definition: basicimageview.hxx:259
Accessor accessor()
Definition: basicimageview.hxx:446
Encapsulate access to the values an iterator points to.
Definition: accessor.hxx:133
PIXELTYPE const * ConstScanOrderIterator
Definition: basicimageview.hxx:122
PIXELTYPE const * const_pointer
Definition: basicimageview.hxx:102
PIXELTYPE PixelType
Definition: basicimageview.hxx:84
BasicImageView(const_pointer data, difference_type const &size, std::ptrdiff_t stride=0)
Definition: basicimageview.hxx:194
const_iterator end() const
Definition: basicimageview.hxx:371