SourceXtractorPlusPlus  0.14
Please provide a description of the project.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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() {
50  }
51 
52  bool isPixelInTile(int x, int y) const {
53  return x >= m_x && y >= m_y && x < m_max_x && y < m_max_y;
54  }
55 
56  int getPosX() const {
57  return m_x;
58  }
59 
60  int getPosY() const {
61  return m_y;
62  }
63 
64  virtual int getTileMemorySize() const = 0;
65 
66  int getWidth() const {
67  return m_max_x - m_x;
68  }
69 
70  int getHeight() const {
71  return m_max_y - m_y;
72  }
73 
74  template<typename T>
75  T getValue(int x, int y) const {
76  T value;
77  getValue(x, y, value);
78  return value;
79  }
80 
81  virtual void setValue(int x, int y, float value) = 0;
82  virtual void setValue(int x, int y, double value) = 0;
83  virtual void setValue(int x, int y, int value) = 0;
84  virtual void setValue(int x, int y, unsigned int value) = 0;
85  virtual void setValue(int x, int y, std::int64_t value) = 0;
86 
87  virtual void* getDataPtr()=0;
88 
89  void setModified(bool modified) {
90  m_modified = modified;
91  }
92 
93  bool isModified() const {
94  return m_modified;
95  }
96 
97  virtual void saveIfModified();
98 
99  static ImageType getTypeValue(float) {
100  return FloatImage;
101  }
102 
103  static ImageType getTypeValue(double) {
104  return DoubleImage;
105  }
106 
107  static ImageType getTypeValue(int) {
108  return IntImage;
109  }
110 
111  static ImageType getTypeValue(unsigned int) {
112  return UIntImage;
113  }
114 
116  return LongLongImage;
117  }
118 
119  static size_t getTypeSize(ImageType image_type) {
120  switch (image_type) {
121  default:
123  case ImageTile::IntImage:
125  return 4;
128  return 8;
129  }
130  }
131 
132  ImageType getType() const {
133  return m_image_type;
134  }
135 
136 protected:
137  virtual void getValue(int x, int y, float& value) const = 0;
138  virtual void getValue(int x, int y, double& value) const = 0;
139  virtual void getValue(int x, int y, int& value) const = 0;
140  virtual void getValue(int x, int y, unsigned int& value) const = 0;
141  virtual void getValue(int x, int y, std::int64_t& value) const = 0;
142 
143  ImageTile(ImageType image_type, int x, int y, int width, int height, std::shared_ptr<ImageSource> source=nullptr)
144  : 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) {
145  }
146 
147  ImageTile(const ImageTile&) = delete;
148  ImageTile(ImageTile&&) = delete;
149  ImageTile& operator=(const ImageTile&) = delete;
150  ImageTile& operator=(ImageTile&&) = delete;
151 
155  int m_x, m_y;
157 };
158 
159 template<typename T>
160 class ImageTileWithType final : public ImageTile {
161 public:
162 
164  : ImageTile(getTypeValue(T()), x, y, width, height, source) {
165  m_tile_image = VectorImage<T>::create(width, height);
166  }
167 
168  int getTileMemorySize() const override {
169  return getWidth() * getHeight() * sizeof(T);
170  }
171 
172  void* getDataPtr() override {
173  return &m_tile_image->getData()[0];
174  }
175 
177  return m_tile_image;
178  }
179 
180  template<typename U>
181  void getValueImpl(int x, int y, U& value) const {
182  assert(isPixelInTile(x,y));
183  value = m_tile_image->getValue(x-m_x, y-m_y);
184  }
185 
186  template<typename U>
187  void setValueImpl(int x, int y, U value) {
188  assert(isPixelInTile(x,y));
189  m_tile_image->setValue(x-m_x, y-m_y, value);
190  }
191 
192  void getValue(int x, int y, float& value) const override {
193  getValueImpl(x, y, value);
194  }
195 
196  void getValue(int x, int y, double& value) const override {
197  getValueImpl(x, y, value);
198  }
199 
200  void getValue(int x, int y, int& value) const override {
201  getValueImpl(x, y, value);
202  }
203 
204  void getValue(int x, int y, unsigned int& value) const override {
205  getValueImpl(x, y, value);
206  }
207 
208  void getValue(int x, int y, std::int64_t& value) const override {
209  getValueImpl(x, y, value);
210  }
211 
212  void setValue(int x, int y, float value) override {
213  setValueImpl(x, y, value);
214  }
215 
216  void setValue(int x, int y, double value) override {
217  setValueImpl(x, y, value);
218  }
219 
220  void setValue(int x, int y, int value) override {
221  setValueImpl(x, y, value);
222  }
223 
224  void setValue(int x, int y, unsigned int value) override {
225  setValueImpl(x, y, value);
226  }
227 
228  void setValue(int x, int y, std::int64_t value) override {
229  setValueImpl(x, y, value);
230  }
231 
232 private:
234 };
235 
236 }
237 
238 
239 #endif /* _SEFRAMEWORK_IMAGE_IMAGETILE_H_ */
void setValueImpl(int x, int y, U value)
Definition: ImageTile.h:187
void getValue(int x, int y, double &value) const override
Definition: ImageTile.h:196
void setValue(int x, int y, unsigned int value) override
Definition: ImageTile.h:224
std::shared_ptr< VectorImage< T > > m_tile_image
Definition: ImageTile.h:233
ImageType getType() const
Definition: ImageTile.h:132
void getValue(int x, int y, unsigned int &value) const override
Definition: ImageTile.h:204
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
void getValue(int x, int y, float &value) const override
Definition: ImageTile.h:192
static std::shared_ptr< VectorImage< T > > create(Args &&...args)
Definition: VectorImage.h:89
ImageTile(ImageType image_type, int x, int y, int width, int height, std::shared_ptr< ImageSource > source=nullptr)
Definition: ImageTile.h:143
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
void setModified(bool modified)
Definition: ImageTile.h:89
static ImageType getTypeValue(unsigned int)
Definition: ImageTile.h:111
int getPosX() const
Definition: ImageTile.h:56
void setValue(int x, int y, int value) override
Definition: ImageTile.h:220
ImageTile & operator=(const ImageTile &)=delete
const std::shared_ptr< VectorImage< T > > & getImage() const
Definition: ImageTile.h:176
virtual void setValue(int x, int y, float value)=0
virtual void saveIfModified()
Definition: ImageTile.cpp:40
void getValue(int x, int y, int &value) const override
Definition: ImageTile.h:200
void getValue(int x, int y, std::int64_t &value) const override
Definition: ImageTile.h:208
static size_t getTypeSize(ImageType image_type)
Definition: ImageTile.h:119
virtual int getTileMemorySize() const =0
std::shared_ptr< ImageSource > m_source
Definition: ImageTile.h:154
bool isModified() const
Definition: ImageTile.h:93
int getWidth() const
Definition: ImageTile.h:66
void setValue(int x, int y, std::int64_t value) override
Definition: ImageTile.h:228
bool isPixelInTile(int x, int y) const
Definition: ImageTile.h:52
void setValue(int x, int y, float value) override
Definition: ImageTile.h:212
ImageTileWithType(int x, int y, int width, int height, std::shared_ptr< ImageSource > source)
Definition: ImageTile.h:163
static ImageType getTypeValue(int)
Definition: ImageTile.h:107
T getValue(int x, int y) const
Definition: ImageTile.h:75
static ImageType getTypeValue(double)
Definition: ImageTile.h:103
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
int getHeight() const
Definition: ImageTile.h:70
static ImageType getTypeValue(std::int64_t)
Definition: ImageTile.h:115
int getTileMemorySize() const override
Definition: ImageTile.h:168
int getPosY() const
Definition: ImageTile.h:60
void * getDataPtr() override
Definition: ImageTile.h:172
void getValueImpl(int x, int y, U &value) const
Definition: ImageTile.h:181
static ImageType getTypeValue(float)
Definition: ImageTile.h:99
virtual void * getDataPtr()=0
void setValue(int x, int y, double value) override
Definition: ImageTile.h:216