KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > batik > ext > awt > image > codec > tiff > TIFFFaxDecoder


1 /*
2
3    Copyright 2001,2003 The Apache Software Foundation
4
5    Licensed under the Apache License, Version 2.0 (the "License");
6    you may not use this file except in compliance with the License.
7    You may obtain a copy of the License at
8
9        http://www.apache.org/licenses/LICENSE-2.0
10
11    Unless required by applicable law or agreed to in writing, software
12    distributed under the License is distributed on an "AS IS" BASIS,
13    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14    See the License for the specific language governing permissions and
15    limitations under the License.
16
17  */

18 package org.apache.batik.ext.awt.image.codec.tiff;
19
20
21 class TIFFFaxDecoder {
22
23     private int bitPointer, bytePointer;
24     private byte[] data;
25     private int w, h;
26     private int fillOrder;
27
28     // Data structures needed to store changing elements for the previous
29
// and the current scanline
30
private int changingElemSize = 0;
31     private int prevChangingElems[];
32     private int currChangingElems[];
33
34     // Element at which to start search in getNextChangingElement
35
private int lastChangingElement = 0;
36
37     private int compression = 2;
38
39     // Variables set by T4Options
40
private int uncompressedMode = 0;
41     private int fillBits = 0;
42     private int oneD;
43
44     static int table1[] = {
45     0x00, // 0 bits are left in first byte - SHOULD NOT HAPPEN
46
0x01, // 1 bits are left in first byte
47
0x03, // 2 bits are left in first byte
48
0x07, // 3 bits are left in first byte
49
0x0f, // 4 bits are left in first byte
50
0x1f, // 5 bits are left in first byte
51
0x3f, // 6 bits are left in first byte
52
0x7f, // 7 bits are left in first byte
53
0xff // 8 bits are left in first byte
54
};
55     
56     static int table2[] = {
57     0x00, // 0
58
0x80, // 1
59
0xc0, // 2
60
0xe0, // 3
61
0xf0, // 4
62
0xf8, // 5
63
0xfc, // 6
64
0xfe, // 7
65
0xff // 8
66
};
67
68     // Table to be used when fillOrder = 2, for flipping bytes.
69
static byte flipTable[] = {
70      0, -128, 64, -64, 32, -96, 96, -32,
71     16, -112, 80, -48, 48, -80, 112, -16,
72      8, -120, 72, -56, 40, -88, 104, -24,
73     24, -104, 88, -40, 56, -72, 120, -8,
74      4, -124, 68, -60, 36, -92, 100, -28,
75     20, -108, 84, -44, 52, -76, 116, -12,
76     12, -116, 76, -52, 44, -84, 108, -20,
77     28, -100, 92, -36, 60, -68, 124, -4,
78      2, -126, 66, -62, 34, -94, 98, -30,
79     18, -110, 82, -46, 50, -78, 114, -14,
80     10, -118, 74, -54, 42, -86, 106, -22,
81     26, -102, 90, -38, 58, -70, 122, -6,
82      6, -122, 70, -58, 38, -90, 102, -26,
83     22, -106, 86, -42, 54, -74, 118, -10,
84     14, -114, 78, -50, 46, -82, 110, -18,
85     30, -98, 94, -34, 62, -66, 126, -2,
86      1, -127, 65, -63, 33, -95, 97, -31,
87     17, -111, 81, -47, 49, -79, 113, -15,
88      9, -119, 73, -55, 41, -87, 105, -23,
89     25, -103, 89, -39, 57, -71, 121, -7,
90      5, -123, 69, -59, 37, -91, 101, -27,
91     21, -107, 85, -43, 53, -75, 117, -11,
92     13, -115, 77, -51, 45, -83, 109, -19,
93     29, -99, 93, -35, 61, -67, 125, -3,
94      3, -125, 67, -61, 35, -93, 99, -29,
95     19, -109, 83, -45, 51, -77, 115, -13,
96     11, -117, 75, -53, 43, -85, 107, -21,
97     27, -101, 91, -37, 59, -69, 123, -5,
98      7, -121, 71, -57, 39, -89, 103, -25,
99     23, -105, 87, -41, 55, -73, 119, -9,
100     15, -113, 79, -49, 47, -81, 111, -17,
101     31, -97, 95, -33, 63, -65, 127, -1,
102     };
103     
104     // The main 10 bit white runs lookup table
105
static short white[] = {
106     // 0 - 7
107
6430, 6400, 6400, 6400, 3225, 3225, 3225, 3225,
108     // 8 - 15
109
944, 944, 944, 944, 976, 976, 976, 976,
110     // 16 - 23
111
1456, 1456, 1456, 1456, 1488, 1488, 1488, 1488,
112     // 24 - 31
113
718, 718, 718, 718, 718, 718, 718, 718,
114     // 32 - 39
115
750, 750, 750, 750, 750, 750, 750, 750,
116     // 40 - 47
117
1520, 1520, 1520, 1520, 1552, 1552, 1552, 1552,
118     // 48 - 55
119
428, 428, 428, 428, 428, 428, 428, 428,
120     // 56 - 63
121
428, 428, 428, 428, 428, 428, 428, 428,
122     // 64 - 71
123
654, 654, 654, 654, 654, 654, 654, 654,
124     // 72 - 79
125
1072, 1072, 1072, 1072, 1104, 1104, 1104, 1104,
126     // 80 - 87
127
1136, 1136, 1136, 1136, 1168, 1168, 1168, 1168,
128     // 88 - 95
129
1200, 1200, 1200, 1200, 1232, 1232, 1232, 1232,
130     // 96 - 103
131
622, 622, 622, 622, 622, 622, 622, 622,
132     // 104 - 111
133
1008, 1008, 1008, 1008, 1040, 1040, 1040, 1040,
134     // 112 - 119
135
44, 44, 44, 44, 44, 44, 44, 44,
136     // 120 - 127
137
44, 44, 44, 44, 44, 44, 44, 44,
138     // 128 - 135
139
396, 396, 396, 396, 396, 396, 396, 396,
140     // 136 - 143
141
396, 396, 396, 396, 396, 396, 396, 396,
142     // 144 - 151
143
1712, 1712, 1712, 1712, 1744, 1744, 1744, 1744,
144     // 152 - 159
145
846, 846, 846, 846, 846, 846, 846, 846,
146     // 160 - 167
147
1264, 1264, 1264, 1264, 1296, 1296, 1296, 1296,
148     // 168 - 175
149
1328, 1328, 1328, 1328, 1360, 1360, 1360, 1360,
150     // 176 - 183
151
1392, 1392, 1392, 1392, 1424, 1424, 1424, 1424,
152     // 184 - 191
153
686, 686, 686, 686, 686, 686, 686, 686,
154     // 192 - 199
155
910, 910, 910, 910, 910, 910, 910, 910,
156     // 200 - 207
157
1968, 1968, 1968, 1968, 2000, 2000, 2000, 2000,
158     // 208 - 215
159
2032, 2032, 2032, 2032, 16, 16, 16, 16,
160     // 216 - 223
161
10257, 10257, 10257, 10257, 12305, 12305, 12305, 12305,
162     // 224 - 231
163
330, 330, 330, 330, 330, 330, 330, 330,
164     // 232 - 239
165
330, 330, 330, 330, 330, 330, 330, 330,
166     // 240 - 247
167
330, 330, 330, 330, 330, 330, 330, 330,
168     // 248 - 255
169
330, 330, 330, 330, 330, 330, 330, 330,
170     // 256 - 263
171
362, 362, 362, 362, 362, 362, 362, 362,
172     // 264 - 271
173
362, 362, 362, 362, 362, 362, 362, 362,
174     // 272 - 279
175
362, 362, 362, 362, 362, 362, 362, 362,
176     // 280 - 287
177
362, 362, 362, 362, 362, 362, 362, 362,
178     // 288 - 295
179
878, 878, 878, 878, 878, 878, 878, 878,
180     // 296 - 303
181
1904, 1904, 1904, 1904, 1936, 1936, 1936, 1936,
182     // 304 - 311
183
-18413, -18413, -16365, -16365, -14317, -14317, -10221, -10221,
184     // 312 - 319
185
590, 590, 590, 590, 590, 590, 590, 590,
186     // 320 - 327
187
782, 782, 782, 782, 782, 782, 782, 782,
188     // 328 - 335
189
1584, 1584, 1584, 1584, 1616, 1616, 1616, 1616,
190     // 336 - 343
191
1648, 1648, 1648, 1648, 1680, 1680, 1680, 1680,
192     // 344 - 351
193
814, 814, 814, 814, 814, 814, 814, 814,
194     // 352 - 359
195
1776, 1776, 1776, 1776, 1808, 1808, 1808, 1808,
196     // 360 - 367
197
1840, 1840, 1840, 1840, 1872, 1872, 1872, 1872,
198     // 368 - 375
199
6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157,
200     // 376 - 383
201
6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157,
202     // 384 - 391
203
-12275, -12275, -12275, -12275, -12275, -12275, -12275, -12275,
204     // 392 - 399
205
-12275, -12275, -12275, -12275, -12275, -12275, -12275, -12275,
206     // 400 - 407
207
14353, 14353, 14353, 14353, 16401, 16401, 16401, 16401,
208     // 408 - 415
209
22547, 22547, 24595, 24595, 20497, 20497, 20497, 20497,
210     // 416 - 423
211
18449, 18449, 18449, 18449, 26643, 26643, 28691, 28691,
212     // 424 - 431
213
30739, 30739, -32749, -32749, -30701, -30701, -28653, -28653,
214     // 432 - 439
215
-26605, -26605, -24557, -24557, -22509, -22509, -20461, -20461,
216     // 440 - 447
217
8207, 8207, 8207, 8207, 8207, 8207, 8207, 8207,
218     // 448 - 455
219
72, 72, 72, 72, 72, 72, 72, 72,
220     // 456 - 463
221
72, 72, 72, 72, 72, 72, 72, 72,
222     // 464 - 471
223
72, 72, 72, 72, 72, 72, 72, 72,
224     // 472 - 479
225
72, 72, 72, 72, 72, 72, 72, 72,
226     // 480 - 487
227
72, 72, 72, 72, 72, 72, 72, 72,
228     // 488 - 495
229
72, 72, 72, 72, 72, 72, 72, 72,
230     // 496 - 503
231
72, 72, 72, 72, 72, 72, 72, 72,
232     // 504 - 511
233
72, 72, 72, 72, 72, 72, 72, 72,
234     // 512 - 519
235
104, 104, 104, 104, 104, 104, 104, 104,
236     // 520 - 527
237
104, 104, 104, 104, 104, 104, 104, 104,
238     // 528 - 535
239
104, 104, 104, 104, 104, 104, 104, 104,
240     // 536 - 543
241
104, 104, 104, 104, 104, 104, 104, 104,
242     // 544 - 551
243
104, 104, 104, 104, 104, 104, 104, 104,
244     // 552 - 559
245
104, 104, 104, 104, 104, 104, 104, 104,
246     // 560 - 567
247
104, 104, 104, 104, 104, 104, 104, 104,
248     // 568 - 575
249
104, 104, 104, 104, 104, 104, 104, 104,
250     // 576 - 583
251
4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107,
252     // 584 - 591
253
4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107,
254     // 592 - 599
255
4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107,
256     // 600 - 607
257
4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107,
258     // 608 - 615
259
266, 266, 266, 266, 266, 266, 266, 266,
260     // 616 - 623
261
266, 266, 266, 266, 266, 266, 266, 266,
262     // 624 - 631
263
266, 266, 266, 266, 266, 266, 266, 266,
264     // 632 - 639
265
266, 266, 266, 266, 266, 266, 266, 266,
266     // 640 - 647
267
298, 298, 298, 298, 298, 298, 298, 298,
268     // 648 - 655
269
298, 298, 298, 298, 298, 298, 298, 298,
270     // 656 - 663
271
298, 298, 298, 298, 298, 298, 298, 298,
272     // 664 - 671
273
298, 298, 298, 298, 298, 298, 298, 298,
274     // 672 - 679
275
524, 524, 524, 524, 524, 524, 524, 524,
276     // 680 - 687
277
524, 524, 524, 524, 524, 524, 524, 524,
278     // 688 - 695
279
556, 556, 556, 556, 556, 556, 556, 556,
280     // 696 - 703
281
556, 556, 556, 556, 556, 556, 556, 556,
282     // 704 - 711
283
136, 136, 136, 136, 136, 136, 136, 136,
284     // 712 - 719
285
136, 136, 136, 136, 136, 136, 136, 136,
286     // 720 - 727
287
136, 136, 136, 136, 136, 136, 136, 136,
288     // 728 - 735
289
136, 136, 136, 136, 136, 136, 136, 136,
290     // 736 - 743
291
136, 136, 136, 136, 136, 136, 136, 136,
292     // 744 - 751
293
136, 136, 136, 136, 136, 136, 136, 136,
294     // 752 - 759
295
136, 136, 136, 136, 136, 136, 136, 136,
296     // 760 - 767
297
136, 136, 136, 136, 136, 136, 136, 136,
298     // 768 - 775
299
168, 168, 168, 168, 168, 168, 168, 168,
300     // 776 - 783
301
168, 168, 168, 168, 168, 168, 168, 168,
302     // 784 - 791
303
168, 168, 168, 168, 168, 168, 168, 168,
304     // 792 - 799
305
168, 168, 168, 168, 168, 168, 168, 168,
306     // 800 - 807
307
168, 168, 168, 168, 168, 168, 168, 168,
308     // 808 - 815
309
168, 168, 168, 168, 168, 168, 168, 168,
310     // 816 - 823
311
168, 168, 168, 168, 168, 168, 168, 168,
312     // 824 - 831
313
168, 168, 168, 168, 168, 168, 168, 168,
314     // 832 - 839
315
460, 460, 460, 460, 460, 460, 460, 460,
316     // 840 - 847
317
460, 460, 460, 460, 460, 460, 460, 460,
318     // 848 - 855
319
492, 492, 492, 492, 492, 492, 492, 492,
320     // 856 - 863
321
492, 492, 492, 492, 492, 492, 492, 492,
322     // 864 - 871
323
2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
324     // 872 - 879
325
2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
326     // 880 - 887
327
2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
328     // 888 - 895
329
2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
330     // 896 - 903
331
200, 200, 200, 200, 200, 200, 200, 200,
332     // 904 - 911
333
200, 200, 200, 200, 200, 200, 200, 200,
334     // 912 - 919
335
200, 200, 200, 200, 200, 200, 200, 200,
336     // 920 - 927
337
200, 200, 200, 200, 200, 200, 200, 200,
338     // 928 - 935
339
200, 200, 200, 200, 200, 200, 200, 200,
340     // 936 - 943
341
200, 200, 200, 200, 200, 200, 200, 200,
342     // 944 - 951
343
200, 200, 200, 200, 200, 200, 200, 200,
344     // 952 - 959
345
200, 200, 200, 200, 200, 200, 200, 200,
346     // 960 - 967
347
232, 232, 232, 232, 232, 232, 232, 232,
348     // 968 - 975
349
232, 232, 232, 232, 232, 232, 232, 232,
350     // 976 - 983
351
232, 232, 232, 232, 232, 232, 232, 232,
352     // 984 - 991
353
232, 232, 232, 232, 232, 232, 232, 232,
354     // 992 - 999
355
232, 232, 232, 232, 232, 232, 232, 232,
356     // 1000 - 1007
357
232, 232, 232, 232, 232, 232, 232, 232,
358     // 1008 - 1015
359
232, 232, 232, 232, 232, 232, 232, 232,
360     // 1016 - 1023
361
232, 232, 232, 232, 232, 232, 232, 232,
362     };
363     
364     // Additional make up codes for both White and Black runs
365
static short additionalMakeup[] = {
366     28679, 28679, 31752, (short)32777,
367     (short)33801, (short)34825, (short)35849, (short)36873,
368     (short)29703, (short)29703, (short)30727, (short)30727,
369     (short)37897, (short)38921, (short)39945, (short)40969
370     };
371
372     // Initial black run look up table, uses the first 4 bits of a code
373
static short initBlack[] = {
374     // 0 - 7
375
3226, 6412, 200, 168, 38, 38, 134, 134,
376     // 8 - 15
377
100, 100, 100, 100, 68, 68, 68, 68
378     };
379
380     //
381
static short twoBitBlack[] = {292, 260, 226, 226}; // 0 - 3
382

383     // Main black run table, using the last 9 bits of possible 13 bit code
384
static short black[] = {
385     // 0 - 7
386
62, 62, 30, 30, 0, 0, 0, 0,
387     // 8 - 15
388
0, 0, 0, 0, 0, 0, 0, 0,
389     // 16 - 23
390
0, 0, 0, 0, 0, 0, 0, 0,
391     // 24 - 31
392
0, 0, 0, 0, 0, 0, 0, 0,
393     // 32 - 39
394
3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
395     // 40 - 47
396
3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
397     // 48 - 55
398
3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
399     // 56 - 63
400
3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
401     // 64 - 71
402
588, 588, 588, 588, 588, 588, 588, 588,
403     // 72 - 79
404
1680, 1680, 20499, 22547, 24595, 26643, 1776, 1776,
405     // 80 - 87
406
1808, 1808, -24557, -22509, -20461, -18413, 1904, 1904,
407     // 88 - 95
408
1936, 1936, -16365, -14317, 782, 782, 782, 782,
409     // 96 - 103
410
814, 814, 814, 814, -12269, -10221, 10257, 10257,
411     // 104 - 111
412
12305, 12305, 14353, 14353, 16403, 18451, 1712, 1712,
413     // 112 - 119
414
1744, 1744, 28691, 30739, -32749, -30701, -28653, -26605,
415     // 120 - 127
416
2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061,
417     // 128 - 135
418
424, 424, 424, 424, 424, 424, 424, 424,
419     // 136 - 143
420
424, 424, 424, 424, 424, 424, 424, 424,
421     // 144 - 151
422
424, 424, 424, 424, 424, 424, 424, 424,
423     // 152 - 159
424
424, 424, 424, 424, 424, 424, 424, 424,
425     // 160 - 167
426
750, 750, 750, 750, 1616, 1616, 1648, 1648,
427     // 168 - 175
428
1424, 1424, 1456, 1456, 1488, 1488, 1520, 1520,
429     // 176 - 183
430
1840, 1840, 1872, 1872, 1968, 1968, 8209, 8209,
431     // 184 - 191
432
524, 524, 524, 524, 524, 524, 524, 524,
433     // 192 - 199
434
556, 556, 556, 556, 556, 556, 556, 556,
435     // 200 - 207
436
1552, 1552, 1584, 1584, 2000, 2000, 2032, 2032,
437     // 208 - 215
438
976, 976, 1008, 1008, 1040, 1040, 1072, 1072,
439     // 216 - 223
440
1296, 1296, 1328, 1328, 718, 718, 718, 718,
441     // 224 - 231
442
456, 456, 456, 456, 456, 456, 456, 456,
443     // 232 - 239
444
456, 456, 456, 456, 456, 456, 456, 456,
445     // 240 - 247
446
456, 456, 456, 456, 456, 456, 456, 456,
447     // 248 - 255
448
456, 456, 456, 456, 456, 456, 456, 456,
449     // 256 - 263
450
326, 326, 326, 326, 326, 326, 326, 326,
451     // 264 - 271
452
326, 326, 326, 326, 326, 326, 326, 326,
453     // 272 - 279
454
326, 326, 326, 326, 326, 326, 326, 326,
455     // 280 - 287
456
326, 326, 326, 326, 326, 326, 326, 326,
457     // 288 - 295
458
326, 326, 326, 326, 326, 326, 326, 326,
459     // 296 - 303
460
326, 326, 326, 326, 326, 326, 326, 326,
461     // 304 - 311
462
326, 326, 326, 326, 326, 326, 326, 326,
463     // 312 - 319
464
326, 326, 326, 326, 326, 326, 326, 326,
465     // 320 - 327
466
358, 358, 358, 358, 358, 358, 358, 358,
467     // 328 - 335
468
358, 358, 358, 358, 358, 358, 358, 358,
469     // 336 - 343
470
358, 358, 358, 358, 358, 358, 358, 358,
471     // 344 - 351
472
358, 358, 358, 358, 358, 358, 358, 358,
473     // 352 - 359
474
358, 358, 358, 358, 358, 358, 358, 358,
475     // 360 - 367
476
358, 358, 358, 358, 358, 358, 358, 358,
477     // 368 - 375
478
358, 358, 358, 358, 358, 358, 358, 358,
479     // 376 - 383
480
358, 358, 358, 358, 358, 358, 358, 358,
481     // 384 - 391
482
490, 490, 490, 490, 490, 490, 490, 490,
483     // 392 - 399
484
490, 490, 490, 490, 490, 490, 490, 490,
485     // 400 - 407
486
4113, 4113, 6161, 6161, 848, 848, 880, 880,
487     // 408 - 415
488
912, 912, 944, 944, 622, 622, 622, 622,
489     // 416 - 423
490
654, 654, 654, 654, 1104, 1104, 1136, 1136,
491     // 424 - 431
492
1168, 1168, 1200, 1200, 1232, 1232, 1264, 1264,
493     // 432 - 439
494
686, 686, 686, 686, 1360, 1360, 1392, 1392,
495     // 440 - 447
496
12, 12, 12, 12, 12, 12, 12, 12,
497     // 448 - 455
498
390, 390, 390, 390, 390, 390, 390, 390,
499     // 456 - 463
500
390, 390, 390, 390, 390, 390, 390, 390,
501     // 464 - 471
502
390, 390, 390, 390, 390, 390, 390, 390,
503     // 472 - 479
504
390, 390, 390, 390, 390, 390, 390, 390,
505     // 480 - 487
506
390, 390, 390, 390, 390, 390, 390, 390,
507     // 488 - 495
508
390, 390, 390, 390, 390, 390, 390, 390,
509     // 496 - 503
510
390, 390, 390, 390, 390, 390, 390, 390,
511     // 504 - 511
512
390, 390, 390, 390, 390, 390, 390, 390,
513     };
514
515     static byte twoDCodes[] = {
516     // 0 - 7
517
80, 88, 23, 71, 30, 30, 62, 62,
518     // 8 - 15
519
4, 4, 4, 4, 4, 4, 4, 4,
520     // 16 - 23
521
11, 11, 11, 11, 11, 11, 11, 11,
522     // 24 - 31
523
11, 11, 11, 11, 11, 11, 11, 11,
524     // 32 - 39
525
35, 35, 35, 35, 35, 35, 35, 35,
526     // 40 - 47
527
35, 35, 35, 35, 35, 35, 35, 35,
528     // 48 - 55
529
51, 51, 51, 51, 51, 51, 51, 51,
530     // 56 - 63
531
51, 51, 51, 51, 51, 51, 51, 51,
532     // 64 - 71
533
41, 41, 41, 41, 41, 41, 41, 41,
534     // 72 - 79
535
41, 41, 41, 41, 41, 41, 41, 41,
536     // 80 - 87
537
41, 41, 41, 41, 41, 41, 41, 41,
538     // 88 - 95
539
41, 41, 41, 41