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 m_numReadingThreads(0),
69 m_numEncodingThreads(0) {
70 }
71
72 ~TIFFContainerParameters() override = default;
73
74 int getTileWidth() const {
75 return m_tileWidth;
76 }
77
78 void setTileWidth(int tileWidth) {
79 m_tileWidth = tileWidth;
80 }
81
82 int getTileHeight() const {
83 return m_tileHeight;
84 }
85
86 void setTileHeight(int tileHeight) {
87 m_tileHeight = tileHeight;
88 }
89
90 int getNumZoomLevels() const {
91 return m_numZoomLevels;
92 }
93
94 void setNumZoomLevels(int numZoomLevels) {
95 m_numZoomLevels = numZoomLevels;
96 }
97
98 int getNumReadingThreads() const {
99 return m_numReadingThreads;
100 }
101
102 void setNumReadingThreads(int numReadingThreads) {
103 m_numReadingThreads = numReadingThreads;
104 }
105
106 int getNumEncodingThreads() const {
107 return m_numEncodingThreads;
108 }
109
110 void setNumEncodingThreads(int numEncodingThreads) {
111 m_numEncodingThreads = numEncodingThreads;
112 }
113
114 protected:
115 int m_tileWidth;
116 int m_tileHeight;
117 int m_numZoomLevels;
118 int m_numReadingThreads;
119 int m_numEncodingThreads;
120 };
121
122 class SLIDEIO_CONVERTER_EXPORTS ConverterParameters
123 {
124 public:
125 ConverterParameters(ImageFormat format, Container containerType, Compression compression);
126
127 ConverterParameters() {
128 initialize();
129 }
130
131 ConverterParameters(const ConverterParameters& other);
132 ConverterParameters& operator=(const ConverterParameters& other);
133
134 virtual ~ConverterParameters() = default;
135
136 ImageFormat getFormat() const {
137 return m_format;
138 }
139
140 const Rect& getRect() const {
141 return m_rect;
142 }
143
144 void setRect(const Rect& rect) {
145 m_rect = rect;
146 }
147
148 void setSliceRange(const Range& range) {
149 m_sliceRange = range;
150 }
151
152 const Range& getSliceRange() const {
153 return m_sliceRange;
154 }
155
156 void setChannelRange(const Range& range) {
157 m_channelRange = range;
158 }
159
160 const Range& getChannelRange() const {
161 return m_channelRange;
162 }
163
164 void setTFrameRange(const Range& range) {
165 m_frameRange = range;
166 }
167
168 const Range& getTFrameRange() const {
169 return m_frameRange;
170 }
171
172 Compression getEncoding() const;
173
174 Container getContainerType() const;
175
176 std::shared_ptr<EncodeParameters> getEncodeParameters() {
177 return m_encodeParameters;
178 }
179
180 std::shared_ptr<const EncodeParameters> getEncodeParameters() const {
181 return m_encodeParameters;
182 }
183
184 std::shared_ptr<ContainerParameters> getContainerParameters() {
185 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters);
186 }
187
188 std::shared_ptr<const ContainerParameters> getContainerParameters() const {
189 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters);
190 }
191
192 bool isValid() const {
193 return m_format != ImageFormat::Unknown && m_encodeParameters != nullptr && m_containerParameters !=
194 nullptr;
195 }
196
197 int getTileBatchSize() const {
198 return m_tileBatchSize;
199 }
200
201 void setTileBatchSize(int batchSize) {
202 m_tileBatchSize = batchSize;
203 }
204
205 void updateNotDefinedParameters(const std::shared_ptr<CVScene>& scene);
206
207 private:
208 void initialize();
209 void copyFrom(const ConverterParameters& other);
210
211 protected:
212 ImageFormat m_format;
213 Rect m_rect;
214 Range m_sliceRange;
215 Range m_channelRange;
216 Range m_frameRange;
217 int m_tileBatchSize;
218 std::shared_ptr<EncodeParameters> m_encodeParameters;
219 std::shared_ptr<ContainerParameters> m_containerParameters;
220 };
221
222 class SLIDEIO_CONVERTER_EXPORTS SVSConverterParameters : public ConverterParameters
223 {
224 public:
225 SVSConverterParameters(Compression compression)
226 : ConverterParameters(ImageFormat::SVS, Container::TIFF_CONTAINER, compression) {
227 }
228
229 ~SVSConverterParameters() override = default;
230
231 int getTileWidth() const {
232 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getTileWidth();
233 }
234
235 void setTileWidth(int tileWidth) {
236 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setTileWidth(tileWidth);
237 }
238
239 int getTileHeight() const {
240 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getTileHeight();
241 }
242
243 void setTileHeight(int tileHeight) {
244 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setTileHeight(tileHeight);
245 }
246 int getNumZoomLevels() const {
247 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getNumZoomLevels();
248 }
249
250 void setNumZoomLevels(int numZoomLevels) {
251 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setNumZoomLevels(numZoomLevels);
252 }
253
254 int getNumReadingThreads() const {
255 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getNumReadingThreads();
256 }
257
258 void setNumReadingThreads(int numReadingThreads) {
259 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setNumReadingThreads(numReadingThreads);
260 }
261
262 int getNumEncodingThreads() const {
263 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getNumEncodingThreads();
264 }
265
266 void setNumEncodingThreads(int numEncodingThreads) {
267 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setNumEncodingThreads(numEncodingThreads);
268 }
269 };
270
271 class SLIDEIO_CONVERTER_EXPORTS SVSJpegConverterParameters : public SVSConverterParameters
272 {
273 public:
274 SVSJpegConverterParameters()
275 : SVSConverterParameters(Compression::Jpeg) {
276 }
277
278 ~SVSJpegConverterParameters() override = default;
279
280 void setQuality(int q) {
281 std::static_pointer_cast<slideio::JpegEncodeParameters>(m_encodeParameters)->setQuality(q);
282 }
283
284 int getQuality() const {
285 return std::static_pointer_cast<slideio::JpegEncodeParameters>(m_encodeParameters)->getQuality();
286 }
287
288 };
289
290
291 class SLIDEIO_CONVERTER_EXPORTS SVSJp2KConverterParameters : public SVSConverterParameters
292 {
293 public:
294 SVSJp2KConverterParameters()
295 : SVSConverterParameters(Compression::Jpeg2000) {
296 }
297
298 ~SVSJp2KConverterParameters() override = default;
299
300 void setCompressionRate(float rate) {
301 std::static_pointer_cast<slideio::JP2KEncodeParameters>(m_encodeParameters)->setCompressionRate(rate);
302 }
303
304 float getCompressionRate() const {
305 return std::static_pointer_cast<slideio::JP2KEncodeParameters>(m_encodeParameters)->getCompressionRate();
306 }
307 };
308
309 class SLIDEIO_CONVERTER_EXPORTS OMETIFFConverterParameters : public ConverterParameters
310 {
311 public:
312 OMETIFFConverterParameters(Compression compression)
313 : ConverterParameters(ImageFormat::OME_TIFF, Container::TIFF_CONTAINER, compression) {
314 }
315
316 ~OMETIFFConverterParameters() override = default;
317
318 int getTileWidth() const {
319 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getTileWidth();
320 }
321
322 void setTileWidth(int tileWidth) {
323 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setTileWidth(tileWidth);
324 }
325
326 int getTileHeight() const {
327 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getTileHeight();
328 }
329
330 void setTileHeight(int tileHeight) {
331 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setTileHeight(tileHeight);
332 }
333
334 int getNumZoomLevels() const {
335 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getNumZoomLevels();
336 }
337
338 void setNumZoomLevels(int numZoomLevels) {
339 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setNumZoomLevels(numZoomLevels);
340 }
341
342 int getNumReadingThreads() const {
343 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getNumReadingThreads();
344 }
345
346 void setNumReadingThreads(int numReadingThreads) {
347 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setNumReadingThreads(numReadingThreads);
348 }
349
350 int getNumEncodingThreads() const {
351 return std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->getNumEncodingThreads();
352 }
353
354 void setNumEncodingThreads(int numEncodingThreads) {
355 std::static_pointer_cast<TIFFContainerParameters>(m_containerParameters)->setNumEncodingThreads(numEncodingThreads);
356 }
357 };
358
359 class SLIDEIO_CONVERTER_EXPORTS OMETIFFJpegConverterParameters : public OMETIFFConverterParameters
360 {
361 public:
362 OMETIFFJpegConverterParameters()
363 : OMETIFFConverterParameters(Compression::Jpeg) {
364 }
365
366 ~OMETIFFJpegConverterParameters() override = default;
367
368 void setQuality(int q) {
369 std::static_pointer_cast<slideio::JpegEncodeParameters>(m_encodeParameters)->setQuality(q);
370 }
371
372 int getQuality() const {
373 return std::static_pointer_cast<slideio::JpegEncodeParameters>(m_encodeParameters)->getQuality();
374 }
375 };
376
377
378 class SLIDEIO_CONVERTER_EXPORTS OMETIFFJp2KConverterParameters : public OMETIFFConverterParameters
379 {
380 public:
381 OMETIFFJp2KConverterParameters()
382 : OMETIFFConverterParameters(Compression::Jpeg2000) {
383 }
384
385 ~OMETIFFJp2KConverterParameters() override = default;
386
387 void setCompressionRate(float rate) {
388 std::static_pointer_cast<slideio::JP2KEncodeParameters>(m_encodeParameters)->setCompressionRate(rate);
389 }
390
391 float getCompressionRate() const {
392 return std::static_pointer_cast<slideio::JP2KEncodeParameters>(m_encodeParameters)->getCompressionRate();
393 }
394 };
395 }
396}
397
398#if defined(_MSC_VER)
399#pragma warning( pop )
400#endif
Definition: exceptions.hpp:15
Compression
raster data compression enum
Definition: slideio_enums.hpp:12
@ Jpeg
JPEG compression.
@ Jpeg2000
JPEG 2000 compression.