SourceXtractorPlusPlus 1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
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
30namespace SourceXtractor {
31
32class ImageSource;
33
34class ImageTile {
35public:
36
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
106 return IntImage;
107 }
108
109 static ImageType getTypeValue(unsigned int) {
110 return UIntImage;
111 }
112
116
117 static size_t getTypeSize(ImageType image_type) {
118 switch (image_type) {
119 default:
123 return 4;
126 return 8;
127 }
128 }
129
131 return m_image_type;
132 }
133
134protected:
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
157template<typename T>
158class ImageTileWithType final : public ImageTile {
159public:
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
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
234private:
236};
237
238}
239
240
241#endif /* _SEFRAMEWORK_IMAGE_IMAGETILE_H_ */
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 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
int getTileMemorySize() const override
Definition ImageTile.h:170
void setValue(int x, int y, int value) override
Definition ImageTile.h:222
const std::shared_ptr< VectorImage< T > > & getImage() const
Definition ImageTile.h:178
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
ImageTile & operator=(ImageTile &&)=delete
std::shared_ptr< ImageSource > m_source
Definition ImageTile.h:152
virtual void getValue(int x, int y, int &value) const =0
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 * getDataPtr()=0
virtual void setValue(int x, int y, int value)=0
ImageTile & operator=(const ImageTile &)=delete
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
static std::shared_ptr< VectorImage< T > > create(Args &&... args)