SlideIO 2.0.0
Open-source library for reading of medical images
Loading...
Searching...
No Matches
converterparameters.hpp
1// This file is part of slideio project.
2// It is subject to the license terms in the LICENSE file found in the top-level directory
3// of this distribution and at http://slideio.com/license.html.
4#pragma once
5#include "slideio/imagetools/encodeparameters.hpp"
6#include "slideio/base/rect.hpp"
7#include "slideio/base/range.hpp"
8#include "slideio/base/slideio_enums.hpp"
9#include "slideio/converter/converter_def.hpp"
10
11#if defined(_MSC_VER)
12#pragma warning( push )
13#pragma warning(disable: 4251)
14#endif
15
16namespace slideio
17{
18 class CVScene;
19}
20
21namespace slideio
22{
23 namespace converter
24 {
25 enum ImageFormat
26 {
27 Unknown,
28 SVS,
29 OME_TIFF
30 };
31
32 enum Encoding
33 {
34 UNKNOWN_ENCODING,
35 JPEG,
36 JPEG2000
37 };
38
39 enum Container
40 {
41 UNKNOWN_CONTAINER,
42 TIFF_CONTAINER
43 };
44
45 class ContainerParameters
46 {
47 protected:
48 ContainerParameters(Container containerType) : m_containerType(containerType) {
49 };
50 virtual ~ContainerParameters() = default;
51
52 public:
53 Container getContainerType() const {
54 return m_containerType;
55 }
56
57 private:
58 Container m_containerType;
59 };
60
61 class TIFFContainerParameters : public ContainerParameters
62 {
63 public:
64 TIFFContainerParameters() : ContainerParameters(TIFF_CONTAINER),
65 m_tileWidth(256),
66 m_tileHeight(256),
67 m_numZoomLevels(-1) {
68 }
69
70 ~TIFFContainerParameters() override = default;
71
72 int getTileWidth() const {
73 return m_tileWidth;
74 }
75
76 void setTileWidth(int tileWidth) {
77 m_tileWidth = tileWidth;
78 }
79
80 int getTileHeight() const {
81 return m_tileHeight;
82 }
83
84 void setTileHeight(int tileHeight) {
85 m_tileHeight = tileHeight;
86 }
87
88 int getNumZoomLevels() const {
89 return m_numZoomLevels;
90 }
91
92 void setNumZoomLevels(int numZoomLevels) {
93 m_numZoomLevels = numZoomLevels;
94 }
95
96 protected:
97 int m_tileWidth;
98 int m_tileHeight;
99 int m_numZoomLevels;
100 };
101
102 class SLIDEIO_CONVERTER_EXPORTS ConverterParameters
103 {
104 public:
105 ConverterParameters(ImageFormat format, Container containerType, Compression compression);
106
107 ConverterParameters() {
108 initialize();
109 }
110
111 ConverterParameters(const ConverterParameters& other);
112 ConverterParameters& operator=(const ConverterParameters& other);
113
114 virtual ~ConverterParameters() = default;
115
116 ImageFormat getFormat() const {
117 return m_format;
118 }
119
120 const Rect& getRect() const {
121 return m_rect;
122 }
123
124 void setRect(const Rect& rect) {
125 m_rect = rect;
126 }
127
128 void setSliceRange(const Range& range) {
129 m_sliceRange = range;
130 }
131
132 const Range& getSliceRange() const {
133 return m_sliceRange;
134 }
135
136 void setChannelRange(const Range& range) {
137 m_channelRange = range;
138 }
139
140 const Range& getChannelRange() const {
141 return m_channelRange;
142 }
143
144 void setTFrameRange(const Range& range) {
145 m_frameRange = range;
146 }
147
148 const Range& getTFrameRange() const {
149 return m_frameRange;
150 }
151
152 Compression getEncoding() const;
153
154 Container getContainerType() const;
155
156 std::shared_ptr<EncodeParameters> getEncodeParameters() {
157 return m_encodeParameters;
158 }
159
160 std::shared_ptr<const EncodeParameters> getEncodeParameters() const {
161 return m_encodeParameters;
162 }
163
164 std::shared_ptr<ContainerParameters> getContainerParameters() {
165 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters);
166 }
167
168 std::shared_ptr<const ContainerParameters> getContainerParameters() const {
169 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters);
170 }
171
172 bool isValid() const {
173 return m_format != ImageFormat::Unknown && m_encodeParameters != nullptr && m_containerParameters !=
174 nullptr;
175 }
176
177 void updateNotDefinedParameters(const std::shared_ptr<CVScene>& scene);
178
179 private:
180 void initialize();
181 void copyFrom(const ConverterParameters& other);
182
183 protected:
184 ImageFormat m_format;
185 Rect m_rect;
186 Range m_sliceRange;
187 Range m_channelRange;
188 Range m_frameRange;
189 std::shared_ptr<EncodeParameters> m_encodeParameters;
190 std::shared_ptr<ContainerParameters> m_containerParameters;
191 };
192
193 class SLIDEIO_CONVERTER_EXPORTS SVSConverterParameters : public ConverterParameters
194 {
195 public:
196 SVSConverterParameters(Compression compression)
197 : ConverterParameters(ImageFormat::SVS, Container::TIFF_CONTAINER, compression) {
198 }
199
200 ~SVSConverterParameters() override = default;
201
202 int getTileWidth() const {
203 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getTileWidth();
204 }
205
206 void setTileWidth(int tileWidth) {
207 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setTileWidth(tileWidth);
208 }
209
210 int getTileHeight() const {
211 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getTileHeight();
212 }
213
214 void setTileHeight(int tileHeight) {
215 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setTileHeight(tileHeight);
216 }
217 int getNumZoomLevels() const {
218 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getNumZoomLevels();
219 }
220
221 void setNumZoomLevels(int numZoomLevels) {
222 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setNumZoomLevels(numZoomLevels);
223 }
224 };
225
226 class SLIDEIO_CONVERTER_EXPORTS SVSJpegConverterParameters : public SVSConverterParameters
227 {
228 public:
229 SVSJpegConverterParameters()
230 : SVSConverterParameters(Compression::Jpeg) {
231 }
232
233 ~SVSJpegConverterParameters() override = default;
234
235 void setQuality(int q) {
236 std::static_pointer_cast<slideio::JpegEncodeParameters>(m_encodeParameters)->setQuality(q);
237 }
238
239 int getQuality() const {
240 return std::static_pointer_cast<slideio::JpegEncodeParameters>(m_encodeParameters)->getQuality();
241 }
242
243 };
244
245
246 class SLIDEIO_CONVERTER_EXPORTS SVSJp2KConverterParameters : public SVSConverterParameters
247 {
248 public:
249 SVSJp2KConverterParameters()
250 : SVSConverterParameters(Compression::Jpeg2000) {
251 }
252
253 ~SVSJp2KConverterParameters() override = default;
254
255 void setCompressionRate(float rate) {
256 std::static_pointer_cast<slideio::JP2KEncodeParameters>(m_encodeParameters)->setCompressionRate(rate);
257 }
258
259 float getCompressionRate() const {
260 return std::static_pointer_cast<slideio::JP2KEncodeParameters>(m_encodeParameters)->getCompressionRate();
261 }
262 };
263
264 class SLIDEIO_CONVERTER_EXPORTS OMETIFFConverterParameters : public ConverterParameters
265 {
266 public:
267 OMETIFFConverterParameters(Compression compression)
268 : ConverterParameters(ImageFormat::OME_TIFF, Container::TIFF_CONTAINER, compression) {
269 }
270
271 ~OMETIFFConverterParameters() override = default;
272
273 int getTileWidth() const {
274 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getTileWidth();
275 }
276
277 void setTileWidth(int tileWidth) {
278 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setTileWidth(tileWidth);
279 }
280
281 int getTileHeight() const {
282 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getTileHeight();
283 }
284
285 void setTileHeight(int tileHeight) {
286 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setTileHeight(tileHeight);
287 }
288
289 int getNumZoomLevels() const {
290 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getNumZoomLevels();
291 }
292
293 void setNumZoomLevels(int numZoomLevels) {
294 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setNumZoomLevels(numZoomLevels);
295 }
296 };
297
298 class SLIDEIO_CONVERTER_EXPORTS OMETIFFJpegConverterParameters : public OMETIFFConverterParameters
299 {
300 public:
301 OMETIFFJpegConverterParameters()
302 : OMETIFFConverterParameters(Compression::Jpeg) {
303 }
304
305 ~OMETIFFJpegConverterParameters() override = default;
306
307 void setQuality(int q) {
308 std::static_pointer_cast<slideio::JpegEncodeParameters>(m_encodeParameters)->setQuality(q);
309 }
310
311 int getQuality() const {
312 return std::static_pointer_cast<slideio::JpegEncodeParameters>(m_encodeParameters)->getQuality();
313 }
314 };
315
316
317 class SLIDEIO_CONVERTER_EXPORTS OMETIFFJp2KConverterParameters : public OMETIFFConverterParameters
318 {
319 public:
320 OMETIFFJp2KConverterParameters()
321 : OMETIFFConverterParameters(Compression::Jpeg2000) {
322 }
323
324 ~OMETIFFJp2KConverterParameters() override = default;
325
326 void setCompressionRate(float rate) {
327 std::static_pointer_cast<slideio::JP2KEncodeParameters>(m_encodeParameters)->setCompressionRate(rate);
328 }
329
330 float getCompressionRate() const {
331 return std::static_pointer_cast<slideio::JP2KEncodeParameters>(m_encodeParameters)->getCompressionRate();
332 }
333 };
334 }
335}
336
337#if defined(_MSC_VER)
338#pragma warning( pop )
339#endif
Definition: exceptions.hpp:15
Compression
raster data compression enum
Definition: slideio_enums.hpp:12
@ Jpeg
JPEG compression.
@ Jpeg2000
JPEG 2000 compression.