DGtal  0.9.4beta
Image.h
1 
17 #pragma once
18 
31 #if defined(Image_RECURSES)
32 #error Recursive header files inclusion detected in Image.h
33 #else // defined(Image_RECURSES)
34 
35 #define Image_RECURSES
36 
37 #if !defined Image_h
38 
39 #define Image_h
40 
42 // Inclusions
43 #include <iostream>
44 #include "DGtal/base/Common.h"
45 #include "DGtal/base/ConceptUtils.h"
46 #include "DGtal/images/CImage.h"
47 #include "DGtal/kernel/domains/CDomain.h"
48 #include "DGtal/base/CowPtr.h"
49 #include "DGtal/graph/CVertexMap.h"
51 
52 namespace DGtal
53 {
55  // Template class Image
68  template < typename TImageContainer >
69  class Image
70  {
71 
72  // ----------------------- Types ------------------------------
73 
74  public:
75 
79 
81  typedef TImageContainer ImageContainer;
82  typedef typename TImageContainer::Domain Domain;
83  typedef typename TImageContainer::Point Point;
84  typedef typename TImageContainer::Value Value;
85  typedef typename TImageContainer::ConstRange ConstRange;
86  typedef typename TImageContainer::Range Range;
87  typedef typename TImageContainer::OutputIterator OutputIterator;
88 
91 
92  // ----------------------- Standard services ------------------------------
93 
94  public:
95 
99  Image() {
100 #ifdef DEBUG_VERBOSE
101 trace.warning() << "Image Ctor default "<<std::endl;
102 #endif
103 
104  };
105 
110  Image(ImageContainer *anImageContainer):
111  myImagePointer(anImageContainer)
112  {
113 #ifdef DEBUG_VERBOSE
114  trace.warning() << "Image Ctor fromPointer "<<std::endl;
115 #endif
116  }
117 
123  Image(const CowPtr<ImageContainer> &anImageContainerCowPointer):
124  myImagePointer(anImageContainerCowPointer)
125  {
126  #ifdef DEBUG_VERBOSE
127 trace.warning() << "Image Ctor fromCow "<<std::endl;
128 #endif
129  }
130 
136  Image(const ImageContainer &other):
137  myImagePointer(new ImageContainer(other) )
138  {
139 #ifdef DEBUG_VERBOSE
140 trace.warning() << "Image Ctor fromConstRef "<<std::endl;
141 #endif
142  }
143 
144 
150  Image(const Image &other):
152  {
153  #ifdef DEBUG_VERBOSE
154 trace.warning() << "Image copy Ctor "<<std::endl;
155 #endif
156  }
157 
163  Image & operator= ( const Image & other )
164  {
165  #ifdef DEBUG_VERBOSE
166  trace.warning() << "Image assignment "<<std::endl;
167 #endif
168  if (&other != this)
169  {
171  }
172  return *this;
173  }
174 
175 
180  ~Image() {}
181 
182  // ----------------------- Interface --------------------------------------
183  public:
184 
186 
192  const Domain & domain() const
193  {
194  return myImagePointer->domain();
195  }
196 
203  ConstRange constRange() const
204  {
205  return myImagePointer->constRange();
206  }
207 
214  Range range()
215  {
216  return myImagePointer->range();
217  }
218 
220 
221 
231  Value operator()(const Point & aPoint) const
232  {
233  return myImagePointer->operator()(aPoint);
234  }
235 
236 
238 
247  void setValue(const Point &aPoint, const Value &aValue)
248  {
249  myImagePointer->setValue(aPoint,aValue);
250  }
251 
252 
253 
255 
260  void selfDisplay ( std::ostream & out ) const;
261 
266  bool isValid() const
267  {
268  return (myImagePointer->isValid() );
269  }
270 
271 
276  const ImagePointer getPointer() const
277  {
278  return myImagePointer;
279  }
280 
281  // ------------------------- Protected Datas ------------------------------
282  private:
283  // ------------------------- Private Datas --------------------------------
284  protected:
285 
287  ImagePointer myImagePointer;
288 
289 
290  private:
291 
292 
293  // ------------------------- Internals ------------------------------------
294  private:
295 
296  }; // end of class Image
297 
298 
305  template <typename T>
306  std::ostream&
307  operator<< ( std::ostream & out, const Image<T> & object );
308 
309 } // namespace DGtal
310 
311 
313 // Includes inline functions.
314 #include "DGtal/images/Image.ih"
315 
316 // //
318 
319 #endif // !defined Image_h
320 
321 #undef Image_RECURSES
322 #endif // else defined(Image_RECURSES)
ConstRange constRange() const
Definition: Image.h:203
Aim: implements association bewteen points lying in a digital domain and values.
Definition: Image.h:69
TImageContainer ImageContainer
Types copied from the container.
Definition: Image.h:81
Trace trace
Definition: Common.h:137
TImageContainer::ConstRange ConstRange
Definition: Image.h:85
TImageContainer::Point Point
Definition: Image.h:83
Image(ImageContainer *anImageContainer)
Definition: Image.h:110
TImageContainer::OutputIterator OutputIterator
Definition: Image.h:87
void setValue(const Point &aPoint, const Value &aValue)
Definition: Image.h:247
const ImagePointer getPointer() const
Definition: Image.h:276
CowPtr< TImageContainer > ImagePointer
Pointer to the image container data.
Definition: Image.h:90
ImagePointer myImagePointer
Owning smart pointer on the image container.
Definition: Image.h:287
DGtal is the top-level namespace which contains all DGtal functions and types.
bool isValid() const
Image(const CowPtr< ImageContainer > &anImageContainerCowPointer)
Definition: Image.h:123
std::ostream & warning()
Image(const Image &other)
Definition: Image.h:150
Image(const ImageContainer &other)
Definition: Image.h:136
Value operator()(const Point &aPoint) const
Definition: Image.h:231
const Domain & domain() const
Definition: Image.h:192
TImageContainer::Value Value
Definition: Image.h:84
Aim: Defines the concept describing a read/write image, having an output iterator.
Definition: CImage.h:102
Aim: models of CVertexMap concept implement mapping between graph vertices and values.
Definition: CVertexMap.h:96
BOOST_CONCEPT_ASSERT((concepts::CImage< TImageContainer >))
Checking concepts.
bool isValid() const
Definition: Image.h:266
Image & operator=(const Image &other)
Definition: Image.h:163
void selfDisplay(std::ostream &out) const
TImageContainer::Range Range
Definition: Image.h:86
TImageContainer::Domain Domain
Definition: Image.h:82
Range range()
Definition: Image.h:214