Enrollment 28.2.0
Loading...
Searching...
No Matches
ImageEncoder.h
Go to the documentation of this file.
1
9
10#pragma once
11
13#include "enrollment/Export.h"
20#include <array>
21#include <atomic>
22#include <functional>
23#include <map>
24#include <memory>
25#include <mutex>
26#include <set>
27#include <vector>
28
29namespace inno
30{
31 extern "C"
32 {
33 using inno_AllocateData = uint8_t* (*)(void*, size_t);
34 INNO_ENROLLMENT_API void inno_ImageEncoder_Encode(const uint8_t* raw,
35 unsigned int rawHeight,
36 unsigned int rawWidth,
37 unsigned int rawDpi,
38 uint8_t rawType,
39 const int* options,
40 size_t optionLength,
41 uint8_t type,
42 inno_AllocateData allocator,
43 void* container,
44 ErrorCallbacks errorCallbacks);
45 INNO_ENROLLMENT_API int inno_ImageEncoder_GetPngCompressionLevelId();
46 INNO_ENROLLMENT_API size_t inno_ImageEncoder_GetRawLength(unsigned int rawHeight,
47 unsigned int rawWidth,
48 unsigned char channels);
49 INNO_ENROLLMENT_API void inno_ImageEncoder_EncodeRaw(uint8_t* storage,
50 unsigned int rawHeight,
51 unsigned int rawWidth,
52 unsigned int rawDpi,
53 uint8_t rawType,
54 const uint8_t* raw,
55 size_t rawSize);
56
57 INNO_ENROLLMENT_API int inno_ImageEncoder_GeJpgQualityId();
58 INNO_ENROLLMENT_API int inno_ImageEncoder_GeJpgProgressiveId();
59 INNO_ENROLLMENT_API int inno_ImageEncoder_GeJpgOptimizedId();
60 INNO_ENROLLMENT_API int inno_ImageEncoder_GetTiffCompressionId();
61 INNO_ENROLLMENT_API int inno_ImageEncoder_GetTiffUnitId();
62 INNO_ENROLLMENT_API int inno_ImageEncoder_GetTiffXDpiId();
63 INNO_ENROLLMENT_API int inno_ImageEncoder_GetTiffYDpiId();
64 INNO_ENROLLMENT_API int inno_ImageEncoder_GeWebpQualityId();
65 INNO_ENROLLMENT_API int inno_ImageEncoder_GetJpg2000CompressionRateId();
66 }
67
68 class BmpImageEncoder;
69 class PngImageEncoder;
70 class TiffImageEncoder;
71 class JpgImageEncoder;
72 class Jp2ImageEncoder;
73 class WsqImageEncoder;
74 class IRawImageEncoder;
75 class WebpImageEncoder;
76
80 */
81 class ImageEncoderVisitor
82 {
83 public:
84 virtual void Visit(const BmpImageEncoder& encoder) = 0;
85 virtual void Visit(const PngImageEncoder& encoder) = 0;
86 virtual void Visit(const TiffImageEncoder& encoder) = 0;
87 virtual void Visit(const JpgImageEncoder& encoder) = 0;
88 virtual void Visit(const Jp2ImageEncoder& encoder) = 0;
89 virtual void Visit(const WsqImageEncoder& encoder) = 0;
90 virtual void Visit(const IRawImageEncoder& encoder) = 0;
91 virtual void Visit(const WebpImageEncoder& encoder) = 0;
92
93 ImageEncoderVisitor() = default;
94 virtual ~ImageEncoderVisitor() = default;
95 ImageEncoderVisitor(const ImageEncoderVisitor&) = delete;
96 ImageEncoderVisitor(ImageEncoderVisitor&&) = delete;
97 ImageEncoderVisitor& operator=(const ImageEncoderVisitor&) = delete;
98 ImageEncoderVisitor& operator=(ImageEncoderVisitor&&) = delete;
99 };
100
105 */
106 class ImageEncoder
107 {
108 public:
114 [[nodiscard]] virtual std::vector<uint8_t> Encode(const RawImage& raw) const = 0;
119 virtual void Accept(ImageEncoderVisitor& visitor) const = 0;
120
128 static std::shared_ptr<ImageEncoder> Create(ImageType type);
129
130 ImageEncoder() = default;
131 ImageEncoder(const ImageEncoder&) = delete;
132 ImageEncoder(ImageEncoder&&) = delete;
133 ImageEncoder& operator=(const ImageEncoder&) = delete;
134 ImageEncoder& operator=(ImageEncoder&&) = delete;
135 virtual ~ImageEncoder() = default;
136 };
137
142 */
143 class SupportedImageEncoder : public ImageEncoder
144 {
145 public:
152 */
153 std::vector<uint8_t> Encode(const RawImage& raw) const final
154 {
155 if (raw.height == 0 || raw.width == 0 || raw.Data().empty())
156 {
157 throw InvalidImageArgumentException("Empty image");
158 }
159
160 std::vector<uint8_t> encodedImage;
161 auto opt = ComposeOptions(raw);
162
163 inno_ImageEncoder_Encode(raw.Data().data(),
164 raw.height,
165 raw.width,
166 static_cast<unsigned int>(raw.dpi),
167 static_cast<uint8_t>(raw.type),
168 opt.data(),
169 opt.size(),
170 static_cast<ImageType::Type>(type),
171 &SupportedImageEncoder::AllocateData,
172 &encodedImage,
173 ThrowOnError{});
174
175 return encodedImage;
176 }
177
178 SupportedImageEncoder() = delete;
181 SupportedImageEncoder& operator=(const SupportedImageEncoder&) = delete;
182 SupportedImageEncoder& operator=(SupportedImageEncoder&&) = delete;
183 virtual ~SupportedImageEncoder() = default;
184
185 protected:
186 explicit SupportedImageEncoder(ImageType::Type imageType)
187 : type(imageType)
188 {
189 }
190
191 void SetOption(int key, int value)
192 {
193 const std::scoped_lock lock(mux);
194 options[key] = value;
195 }
196
197 private:
198 ImageType type;
199 std::map<int, int> options;
200 mutable std::mutex mux;
201
202 using AllocFunc = uint8_t* (*)(void*, std::size_t);
203 static uint8_t* AllocateData(void* container, const size_t length)
204 {
205 std::vector<uint8_t>& vec = *static_cast<std::vector<uint8_t>*>(container);
206 vec.resize(length);
207 return vec.data();
208 }
209
210 virtual void AddOptionsForImageAttributes(const RawImage& /*image*/,
211 const std::function<void(int, int)>& /*addOption*/) const
212 {
213 }
214
215 std::vector<int> ComposeOptions(const RawImage& image) const
216 {
217 std::vector<int> o;
218 o.reserve(options.size() * 2);
219
220 {
221 const std::scoped_lock lock(mux);
222 for (auto const& [key, val] : options)
223 {
224 o.push_back(key);
225 o.push_back(val);
226 }
227 }
228
229 AddOptionsForImageAttributes(image,
230 [&](int key, int val)
231 {
232 o.push_back(key);
233 o.push_back(val);
234 });
235 return o;
236 }
237 };
238
242 */
243 class BmpImageEncoder : public SupportedImageEncoder
244 {
245 public:
248 */
250 : SupportedImageEncoder(ImageType::BMP)
251 {
252 }
254 void Accept(ImageEncoderVisitor& visitor) const final
255 {
256 visitor.Visit(*this);
257 }
258
259 BmpImageEncoder(const BmpImageEncoder&) = delete;
261 BmpImageEncoder& operator=(const BmpImageEncoder&) = delete;
262 BmpImageEncoder& operator=(BmpImageEncoder&&) = delete;
263 virtual ~BmpImageEncoder() = default;
264 };
265
269 */
270 class PngImageEncoder : public SupportedImageEncoder
271 {
272 public:
276 */
278 : SupportedImageEncoder(ImageType::PNG)
279 , lev(DefaultLevel)
280 {
282 }
283
289 */
290 void SetCompressionLevel(int level)
291 {
292 static const int MinLevel = 0;
293 static const int MaxLevel = 9;
294 if (level < MinLevel || level > MaxLevel)
295 {
296 throw EnrollmentInvalidArgumentException("PNG compression level must be in <0,9>");
297 }
298 lev = level;
299 SetOption(inno_ImageEncoder_GetPngCompressionLevelId(), level);
300 }
301
305 */
306 int GetCompressionLevel() const
307 {
308 return lev;
309 }
311 void Accept(ImageEncoderVisitor& visitor) const final
312 {
313 visitor.Visit(*this);
314 }
315
316 PngImageEncoder(const PngImageEncoder&) = delete;
318 PngImageEncoder& operator=(const PngImageEncoder&) = delete;
319 PngImageEncoder& operator=(PngImageEncoder&&) = delete;
320 virtual ~PngImageEncoder() = default;
321
322 private:
323 static const int DefaultLevel = 9;
324 std::atomic<int> lev;
325 };
326
330 */
331 class JpgImageEncoder : public SupportedImageEncoder
332 {
333 public:
340 // The member variables are initialized in constructor body
341 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init,hicpp-member-init)
343 : SupportedImageEncoder(ImageType::JPG)
344 {
345 SetQuality(DefaultQuality);
346 SetProgressive(false);
347 SetOptimize(false);
348 }
349
354 */
355 void SetQuality(int quality)
356 {
357 static const int MinQuality = 0;
358 static const int MaxQuality = 100;
359 if (quality < MinQuality || quality > MaxQuality)
360 {
361 throw EnrollmentInvalidArgumentException("JPG quality must be in <0,100>");
362 }
363 q = quality;
364 SetOption(inno_ImageEncoder_GeJpgQualityId(), quality);
365 }
366
370 */
371 int GetQuality() const
372 {
373 return q;
374 }
375
382 */
383 void SetProgressive(bool isOn)
384 {
385 pf = isOn;
386 SetOption(inno_ImageEncoder_GeJpgProgressiveId(), isOn ? 1 : 0);
387 }
388
393 */
394 bool GetProgressive() const
395 {
396 return pf;
397 }
398
403 */
404 void SetOptimize(bool isOn)
405 {
406 o = isOn;
407 SetOption(inno_ImageEncoder_GeJpgOptimizedId(), isOn ? 1 : 0);
408 }
409
414 */
415 bool GetOptimize() const
416 {
417 return o;
418 }
420 void Accept(ImageEncoderVisitor& visitor) const final
421 {
422 visitor.Visit(*this);
423 }
424
425 JpgImageEncoder(const JpgImageEncoder&) = delete;
427 JpgImageEncoder& operator=(const JpgImageEncoder&) = delete;
428 JpgImageEncoder& operator=(JpgImageEncoder&&) = delete;
429 virtual ~JpgImageEncoder() = default;
430
431 private:
432 static const int DefaultQuality = 95;
433 std::atomic<int> q;
434 std::atomic<bool> pf;
435 std::atomic<bool> o;
436 };
437
441 */
442 class TiffImageEncoder : public SupportedImageEncoder
443 {
444 public:
448 */
450 : SupportedImageEncoder(ImageType::TIFF)
451 , comp(NONE)
452 {
453 }
457 */
458 enum Compression : uint16_t
459 {
461 NONE = 1,
463 CCITTRLE = 2,
465 CCITTFAX3 = 3,
469 CCITTFAX4 = 4,
473 LZW = 5,
475 JPEG = 7,
477 NEXT = 32766,
479 CCITTRLEW = 32771,
481 PACKBITS = 32773,
483 THUNDERSCAN = 32809,
485 IT8CTPAD = 32895,
487 IT8LW = 32896,
489 IT8MP = 32897,
491 IT8BL = 32898,
493 PIXARFILM = 32908,
495 PIXARLOG = 32909,
497 DEFLATE = 32946,
499 ADOBE_DEFLATE = 8,
501 DCS = 32947,
503 SGILOG = 34676,
505 SGILOG24 = 34677,
507 JP2000 = 34712
508 };
509
514 */
515 void SetCompression(Compression compression)
516 {
517 if (!IsCompressionValid(compression))
518 {
519 throw EnrollmentInvalidArgumentException("Unsupported TIFF compression type: " +
520 std::to_string(compression));
521 }
522
523 comp = compression;
524 SetOption(inno_ImageEncoder_GetTiffCompressionId(), compression);
525 }
526
530 */
532 {
533 return comp;
534 }
536 void Accept(ImageEncoderVisitor& visitor) const final
537 {
538 visitor.Visit(*this);
539 }
540
541 TiffImageEncoder(const TiffImageEncoder&) = delete;
543 TiffImageEncoder& operator=(const TiffImageEncoder&) = delete;
544 TiffImageEncoder& operator=(TiffImageEncoder&&) = delete;
545 virtual ~TiffImageEncoder() = default;
546
547 private:
548 std::atomic<Compression> comp;
549
550 void AddOptionsForImageAttributes(const RawImage& image,
551 const std::function<void(int, int)>& addOption) const final
552 {
553 constexpr int ResultUnitInch = 2;
554 addOption(inno_ImageEncoder_GetTiffUnitId(), ResultUnitInch);
555 addOption(inno_ImageEncoder_GetTiffXDpiId(), static_cast<int>(static_cast<unsigned int>(image.dpi)));
556 addOption(inno_ImageEncoder_GetTiffYDpiId(), static_cast<int>(static_cast<unsigned int>(image.dpi)));
557 }
558
559 static bool IsCompressionValid(const Compression compression)
560 {
561 switch (compression)
562 {
563 case NONE:
564 [[fallthrough]];
565 case CCITTRLE:
566 [[fallthrough]];
567 case CCITT_T4:
568 [[fallthrough]];
569 case CCITT_T6:
570 [[fallthrough]];
571 case LZW:
572 [[fallthrough]];
573 case JPEG:
574 [[fallthrough]];
575 case NEXT:
576 [[fallthrough]];
577 case CCITTRLEW:
578 [[fallthrough]];
579 case PACKBITS:
580 [[fallthrough]];
581 case THUNDERSCAN:
582 [[fallthrough]];
583 case IT8CTPAD:
584 [[fallthrough]];
585 case IT8LW:
586 [[fallthrough]];
587 case IT8MP:
588 [[fallthrough]];
589 case IT8BL:
590 [[fallthrough]];
591 case PIXARFILM:
592 [[fallthrough]];
593 case PIXARLOG:
594 [[fallthrough]];
595 case DEFLATE:
596 [[fallthrough]];
597 case ADOBE_DEFLATE:
598 [[fallthrough]];
599 case DCS:
600 [[fallthrough]];
601 case SGILOG:
602 [[fallthrough]];
603 case SGILOG24:
604 [[fallthrough]];
605 case JP2000:
606 return true;
607 }
608 return false;
609 }
610 };
611
615 */
616 class Jp2ImageEncoder : public SupportedImageEncoder
617 {
618 public:
622 */
624 : SupportedImageEncoder(ImageType::JPG2000)
625 , r(4)
626 {
627 }
628
645 */
646 void SetCompressionRatio(int ratio)
647 {
648 static const int MaxRatio = 1000;
649 static const int MinRatio = 1;
650 if (ratio < MinRatio || ratio > MaxRatio)
651 {
652 throw EnrollmentInvalidArgumentException("JP2 compression ratio dcd must be in <1,1000>");
653 }
654
655 r = ratio;
656 // calculate compression rate used by underlying encoder
657 auto rate = MaxRatio / ratio;
658 SetOption(inno_ImageEncoder_GetJpg2000CompressionRateId(), rate);
659 }
660
664 */
665 int GetCompressionRatio() const
666 {
667 return r;
668 }
669
674 */
675 bool IsLossy() const
676 {
677 return r != 1;
678 }
679
684 */
685 bool IsLossless() const
686 {
687 return r == 1;
688 }
690 void Accept(ImageEncoderVisitor& visitor) const final
691 {
692 visitor.Visit(*this);
693 }
694
695 Jp2ImageEncoder(const Jp2ImageEncoder&) = delete;
697 Jp2ImageEncoder& operator=(const Jp2ImageEncoder&) = delete;
698 Jp2ImageEncoder& operator=(Jp2ImageEncoder&&) = delete;
699 virtual ~Jp2ImageEncoder() = default;
700
701 private:
702 std::atomic<int> r;
703 };
704
708 */
709 class WebpImageEncoder : public SupportedImageEncoder
710 {
711 public:
715 */
717 : SupportedImageEncoder(ImageType::WEBP)
718 , q(DefaultQuality)
719 {
720 }
721
727 */
728 void SetQuality(int quality)
729 {
730 static const int MinQuality = 0;
731 static const int MaxQuality = 100;
732 if (quality < MinQuality || quality > MaxQuality)
733 {
734 throw EnrollmentInvalidArgumentException("WebP quality must be in <0,100>");
735 }
736 q = quality;
737 SetOption(inno_ImageEncoder_GeWebpQualityId(), quality);
738 }
739
743 */
744 int GetQuality() const
745 {
746 return q;
747 }
749 void Accept(ImageEncoderVisitor& visitor) const final
750 {
751 visitor.Visit(*this);
752 }
753
754 WebpImageEncoder(const WebpImageEncoder&) = delete;
756 WebpImageEncoder& operator=(const WebpImageEncoder&) = delete;
757 WebpImageEncoder& operator=(WebpImageEncoder&&) = delete;
758 virtual ~WebpImageEncoder() = default;
759
760 private:
761 static const int DefaultQuality = 95;
762 std::atomic<int> q;
763 };
764
768 */
769 class WsqImageEncoder : public SupportedImageEncoder
770 {
771 public:
774 */
776 : SupportedImageEncoder(ImageType::WSQ)
777 {
778 }
780 void Accept(ImageEncoderVisitor& visitor) const final
781 {
782 visitor.Visit(*this);
783 }
784
795 */
796 void SetBitrate(float bitrate)
797 {
798 static constexpr float MaxBitrate = 5.0F;
799 static constexpr float MinBitrate = 0.1F;
800 if (bitrate < MinBitrate || bitrate > MaxBitrate)
801 {
802 throw EnrollmentInvalidArgumentException("WSQ bitrate must be in <0.1,5.0>");
803 }
804
805 b = bitrate;
806 }
807
811 */
812 float GetBitrate() const
813 {
814 return b;
815 }
816
817 WsqImageEncoder(const WsqImageEncoder&) = delete;
819 WsqImageEncoder& operator=(const WsqImageEncoder&) = delete;
820 WsqImageEncoder& operator=(WsqImageEncoder&&) = delete;
821 virtual ~WsqImageEncoder() = default;
822
823 static constexpr float WsqBitrateDefault = 1.25;
824 static constexpr int WsqBitrateId = 1;
825 static constexpr float WsqBitrateCoeff = 100.F;
826
827 private:
828 std::atomic<float> b = WsqBitrateDefault;
829
830 void AddOptionsForImageAttributes(const RawImage& /*image*/,
831 const std::function<void(int, int)>& addOption) const final
832 {
833 const auto bitrate = static_cast<int>(b * WsqBitrateCoeff);
834 addOption(WsqBitrateId, bitrate);
835 }
836 };
837
841 */
842 class IRawImageEncoder : public ImageEncoder
843 {
844 public:
850 */
851 [[nodiscard]] std::vector<uint8_t> Encode(const RawImage& raw) const final
852 {
853 if (raw.height == 0 || raw.width == 0 || raw.channels == 0 || raw.Data().empty())
854 {
855 throw InvalidImageArgumentException("Empty image");
856 }
857
858 std::vector<uint8_t> encoded(inno_ImageEncoder_GetRawLength(raw.height, raw.width, raw.channels));
859 inno_ImageEncoder_EncodeRaw(encoded.data(),
860 raw.height,
861 raw.width,
862 static_cast<unsigned int>(raw.dpi),
863 raw.type,
864 raw.Data().data(),
865 raw.Data().size());
866 return encoded;
867 }
869 void Accept(ImageEncoderVisitor& visitor) const final
870 {
871 visitor.Visit(*this);
872 }
873
874 IRawImageEncoder() = default;
875 IRawImageEncoder(const IRawImageEncoder&) = delete;
877 IRawImageEncoder& operator=(const IRawImageEncoder&) = delete;
878 IRawImageEncoder& operator=(IRawImageEncoder&&) = delete;
879 virtual ~IRawImageEncoder() = default;
880 };
882 inline std::shared_ptr<ImageEncoder> ImageEncoder::Create(ImageType type)
883 {
884 switch (static_cast<ImageType::Type>(type))
885 {
886 case ImageType::BMP:
887 return std::make_shared<BmpImageEncoder>();
888 case ImageType::PNG:
889 return std::make_shared<PngImageEncoder>();
890 case ImageType::WSQ:
891 return std::make_shared<WsqImageEncoder>();
892 case ImageType::IRAW:
893 return std::make_shared<IRawImageEncoder>();
894 case ImageType::JPG:
895 return std::make_shared<JpgImageEncoder>();
896 case ImageType::TIFF:
897 return std::make_shared<TiffImageEncoder>();
899 return std::make_shared<Jp2ImageEncoder>();
900 case ImageType::WEBP:
901 return std::make_shared<WebpImageEncoder>();
902 }
903
905 }
906
910 */
911 class ImageSaver
912 {
913 public:
918 virtual void Save(const RawImage& raw) const = 0;
919
920 ImageSaver() = default;
921 ImageSaver(const ImageSaver&) = delete;
922 ImageSaver(ImageSaver&&) = delete;
923 ImageSaver& operator=(const ImageSaver&) = delete;
924 ImageSaver& operator=(ImageSaver&&) = delete;
925 virtual ~ImageSaver() = default;
926 };
927
932 */
933 class ImageFileSaver : public ImageSaver
934 {
935 public:
939 */
940 explicit ImageFileSaver(std::string path)
941 : fp(std::move(path))
942 {
943 }
944
952 */
953 void Save(const RawImage& raw) const final
954 {
955 auto extension = fp.substr(fp.find_last_of('.'), fp.length());
956 auto encoder = ImageEncoder::Create(ImageType::FromFileExtension(extension));
957 BinaryFile::WriteAll(fp, encoder->Encode(raw));
958 }
959
960 ImageFileSaver(const ImageFileSaver&) = delete;
961 ImageFileSaver(ImageFileSaver&&) = delete;
962 ImageFileSaver& operator=(const ImageFileSaver&) = delete;
963 ImageFileSaver& operator=(ImageFileSaver&&) = delete;
964 virtual ~ImageFileSaver() = default;
965
966 private:
967 std::string fp;
968 };
969} // namespace inno
Converts image type ImageType::BMP.
Definition ImageEncoder.h:243
BmpImageEncoder()
Construct a new BMP Image Encoder object.
Definition ImageEncoder.h:248
void Accept(ImageEncoderVisitor &visitor) const final
Allow visitor to visit concrete type of encoder.
Definition ImageEncoder.h:253
Base exception for all enrollment-sdk invalid argument exceptions.
Definition EnrollmentException.h:96
Saves RawImage image to memory.
Definition ImageEncoder.h:842
std::vector< uint8_t > Encode(const RawImage &raw) const final
Saves given RawImage in innovatrics raw image format.
Definition ImageEncoder.h:850
void Accept(ImageEncoderVisitor &visitor) const final
Allow visitor to visit concrete type of encoder.
Definition ImageEncoder.h:868
The class is used to visit concrete encoder to get concrete data.
Definition ImageEncoder.h:81
virtual void Accept(ImageEncoderVisitor &visitor) const =0
Allow visitor to visit concrete type of encoder.
static std::shared_ptr< ImageEncoder > Create(ImageType type)
Create concrete default encoder for given type.
Definition ImageEncoder.h:881
virtual std::vector< uint8_t > Encode(const RawImage &raw) const =0
Encodes given RawImage as encoded image.
Exception for image processing.
Definition ImageException.h:24
@ UNKNOWN_IMAGE
Image type is not supported.
Definition ImageException.h:35
Saves image to file.
Definition ImageEncoder.h:933
ImageFileSaver(std::string path)
Construct a new Image File Encoder object.
Definition ImageEncoder.h:939
void Save(const RawImage &raw) const final
Saves given RawImage as encoded image.
Definition ImageEncoder.h:952
virtual void Save(const RawImage &raw) const =0
Encodes and saves given image.
It contains all supported image types.
Definition ImageType.h:21
static ImageType FromFileExtension(const std::string &extension)
Construct ImageType from file extension.
Definition ImageType.h:166
Type
Type of supported images.
Definition ImageType.h:27
@ JPG2000
JPEG 2000 is an image compression standard and coding system - jp2.
Definition ImageType.h:76
@ JPG
Joint Photographic Experts Group - jpeg, jpg, jpe.
Definition ImageType.h:59
@ BMP
Windows bitmaps - bmp, dib.
Definition ImageType.h:32
@ TIFF
Tagged Image File Format - tiff, tif.
Definition ImageType.h:65
@ PNG
Portable Network Graphics - png.
Definition ImageType.h:39
@ WEBP
WebP is an image file format developed by Google - webp.
Definition ImageType.h:82
@ IRAW
Innovatrics proprietary RAW image - iraw.
Definition ImageType.h:52
@ WSQ
Wavelet Scalar Quantization - wsq.
Definition ImageType.h:46
Image has wrong format or dimensions or dpi and is not suitable for processing.
Definition EnrollmentException.h:144
Converts image type ImageType::JPG2000.
Definition ImageEncoder.h:616
void SetCompressionRatio(int ratio)
Set compression ratio.
Definition ImageEncoder.h:645
bool IsLossy() const
Check if encoder setup is lossy.
Definition ImageEncoder.h:674
bool IsLossless() const
Check if encoder setup is lossless.
Definition ImageEncoder.h:684
void Accept(ImageEncoderVisitor &visitor) const final
Allow visitor to visit concrete type of encoder.
Definition ImageEncoder.h:689
int GetCompressionRatio() const
Provides compression ratio.
Definition ImageEncoder.h:664
Jp2ImageEncoder()
Construct a new Jpeg 2000 Image Encoder object The default compression ratio is 4:1.
Definition ImageEncoder.h:622
Converts image type ImageType::JPG.
Definition ImageEncoder.h:331
void SetQuality(int quality)
Set quality.
Definition ImageEncoder.h:354
bool GetProgressive() const
Provides Progressive Feature.
Definition ImageEncoder.h:393
bool GetOptimize() const
Provides Optimize Feature.
Definition ImageEncoder.h:414
void SetProgressive(bool isOn)
Set the Progressive Feature A progressive JPEG image is encoded differently than a standard or baseli...
Definition ImageEncoder.h:382
void Accept(ImageEncoderVisitor &visitor) const final
Allow visitor to visit concrete type of encoder.
Definition ImageEncoder.h:419
JpgImageEncoder()
Construct a new JPG Image Encoder object.
Definition ImageEncoder.h:341
int GetQuality() const
Provides quality.
Definition ImageEncoder.h:370
void SetOptimize(bool isOn)
Set the Optimize Feature.
Definition ImageEncoder.h:403
Converts image type ImageType::PNG.
Definition ImageEncoder.h:270
void SetCompressionLevel(int level)
Set compression level.
Definition ImageEncoder.h:289
PngImageEncoder()
Construct a new Png Image Encoder object The default compression level is 9.
Definition ImageEncoder.h:276
void Accept(ImageEncoderVisitor &visitor) const final
Allow visitor to visit concrete type of encoder.
Definition ImageEncoder.h:310
int GetCompressionLevel() const
Provides compression level.
Definition ImageEncoder.h:305
Contains plain image data.
Definition ImageAttribute.h:135
const ImageDpi dpi
Image DPI.
Definition ImageAttribute.h:170
Encodes raw images into specified supported format, It is used as based class for all supported forma...
Definition ImageEncoder.h:143
std::vector< uint8_t > Encode(const RawImage &raw) const final
Saves given RawImage as formatted image.
Definition ImageEncoder.h:152
Converts image type ImageType::TIFF.
Definition ImageEncoder.h:442
Compression
Compression supported for tiff images.
Definition ImageEncoder.h:458
@ IT8LW
IT8 LW.
Definition ImageEncoder.h:486
@ CCITTRLE
CCITT RLE.
Definition ImageEncoder.h:462
@ IT8BL
IT8 BL.
Definition ImageEncoder.h:490
@ JP2000
JP2000.
Definition ImageEncoder.h:506
@ CCITT_T6
CCITT T6.
Definition ImageEncoder.h:470
@ THUNDERSCAN
THUNDERSCAN.
Definition ImageEncoder.h:482
@ LZW
LZW.
Definition ImageEncoder.h:472
@ ADOBE_DEFLATE
ADOBE DEFLATE.
Definition ImageEncoder.h:498
@ CCITTFAX3
CCITT FAX3.
Definition ImageEncoder.h:464
@ CCITTFAX4
CCITT FAX4.
Definition ImageEncoder.h:468
@ IT8MP
IT8 MP.
Definition ImageEncoder.h:488
@ IT8CTPAD
IT8 CTPAD.
Definition ImageEncoder.h:484
@ SGILOG
SGI LOG.
Definition ImageEncoder.h:502
@ JPEG
JPEG.
Definition ImageEncoder.h:474
@ CCITT_T4
CCITT T4.
Definition ImageEncoder.h:466
@ DCS
DCS.
Definition ImageEncoder.h:500
@ NEXT
NEXT.
Definition ImageEncoder.h:476
@ CCITTRLEW
CCITT RLE W.
Definition ImageEncoder.h:478
@ NONE
No compression.
Definition ImageEncoder.h:460
@ PIXARLOG
PIXAR LOG.
Definition ImageEncoder.h:494
@ PIXARFILM
PIXAR FILM.
Definition ImageEncoder.h:492
@ SGILOG24
SGI LOG24.
Definition ImageEncoder.h:504
@ DEFLATE
DEFLATE.
Definition ImageEncoder.h:496
@ PACKBITS
PACKBITS.
Definition ImageEncoder.h:480
TiffImageEncoder()
Construct a new Tiff Image Encoder object.
Definition ImageEncoder.h:448
void SetCompression(Compression compression)
Set compression level.
Definition ImageEncoder.h:514
Compression GetCompression() const
Provides compression.
Definition ImageEncoder.h:530
void Accept(ImageEncoderVisitor &visitor) const final
Allow visitor to visit concrete type of encoder.
Definition ImageEncoder.h:535
Converts image type ImageType::WEBP.
Definition ImageEncoder.h:709
void SetQuality(int quality)
Set quality.
Definition ImageEncoder.h:727
WebpImageEncoder()
Construct a new webp Image Encoder object The default quality is set to 95.
Definition ImageEncoder.h:715
void Accept(ImageEncoderVisitor &visitor) const final
Allow visitor to visit concrete type of encoder.
Definition ImageEncoder.h:748
int GetQuality() const
Provides quality.
Definition ImageEncoder.h:743
Converts image type ImageType::WSQ.
Definition ImageEncoder.h:769
WsqImageEncoder()
Construct a new WSQ Image Encoder object.
Definition ImageEncoder.h:774
void Accept(ImageEncoderVisitor &visitor) const final
Allow visitor to visit concrete type of encoder.
Definition ImageEncoder.h:779
float GetBitrate() const
Provides WSQ image bitrate.
Definition ImageEncoder.h:811
void SetBitrate(float bitrate)
Set the bitrate for WSQ compression.
Definition ImageEncoder.h:795