Skip to content

Commit 24c76a4

Browse files
authored
Merge pull request #39 from lbellonda/issue37
Adds support for LSB-encoded TIFF images. Fixes issue #37 (?)
2 parents d8e7f79 + a36bf00 commit 24c76a4

25 files changed

+578
-85
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
package com.github.jaiimageio.impl.plugins.tiff;
2+
3+
public class TIFFFillOrder {
4+
5+
public static final int reverseTable[] = {
6+
0x00, //0 00000000 -> 00000000
7+
0x80, //1 00000001 -> 10000000
8+
0x40, //2 00000010 -> 01000000
9+
0xC0, //3 00000011 -> 11000000
10+
0x20, //4 00000100 -> 00100000
11+
0xA0, //5 00000101 -> 10100000
12+
0x60, //6 00000110 -> 01100000
13+
0xE0, //7 00000111 -> 11100000
14+
0x10, //8 00001000 -> 00010000
15+
0x90, //9 00001001 -> 10010000
16+
0x50, //10 00001010 -> 01010000
17+
0xD0, //11 00001011 -> 11010000
18+
0x30, //12 00001100 -> 00110000
19+
0xB0, //13 00001101 -> 10110000
20+
0x70, //14 00001110 -> 01110000
21+
0xF0, //15 00001111 -> 11110000
22+
0x08, //16 00010000 -> 00001000
23+
0x88, //17 00010001 -> 10001000
24+
0x48, //18 00010010 -> 01001000
25+
0xC8, //19 00010011 -> 11001000
26+
0x28, //20 00010100 -> 00101000
27+
0xA8, //21 00010101 -> 10101000
28+
0x68, //22 00010110 -> 01101000
29+
0xE8, //23 00010111 -> 11101000
30+
0x18, //24 00011000 -> 00011000
31+
0x98, //25 00011001 -> 10011000
32+
0x58, //26 00011010 -> 01011000
33+
0xD8, //27 00011011 -> 11011000
34+
0x38, //28 00011100 -> 00111000
35+
0xB8, //29 00011101 -> 10111000
36+
0x78, //30 00011110 -> 01111000
37+
0xF8, //31 00011111 -> 11111000
38+
0x04, //32 00100000 -> 00000100
39+
0x84, //33 00100001 -> 10000100
40+
0x44, //34 00100010 -> 01000100
41+
0xC4, //35 00100011 -> 11000100
42+
0x24, //36 00100100 -> 00100100
43+
0xA4, //37 00100101 -> 10100100
44+
0x64, //38 00100110 -> 01100100
45+
0xE4, //39 00100111 -> 11100100
46+
0x14, //40 00101000 -> 00010100
47+
0x94, //41 00101001 -> 10010100
48+
0x54, //42 00101010 -> 01010100
49+
0xD4, //43 00101011 -> 11010100
50+
0x34, //44 00101100 -> 00110100
51+
0xB4, //45 00101101 -> 10110100
52+
0x74, //46 00101110 -> 01110100
53+
0xF4, //47 00101111 -> 11110100
54+
0x0C, //48 00110000 -> 00001100
55+
0x8C, //49 00110001 -> 10001100
56+
0x4C, //50 00110010 -> 01001100
57+
0xCC, //51 00110011 -> 11001100
58+
0x2C, //52 00110100 -> 00101100
59+
0xAC, //53 00110101 -> 10101100
60+
0x6C, //54 00110110 -> 01101100
61+
0xEC, //55 00110111 -> 11101100
62+
0x1C, //56 00111000 -> 00011100
63+
0x9C, //57 00111001 -> 10011100
64+
0x5C, //58 00111010 -> 01011100
65+
0xDC, //59 00111011 -> 11011100
66+
0x3C, //60 00111100 -> 00111100
67+
0xBC, //61 00111101 -> 10111100
68+
0x7C, //62 00111110 -> 01111100
69+
0xFC, //63 00111111 -> 11111100
70+
0x02, //64 01000000 -> 00000010
71+
0x82, //65 01000001 -> 10000010
72+
0x42, //66 01000010 -> 01000010
73+
0xC2, //67 01000011 -> 11000010
74+
0x22, //68 01000100 -> 00100010
75+
0xA2, //69 01000101 -> 10100010
76+
0x62, //70 01000110 -> 01100010
77+
0xE2, //71 01000111 -> 11100010
78+
0x12, //72 01001000 -> 00010010
79+
0x92, //73 01001001 -> 10010010
80+
0x52, //74 01001010 -> 01010010
81+
0xD2, //75 01001011 -> 11010010
82+
0x32, //76 01001100 -> 00110010
83+
0xB2, //77 01001101 -> 10110010
84+
0x72, //78 01001110 -> 01110010
85+
0xF2, //79 01001111 -> 11110010
86+
0x0A, //80 01010000 -> 00001010
87+
0x8A, //81 01010001 -> 10001010
88+
0x4A, //82 01010010 -> 01001010
89+
0xCA, //83 01010011 -> 11001010
90+
0x2A, //84 01010100 -> 00101010
91+
0xAA, //85 01010101 -> 10101010
92+
0x6A, //86 01010110 -> 01101010
93+
0xEA, //87 01010111 -> 11101010
94+
0x1A, //88 01011000 -> 00011010
95+
0x9A, //89 01011001 -> 10011010
96+
0x5A, //90 01011010 -> 01011010
97+
0xDA, //91 01011011 -> 11011010
98+
0x3A, //92 01011100 -> 00111010
99+
0xBA, //93 01011101 -> 10111010
100+
0x7A, //94 01011110 -> 01111010
101+
0xFA, //95 01011111 -> 11111010
102+
0x06, //96 01100000 -> 00000110
103+
0x86, //97 01100001 -> 10000110
104+
0x46, //98 01100010 -> 01000110
105+
0xC6, //99 01100011 -> 11000110
106+
0x26, //100 01100100 -> 00100110
107+
0xA6, //101 01100101 -> 10100110
108+
0x66, //102 01100110 -> 01100110
109+
0xE6, //103 01100111 -> 11100110
110+
0x16, //104 01101000 -> 00010110
111+
0x96, //105 01101001 -> 10010110
112+
0x56, //106 01101010 -> 01010110
113+
0xD6, //107 01101011 -> 11010110
114+
0x36, //108 01101100 -> 00110110
115+
0xB6, //109 01101101 -> 10110110
116+
0x76, //110 01101110 -> 01110110
117+
0xF6, //111 01101111 -> 11110110
118+
0x0E, //112 01110000 -> 00001110
119+
0x8E, //113 01110001 -> 10001110
120+
0x4E, //114 01110010 -> 01001110
121+
0xCE, //115 01110011 -> 11001110
122+
0x2E, //116 01110100 -> 00101110
123+
0xAE, //117 01110101 -> 10101110
124+
0x6E, //118 01110110 -> 01101110
125+
0xEE, //119 01110111 -> 11101110
126+
0x1E, //120 01111000 -> 00011110
127+
0x9E, //121 01111001 -> 10011110
128+
0x5E, //122 01111010 -> 01011110
129+
0xDE, //123 01111011 -> 11011110
130+
0x3E, //124 01111100 -> 00111110
131+
0xBE, //125 01111101 -> 10111110
132+
0x7E, //126 01111110 -> 01111110
133+
0xFE, //127 01111111 -> 11111110
134+
0x01, //128 10000000 -> 00000001
135+
0x81, //129 10000001 -> 10000001
136+
0x41, //130 10000010 -> 01000001
137+
0xC1, //131 10000011 -> 11000001
138+
0x21, //132 10000100 -> 00100001
139+
0xA1, //133 10000101 -> 10100001
140+
0x61, //134 10000110 -> 01100001
141+
0xE1, //135 10000111 -> 11100001
142+
0x11, //136 10001000 -> 00010001
143+
0x91, //137 10001001 -> 10010001
144+
0x51, //138 10001010 -> 01010001
145+
0xD1, //139 10001011 -> 11010001
146+
0x31, //140 10001100 -> 00110001
147+
0xB1, //141 10001101 -> 10110001
148+
0x71, //142 10001110 -> 01110001
149+
0xF1, //143 10001111 -> 11110001
150+
0x09, //144 10010000 -> 00001001
151+
0x89, //145 10010001 -> 10001001
152+
0x49, //146 10010010 -> 01001001
153+
0xC9, //147 10010011 -> 11001001
154+
0x29, //148 10010100 -> 00101001
155+
0xA9, //149 10010101 -> 10101001
156+
0x69, //150 10010110 -> 01101001
157+
0xE9, //151 10010111 -> 11101001
158+
0x19, //152 10011000 -> 00011001
159+
0x99, //153 10011001 -> 10011001
160+
0x59, //154 10011010 -> 01011001
161+
0xD9, //155 10011011 -> 11011001
162+
0x39, //156 10011100 -> 00111001
163+
0xB9, //157 10011101 -> 10111001
164+
0x79, //158 10011110 -> 01111001
165+
0xF9, //159 10011111 -> 11111001
166+
0x05, //160 10100000 -> 00000101
167+
0x85, //161 10100001 -> 10000101
168+
0x45, //162 10100010 -> 01000101
169+
0xC5, //163 10100011 -> 11000101
170+
0x25, //164 10100100 -> 00100101
171+
0xA5, //165 10100101 -> 10100101
172+
0x65, //166 10100110 -> 01100101
173+
0xE5, //167 10100111 -> 11100101
174+
0x15, //168 10101000 -> 00010101
175+
0x95, //169 10101001 -> 10010101
176+
0x55, //170 10101010 -> 01010101
177+
0xD5, //171 10101011 -> 11010101
178+
0x35, //172 10101100 -> 00110101
179+
0xB5, //173 10101101 -> 10110101
180+
0x75, //174 10101110 -> 01110101
181+
0xF5, //175 10101111 -> 11110101
182+
0x0D, //176 10110000 -> 00001101
183+
0x8D, //177 10110001 -> 10001101
184+
0x4D, //178 10110010 -> 01001101
185+
0xCD, //179 10110011 -> 11001101
186+
0x2D, //180 10110100 -> 00101101
187+
0xAD, //181 10110101 -> 10101101
188+
0x6D, //182 10110110 -> 01101101
189+
0xED, //183 10110111 -> 11101101
190+
0x1D, //184 10111000 -> 00011101
191+
0x9D, //185 10111001 -> 10011101
192+
0x5D, //186 10111010 -> 01011101
193+
0xDD, //187 10111011 -> 11011101
194+
0x3D, //188 10111100 -> 00111101
195+
0xBD, //189 10111101 -> 10111101
196+
0x7D, //190 10111110 -> 01111101
197+
0xFD, //191 10111111 -> 11111101
198+
0x03, //192 11000000 -> 00000011
199+
0x83, //193 11000001 -> 10000011
200+
0x43, //194 11000010 -> 01000011
201+
0xC3, //195 11000011 -> 11000011
202+
0x23, //196 11000100 -> 00100011
203+
0xA3, //197 11000101 -> 10100011
204+
0x63, //198 11000110 -> 01100011
205+
0xE3, //199 11000111 -> 11100011
206+
0x13, //200 11001000 -> 00010011
207+
0x93, //201 11001001 -> 10010011
208+
0x53, //202 11001010 -> 01010011
209+
0xD3, //203 11001011 -> 11010011
210+
0x33, //204 11001100 -> 00110011
211+
0xB3, //205 11001101 -> 10110011
212+
0x73, //206 11001110 -> 01110011
213+
0xF3, //207 11001111 -> 11110011
214+
0x0B, //208 11010000 -> 00001011
215+
0x8B, //209 11010001 -> 10001011
216+
0x4B, //210 11010010 -> 01001011
217+
0xCB, //211 11010011 -> 11001011
218+
0x2B, //212 11010100 -> 00101011
219+
0xAB, //213 11010101 -> 10101011
220+
0x6B, //214 11010110 -> 01101011
221+
0xEB, //215 11010111 -> 11101011
222+
0x1B, //216 11011000 -> 00011011
223+
0x9B, //217 11011001 -> 10011011
224+
0x5B, //218 11011010 -> 01011011
225+
0xDB, //219 11011011 -> 11011011
226+
0x3B, //220 11011100 -> 00111011
227+
0xBB, //221 11011101 -> 10111011
228+
0x7B, //222 11011110 -> 01111011
229+
0xFB, //223 11011111 -> 11111011
230+
0x07, //224 11100000 -> 00000111
231+
0x87, //225 11100001 -> 10000111
232+
0x47, //226 11100010 -> 01000111
233+
0xC7, //227 11100011 -> 11000111
234+
0x27, //228 11100100 -> 00100111
235+
0xA7, //229 11100101 -> 10100111
236+
0x67, //230 11100110 -> 01100111
237+
0xE7, //231 11100111 -> 11100111
238+
0x17, //232 11101000 -> 00010111
239+
0x97, //233 11101001 -> 10010111
240+
0x57, //234 11101010 -> 01010111
241+
0xD7, //235 11101011 -> 11010111
242+
0x37, //236 11101100 -> 00110111
243+
0xB7, //237 11101101 -> 10110111
244+
0x77, //238 11101110 -> 01110111
245+
0xF7, //239 11101111 -> 11110111
246+
0x0F, //240 11110000 -> 00001111
247+
0x8F, //241 11110001 -> 10001111
248+
0x4F, //242 11110010 -> 01001111
249+
0xCF, //243 11110011 -> 11001111
250+
0x2F, //244 11110100 -> 00101111
251+
0xAF, //245 11110101 -> 10101111
252+
0x6F, //246 11110110 -> 01101111
253+
0xEF, //247 11110111 -> 11101111
254+
0x1F, //248 11111000 -> 00011111
255+
0x9F, //249 11111001 -> 10011111
256+
0x5F, //250 11111010 -> 01011111
257+
0xDF, //251 11111011 -> 11011111
258+
0x3F, //252 11111100 -> 00111111
259+
0xBF, //253 11111101 -> 10111111
260+
0x7F, //254 11111110 -> 01111111
261+
0xFF, //255 11111111 -> 11111111
262+
};
263+
264+
}

src/main/java/com/github/jaiimageio/impl/plugins/tiff/TIFFImageReader.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -1528,5 +1528,20 @@ protected static BufferedImage getDestination(ImageReadParam param,
15281528
}
15291529

15301530
return imageType.createBufferedImage(destWidth, destHeight);
1531-
}
1531+
}
1532+
1533+
protected boolean isLsb()
1534+
{
1535+
boolean isLsb = false;
1536+
if( null != imageMetadata ) {
1537+
// Get the fillOrder field.
1538+
TIFFField fillOrderField =
1539+
imageMetadata.getTIFFField(BaselineTIFFTagSet.TAG_FILL_ORDER);
1540+
1541+
if(fillOrderField != null && fillOrderField.getAsInt(0) == 2) {
1542+
isLsb = true ;
1543+
}
1544+
}
1545+
return isLsb ;
1546+
}
15321547
}

0 commit comments

Comments
 (0)