SourceXtractorPlusPlus  0.16
Please provide a description of the project.
ImageTile.h
Go to the documentation of this file.
1 
17 /*
18  * ImageTile.hm
19  *
20  * Created on: Feb 20, 2018
21  * Author: mschefer
22  */
23 
24 #ifndef _SEFRAMEWORK_IMAGE_IMAGETILE_H_
25 #define _SEFRAMEWORK_IMAGE_IMAGETILE_H_
26 #include <iostream>
29 
30 namespace SourceXtractor {
31 
32 class ImageSource;
33 
34 class ImageTile {
35 public:
36 
37  enum ImageType {
44  };
45 
46  static std::shared_ptr<ImageTile> create(ImageType image_type, int x, int y, int width, int height, std::shared_ptr<ImageSource> source=nullptr);
47 
48  virtual ~ImageTile() = default;
49 
50  bool isPixelInTile(int x, int y) const {
51  return x >= m_x && y >= m_y && x < m_max_x && y < m_max_y;
52  }
53 
54  int getPosX() const {
55  return m_x;
56  }
57 
58  int getPosY() const {
59  return m_y;
60  }
61 
62  virtual int getTileMemorySize() const = 0;
63 
64  int getWidth() const {
65  return m_max_x - m_x;
66  }
67 
68  int getHeight() const {
69  return m_max_y - m_y;
70  }
71 
72  template<typename T>
73  T getValue(int x, int y) const {
74  T value;
75  getValue(x, y, value);
76  return value;
77  }
78 
79  virtual void setValue(int x, int y, float value) = 0;
80  virtual void setValue(int x, int y, double value) = 0;
81  virtual void setValue(int x, int y, int value) = 0;
82  virtual void setValue(int x, int y, unsigned int value) = 0;
83  virtual void setValue(int x, int y, std::int64_t value) = 0;
84 
85  virtual void* getDataPtr()=0;
86 
87  void setModified(bool modified) {
88  m_modified = modified;
89  }
90 
91  bool isModified() const {
92  return m_modified;
93  }
94 
95  void saveIfModified();
96 
97  static ImageType getTypeValue(float) {
98  return FloatImage;
99  }
100 
101  static ImageType getTypeValue(double) {
102  return DoubleImage;
103  }
104 
105  static ImageType getTypeValue(int) {
106  return IntImage;
107  }
108 
109  static ImageType getTypeValue(unsigned int) {
110  return UIntImage;
111  }
112 
114  return LongLongImage;
115  }
116 
117  static size_t getTypeSize(ImageType image_type) {
118  switch (image_type) {
119  default:
121  case ImageTile::IntImage:
123  return 4;
126  return 8;
127  }
128  }
129 
130  ImageType getType() const {
131  return m_image_type;
132  }
133 
134 protected:
135  virtual void getValue(int x, int y, float& value) const = 0;
136  virtual void getValue(int x, int y, double& value) const = 0;
137  virtual void getValue(int x, int y, int& value) const = 0;
138  virtual void getValue(int x, int y, unsigned int& value) const = 0;
139  virtual void getValue(int x, int y, std::int64_t& value) const = 0;
140 
141  ImageTile(ImageType image_type, int x, int y, int width, int height, std::shared_ptr<ImageSource> source=nullptr)
142  : m_modified(false), m_image_type(image_type), m_source(source), m_x(x), m_y(y), m_max_x(x+width), m_max_y(y+height) {
143  }
144 
145  ImageTile(const ImageTile&) = delete;
146  ImageTile(ImageTile&&) = delete;
147  ImageTile& operator=(const ImageTile&) = delete;
149 
153  int m_x, m_y;
155 };
156 
157 template<typename T>
158 class ImageTileWithType final : public ImageTile {
159 public:
160 
161  ImageTileWithType(int x, int y, int width, int height, std::shared_ptr<ImageSource> source)
162  : ImageTile(getTypeValue(T()), x, y, width, height, source) {
163  m_tile_image = VectorImage<T>::create(width, height);
164  }
165 
166  virtual ~ImageTileWithType() {
167  saveIfModified();
168  }
169 
170  int getTileMemorySize() const override {
171  return getWidth() * getHeight() * sizeof(T);
172  }
173 
174  void* getDataPtr() override {
175  return &m_tile_image->getData()[0];
176  }
177 
179  return m_tile_image;
180  }
181 
182  template<typename U>
183  void getValueImpl(int x, int y, U& value) const {
184  assert(isPixelInTile(x,y));
185  value = m_tile_image->getValue(x-m_x, y-m_y);
186  }
187 
188  template<typename U>
189  void setValueImpl(int x, int y, U value) {
190  assert(isPixelInTile(x,y));
191  m_tile_image->setValue(x-m_x, y-m_y, value);
192  }
193 
194  void getValue(int x, int y, float& value) const override {
195  getValueImpl(x, y, value);
196  }
197 
198  void getValue(int x, int y, double& value) const override {
199  getValueImpl(x, y, value);
200  }
201 
202  void getValue(int x, int y, int& value) const override {
203  getValueImpl(x, y, value);
204  }
205 
206  void getValue(int x, int y, unsigned int& value) const override {
207  getValueImpl(x, y, value);
208  }
209 
210  void getValue(int x, int y, std::int64_t& value) const override {
211  getValueImpl(x, y, value);
212  }
213 
214  void setValue(int x, int y, float value) override {
215  setValueImpl(x, y, value);
216  }
217 
218  void setValue(int x, int y, double value) override {
219  setValueImpl(x, y, value);
220  }
221 
222  void setValue(int x, int y, int value) override {
223  setValueImpl(x, y, value);
224  }
225 
226  void setValue(int x, int y, unsigned int value) override {
227  setValueImpl(x, y, value);
228  }
229 
230  void setValue(int x, int y, std::int64_t value) override {
231  setValueImpl(x, y, value);
232  }
233 
234 private:
236 };
237 
238 }
239 
240 
241 #endif /* _SEFRAMEWORK_IMAGE_IMAGETILE_H_ */
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
ImageTileWithType(int x, int y, int width, int height, std::shared_ptr< ImageSource > source)
Definition: ImageTile.h:161
void getValue(int x, int y, int &value) const override
Definition: ImageTile.h:202
void * getDataPtr() override
Definition: ImageTile.h:174
void getValue(int x, int y, float &value) const override
Definition: ImageTile.h:194
void setValueImpl(int x, int y, U value)
Definition: ImageTile.h:189
void setValue(int x, int y, unsigned int value) override
Definition: ImageTile.h:226
void setValue(int x, int y, std::int64_t value) override
Definition: ImageTile.h:230
void setValue(int x, int y, float value) override
Definition: ImageTile.h:214
std::shared_ptr< VectorImage< T > > m_tile_image
Definition: ImageTile.h:235
void getValue(int x, int y, double &value) const override
Definition: ImageTile.h:198
void getValue(int x, int y, unsigned int &value) const override
Definition: ImageTile.h:206
void setValue(int x, int y, double value) override
Definition: ImageTile.h:218
void getValueImpl(int x, int y, U &value) const
Definition: ImageTile.h:183
const std::shared_ptr< VectorImage< T > > & getImage() const
Definition: ImageTile.h:178
int getTileMemorySize() const override
Definition: ImageTile.h:170
void setValue(int x, int y, int value) override
Definition: ImageTile.h:222
void getValue(int x, int y, std::int64_t &value) const override
Definition: ImageTile.h:210
bool isModified() const
Definition: ImageTile.h:91
virtual void setValue(int x, int y, float value)=0
std::shared_ptr< ImageSource > m_source
Definition: ImageTile.h:152
virtual void getValue(int x, int y, int &value) const =0
ImageTile & operator=(const ImageTile &)=delete
virtual void setValue(int x, int y, double value)=0
virtual void getValue(int x, int y, unsigned int &value) const =0
static ImageType getTypeValue(double)
Definition: ImageTile.h:101
virtual void getValue(int x, int y, float &value) const =0
static size_t getTypeSize(ImageType image_type)
Definition: ImageTile.h:117
virtual ~ImageTile()=default
ImageTile(ImageType image_type, int x, int y, int width, int height, std::shared_ptr< ImageSource > source=nullptr)
Definition: ImageTile.h:141
virtual void setValue(int x, int y, int value)=0
virtual void * getDataPtr()=0
virtual void setValue(int x, int y, std::int64_t value)=0
static ImageType getTypeValue(int)
Definition: ImageTile.h:105
static ImageType getTypeValue(float)
Definition: ImageTile.h:97
static ImageType getTypeValue(unsigned int)
Definition: ImageTile.h:109
virtual void getValue(int x, int y, std::int64_t &value) const =0
virtual void getValue(int x, int y, double &value) const =0
virtual void setValue(int x, int y, unsigned int value)=0
static ImageType getTypeValue(std::int64_t)
Definition: ImageTile.h:113
void setModified(bool modified)
Definition: ImageTile.h:87
virtual int getTileMemorySize() const =0
bool isPixelInTile(int x, int y) const
Definition: ImageTile.h:50
T getValue(int x, int y) const
Definition: ImageTile.h:73
ImageTile(ImageTile &&)=delete
ImageType getType() const
Definition: ImageTile.h:130
ImageTile(const ImageTile &)=delete
static std::shared_ptr< ImageTile > create(ImageType image_type, int x, int y, int width, int height, std::shared_ptr< ImageSource > source=nullptr)
Definition: ImageTile.cpp:24
ImageTile & operator=(ImageTile &&)=delete
static std::shared_ptr< VectorImage< T > > create(Args &&... args)
Definition: VectorImage.h:100