1pub const TAG_NEW_SUBFILE_TYPE: u16 = 254;
3pub const TAG_SUBFILE_TYPE: u16 = 255;
4pub const TAG_IMAGE_WIDTH: u16 = 256;
5pub const TAG_IMAGE_LENGTH: u16 = 257;
6pub const TAG_BITS_PER_SAMPLE: u16 = 258;
7pub const TAG_COMPRESSION: u16 = 259;
8pub const TAG_PHOTOMETRIC_INTERPRETATION: u16 = 262;
9pub const TAG_STRIP_OFFSETS: u16 = 273;
10pub const TAG_SAMPLES_PER_PIXEL: u16 = 277;
11pub const TAG_ROWS_PER_STRIP: u16 = 278;
12pub const TAG_STRIP_BYTE_COUNTS: u16 = 279;
13pub const TAG_PLANAR_CONFIGURATION: u16 = 284;
14pub const TAG_PREDICTOR: u16 = 317;
15pub const TAG_TILE_WIDTH: u16 = 322;
16pub const TAG_TILE_LENGTH: u16 = 323;
17pub const TAG_TILE_OFFSETS: u16 = 324;
18pub const TAG_TILE_BYTE_COUNTS: u16 = 325;
19pub const TAG_SAMPLE_FORMAT: u16 = 339;
20pub const TAG_JPEG_TABLES: u16 = 347;
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
24pub enum Compression {
25 None,
26 Lzw,
27 OldJpeg,
28 Jpeg,
29 Deflate,
30 PackBits,
31 DeflateOld,
32 Zstd,
33}
34
35impl Compression {
36 pub fn from_code(code: u16) -> Option<Self> {
37 match code {
38 1 => Some(Self::None),
39 5 => Some(Self::Lzw),
40 6 => Some(Self::OldJpeg),
41 7 => Some(Self::Jpeg),
42 8 => Some(Self::Deflate),
43 32773 => Some(Self::PackBits),
44 32946 => Some(Self::DeflateOld),
45 50000 => Some(Self::Zstd),
46 _ => None,
47 }
48 }
49
50 pub fn to_code(self) -> u16 {
51 match self {
52 Self::None => 1,
53 Self::Lzw => 5,
54 Self::OldJpeg => 6,
55 Self::Jpeg => 7,
56 Self::Deflate => 8,
57 Self::PackBits => 32773,
58 Self::DeflateOld => 32946,
59 Self::Zstd => 50000,
60 }
61 }
62}
63
64#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
66pub enum Predictor {
67 None,
68 Horizontal,
69 FloatingPoint,
70}
71
72impl Predictor {
73 pub fn from_code(code: u16) -> Option<Self> {
74 match code {
75 1 => Some(Self::None),
76 2 => Some(Self::Horizontal),
77 3 => Some(Self::FloatingPoint),
78 _ => None,
79 }
80 }
81
82 pub fn to_code(self) -> u16 {
83 match self {
84 Self::None => 1,
85 Self::Horizontal => 2,
86 Self::FloatingPoint => 3,
87 }
88 }
89}
90
91#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
93pub enum SampleFormat {
94 Uint,
95 Int,
96 Float,
97}
98
99impl SampleFormat {
100 pub fn from_code(code: u16) -> Option<Self> {
101 match code {
102 1 => Some(Self::Uint),
103 2 => Some(Self::Int),
104 3 => Some(Self::Float),
105 _ => None,
106 }
107 }
108
109 pub fn to_code(self) -> u16 {
110 match self {
111 Self::Uint => 1,
112 Self::Int => 2,
113 Self::Float => 3,
114 }
115 }
116}
117
118#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
120pub enum PhotometricInterpretation {
121 MinIsWhite,
122 MinIsBlack,
123 Rgb,
124 Palette,
125 Mask,
126}
127
128impl PhotometricInterpretation {
129 pub fn from_code(code: u16) -> Option<Self> {
130 match code {
131 0 => Some(Self::MinIsWhite),
132 1 => Some(Self::MinIsBlack),
133 2 => Some(Self::Rgb),
134 3 => Some(Self::Palette),
135 4 => Some(Self::Mask),
136 _ => None,
137 }
138 }
139
140 pub fn to_code(self) -> u16 {
141 match self {
142 Self::MinIsWhite => 0,
143 Self::MinIsBlack => 1,
144 Self::Rgb => 2,
145 Self::Palette => 3,
146 Self::Mask => 4,
147 }
148 }
149}
150
151#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
153pub enum PlanarConfiguration {
154 Chunky,
155 Planar,
156}
157
158impl PlanarConfiguration {
159 pub fn from_code(code: u16) -> Option<Self> {
160 match code {
161 1 => Some(Self::Chunky),
162 2 => Some(Self::Planar),
163 _ => None,
164 }
165 }
166
167 pub fn to_code(self) -> u16 {
168 match self {
169 Self::Chunky => 1,
170 Self::Planar => 2,
171 }
172 }
173}