vil_image_view_base.h
Go to the documentation of this file.
1 // This is core/vil/vil_image_view_base.h
2 #ifndef vil_image_view_base_h_
3 #define vil_image_view_base_h_
4 //:
5 // \file
6 // \brief A base class reference-counting view of some image data.
7 // \author Ian Scott - Manchester
8 //
9 // \verbatim
10 // Modifications
11 // 10 Sep. 2004 Peter Vanroose Inlined all 1-line methods in class decl
12 // \endverbatim
13 
14 #include <iosfwd>
15 #include <string>
16 #ifdef _MSC_VER
17 # include <vcl_msvc_warnings.h>
18 #endif
19 #include <cassert>
20 #include <vcl_atomic_count.h>
21 #include <vil/vil_pixel_format.h>
22 #include <vil/vil_smart_ptr.h>
23 
24 //: An abstract base class of smart pointers to actual image data in memory.
25 // If you want an actual image, try instantiating vil_image_view<T>.
26 
28 {
29  protected:
30  //: Number of columns.
31  unsigned ni_;
32  //: Number of rasters.
33  unsigned nj_;
34  //: Number of planes.
35  unsigned nplanes_;
36 
37  vil_image_view_base(unsigned n_i, unsigned n_j, unsigned n_planes):
38  ni_(n_i), nj_(n_j), nplanes_(n_planes), reference_count_(0) {}
39 
40  //: Default is an empty one-plane image
41  // Don't set nplanes_ to zero as it confuses set_size(nx,ny) later
43 
44  public:
45  // The destructor must be virtual so that the memory chunk is destroyed.
46  virtual ~vil_image_view_base() { assert( reference_count_ == 0 ); }
47 
48  //: Width
49  unsigned ni() const {return ni_;}
50  //: Height
51  unsigned nj() const {return nj_;}
52  //: Number of planes
53  unsigned nplanes() const {return nplanes_;}
54 
55  //: The number of pixels.
56  unsigned long size() const { return ni_ * nj_ * nplanes_; }
57 
58  //: set_size current planes to width x height.
59  // If already correct size, this function returns quickly
60  virtual void set_size(unsigned width, unsigned height) =0;
61 
62  //: resize to width x height x n_planes.
63  // If already correct size, this function returns quickly
64  virtual void set_size(unsigned width, unsigned height, unsigned n_planes) =0;
65 
66  //: Print a 1-line summary of contents
67  virtual void print(std::ostream&) const =0;
68 
69  //: Return class name
70  virtual std::string is_a() const =0;
71 
72  //: Return a description of the concrete data pixel type.
73  // For example if the value is VIL_PIXEL_FORMAT_BYTE,
74  // you can safely cast, or assign the base class reference to
75  // a vil_image_view<vxl_byte>.
76  virtual enum vil_pixel_format pixel_format() const=0;
77 
78  //: True if this is (or is derived from) class s
79  virtual bool is_class(std::string const& s) const { return s=="vil_image_view_base"; }
80 
81  private:
82  // You probably should not use a vil_image_view in a vbl_smart_ptr, so the
83  // ref functions are private
85  void ref() { ++reference_count_; }
86  void unref() {
87  assert(reference_count_>0);
88  if (--reference_count_<=0) delete this;}
89  vcl_atomic_count reference_count_;
90 };
91 
92 
93 //: An interface between vil_image_views and vil_image_resources
94 // This object is used internally by vil to provide a type-independent
95 // transient storage for a view as it is being assigned to a
96 // vil_image_view<T> from a vil_image_resource::get_view(),
97 // vil_load() or vil_convert_..() function call.
98 // If you want a type independent image container, you are recommended to
99 // use a vil_image_resource_sptr
101 
102 //: Print a 1-line summary of contents
103 inline
104 std::ostream& operator<<(std::ostream& s, vil_image_view_base const& im)
105 { im.print(s); return s; }
106 
107 #endif // vil_image_view_base_h_
unsigned ni_
Number of columns.
An abstract base class of smart pointers to actual image data in memory.
virtual bool is_class(std::string const &s) const
True if this is (or is derived from) class s.
vil_pixel_format
Describes the type of the concrete data.
virtual std::string is_a() const =0
Return class name.
A templated smart pointer class.
Definition: vil_fwd.h:16
virtual void set_size(unsigned width, unsigned height)=0
set_size current planes to width x height.
vil_image_view_base()
Default is an empty one-plane image.
vil_image_view_base(unsigned n_i, unsigned n_j, unsigned n_planes)
vcl_atomic_count reference_count_
unsigned ni() const
Width.
unsigned nj() const
Height.
virtual enum vil_pixel_format pixel_format() const =0
Return a description of the concrete data pixel type.
std::ostream & operator<<(std::ostream &s, vil_image_view_base const &im)
Print a 1-line summary of contents.
unsigned nplanes_
Number of planes.
vil_smart_ptr< vil_image_view_base > vil_image_view_base_sptr
An interface between vil_image_views and vil_image_resources.
unsigned long size() const
The number of pixels.
virtual void print(std::ostream &) const =0
Print a 1-line summary of contents.
unsigned nplanes() const
Number of planes.
Contains a templated smart pointer class.
unsigned nj_
Number of rasters.