| 1 33 package com.lowagie.text.pdf.codec; 34 35 public class TIFFFaxDecoder { 36 37 private int bitPointer, bytePointer; 38 private byte[] data; 39 private int w, h; 40 private int fillOrder; 41 42 private int changingElemSize = 0; 45 private int prevChangingElems[]; 46 private int currChangingElems[]; 47 48 private int lastChangingElement = 0; 50 51 private int compression = 2; 52 53 private int uncompressedMode = 0; 55 private int fillBits = 0; 56 private int oneD; 57 58 static int table1[] = { 59 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; 69 70 static int table2[] = { 71 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff }; 81 82 static byte flipTable[] = { 84 0, -128, 64, -64, 32, -96, 96, -32, 85 16, -112, 80, -48, 48, -80, 112, -16, 86 8, -120, 72, -56, 40, -88, 104, -24, 87 24, -104, 88, -40, 56, -72, 120, -8, 88 4, -124, 68, -60, 36, -92, 100, -28, 89 20, -108, 84, -44, 52, -76, 116, -12, 90 12, -116, 76, -52, 44, -84, 108, -20, 91 28, -100, 92, -36, 60, -68, 124, -4, 92 2, -126, 66, -62, 34, -94, 98, -30, 93 18, -110, 82, -46, 50, -78, 114, -14, 94 10, -118, 74, -54, 42, -86, 106, -22, 95 26, -102, 90, -38, 58, -70, 122, -6, 96 6, -122, 70, -58, 38, -90, 102, -26, 97 22, -106, 86, -42, 54, -74, 118, -10, 98 14, -114, 78, -50, 46, -82, 110, -18, 99 30, -98, 94, -34, 62, -66, 126, -2, 100 1, -127, 65, -63, 33, -95, 97, -31, 101 17, -111, 81, -47, 49, -79, 113, -15, 102 9, -119, 73, -55, 41, -87, 105, -23, 103 25, -103, 89, -39, 57, -71, 121, -7, 104 5, -123, 69, -59, 37, -91, 101, -27, 105 21, -107, 85, -43, 53, -75, 117, -11, 106 13, -115, 77, -51, 45, -83, 109, -19, 107 29, -99, 93, -35, 61, -67, 125, -3, 108 3, -125, 67, -61, 35, -93, 99, -29, 109 19, -109, 83, -45, 51, -77, 115, -13, 110 11, -117, 75, -53, 43, -85, 107, -21, 111 27, -101, 91, -37, 59, -69, 123, -5, 112 7, -121, 71, -57, 39, -89, 103, -25, 113 23, -105, 87, -41, 55, -73, 119, -9, 114 15, -113, 79, -49, 47, -81, 111, -17, 115 31, -97, 95, -33, 63, -65, 127, -1, 116 }; 117 118 static short white[] = { 120 6430, 6400, 6400, 6400, 3225, 3225, 3225, 3225, 122 944, 944, 944, 944, 976, 976, 976, 976, 124 1456, 1456, 1456, 1456, 1488, 1488, 1488, 1488, 126 718, 718, 718, 718, 718, 718, 718, 718, 128 750, 750, 750, 750, 750, 750, 750, 750, 130 1520, 1520, 1520, 1520, 1552, 1552, 1552, 1552, 132 428, 428, 428, 428, 428, 428, 428, 428, 134 428, 428, 428, 428, 428, 428, 428, 428, 136 654, 654, 654, 654, 654, 654, 654, 654, 138 1072, 1072, 1072, 1072, 1104, 1104, 1104, 1104, 140 1136, 1136, 1136, 1136, 1168, 1168, 1168, 1168, 142 1200, 1200, 1200, 1200, 1232, 1232, 1232, 1232, 144 622, 622, 622, 622, 622, 622, 622, 622, 146 1008, 1008, 1008, 1008, 1040, 1040, 1040, 1040, 148 44, 44, 44, 44, 44, 44, 44, 44, 150 44, 44, 44, 44, 44, 44, 44, 44, 152 396, 396, 396, 396, 396, 396, 396, 396, 154 396, 396, 396, 396, 396, 396, 396, 396, 156 1712, 1712, 1712, 1712, 1744, 1744, 1744, 1744, 158 846, 846, 846, 846, 846, 846, 846, 846, 160 1264, 1264, 1264, 1264, 1296, 1296, 1296, 1296, 162 1328, 1328, 1328, 1328, 1360, 1360, 1360, 1360, 164 1392, 1392, 1392, 1392, 1424, 1424, 1424, 1424, 166 686, 686, 686, 686, 686, 686, 686, 686, 168 910, 910, 910, 910, 910, 910, 910, 910, 170 1968, 1968, 1968, 1968, 2000, 2000, 2000, 2000, 172 2032, 2032, 2032, 2032, 16, 16, 16, 16, 174 10257, 10257, 10257, 10257, 12305, 12305, 12305, 12305, 176 330, 330, 330, 330, 330, 330, 330, 330, 178 330, 330, 330, 330, 330, 330, 330, 330, 180 330, 330, 330, 330, 330, 330, 330, 330, 182 330, 330, 330, 330, 330, 330, 330, 330, 184 362, 362, 362, 362, 362, 362, 362, 362, 186 362, 362, 362, 362, 362, 362, 362, 362, 188 362, 362, 362, 362, 362, 362, 362, 362, 190 362, 362, 362, 362, 362, 362, 362, 362, 192 878, 878, 878, 878, 878, 878, 878, 878, 194 1904, 1904, 1904, 1904, 1936, 1936, 1936, 1936, 196 -18413, -18413, -16365, -16365, -14317, -14317, -10221, -10221, 198 590, 590, 590, 590, 590, 590, 590, 590, 200 782, 782, 782, 782, 782, 782, 782, 782, 202 1584, 1584, 1584, 1584, 1616, 1616, 1616, 1616, 204 1648, 1648, 1648, 1648, 1680, 1680, 1680, 1680, 206 814, 814, 814, 814, 814, 814, 814, 814, 208 1776, 1776, 1776, 1776, 1808, 1808, 1808, 1808, 210 1840, 1840, 1840, 1840, 1872, 1872, 1872, 1872, 212 6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157, 214 6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157, 216 -12275, -12275, -12275, -12275, -12275, -12275, -12275, -12275, 218 -12275, -12275, -12275, -12275, -12275, -12275, -12275, -12275, 220 14353, 14353, 14353, 14353, 16401, 16401, 16401, 16401, 222 22547, 22547, 24595, 24595, 20497, 20497, 20497, 20497, 224 18449, 18449, 18449, 18449, 26643, 26643, 28691, 28691, 226 30739, 30739, -32749, -32749, -30701, -30701, -28653, -28653, 228 -26605, -26605, -24557, -24557, -22509, -22509, -20461, -20461, 230 8207, 8207, 8207, 8207, 8207, 8207, 8207, 8207, 232 72, 72, 72, 72, 72, 72, 72, 72, 234 72, 72, 72, 72, 72, 72, 72, 72, 236 72, 72, 72, 72, 72, 72, 72, 72, 238 72, 72, 72, 72, 72, 72, 72, 72, 240 72, 72, 72, 72, 72, 72, 72, 72, 242 72, 72, 72, 72, 72, 72, 72, 72, 244 72, 72, 72, 72, 72, 72, 72, 72, 246 72, 72, 72, 72, 72, 72, 72, 72, 248 104, 104, 104, 104, 104, 104, 104, 104, 250 104, 104, 104, 104, 104, 104, 104, 104, 252 104, 104, 104, 104, 104, 104, 104, 104, 254 104, 104, 104, 104, 104, 104, 104, 104, 256 104, 104, 104, 104, 104, 104, 104, 104, 258 104, 104, 104, 104, 104, 104, 104, 104, 260 104, 104, 104, 104, 104, 104, 104, 104, 262 104, 104, 104, 104, 104, 104, 104, 104, 264 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 266 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 268 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 270 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 272 266, 266, 266, 266, 266, 266, 266, 266, 274 266, 266, 266, 266, 266, 266, 266, 266, 276 266, 266, 266, 266, 266, 266, 266, 266, 278 266, 266, 266, 266, 266, 266, 266, 266, 280 298, 298, 298, 298, 298, 298, 298, 298, 282 298, 298, 298, 298, 298, 298, 298, 298, 284 298, 298, 298, 298, 298, 298, 298, 298, 286 298, 298, 298, 298, 298, 298, 298, 298, 288 524, 524, 524, 524, 524, 524, 524, 524, 290 524, 524, 524, 524, 524, 524, 524, 524, 292 556, 556, 556, 556, 556, 556, 556, 556, 294 556, 556, 556, 556, 556, 556, 556, 556, 296 136, 136, 136, 136, 136, 136, 136, 136, 298 136, 136, 136, 136, 136, 136, 136, 136, 300 136, 136, 136, 136, 136, 136, 136, 136, 302 136, 136, 136, 136, 136, 136, 136, 136, 304 136, 136, 136, 136, 136, 136, 136, 136, 306 136, 136, 136, 136, 136, 136, 136, 136, 308 136, 136, 136, 136, 136, 136, 136, 136, 310 136, 136, 136, 136, 136, 136, 136, 136, 312 168, 168, 168, 168, 168, 168, 168, 168, 314 168, 168, 168, 168, 168, 168, 168, 168, 316 168, 168, 168, 168, 168, 168, 168, 168, 318 168, 168, 168, 168, 168, 168, 168, 168, 320 168, 168, 168, 168, 168, 168, 168, 168, 322 168, 168, 168, 168, 168, 168, 168, 168, 324 168, 168, 168, 168, 168, 168, 168, 168, 326 168, 168, 168, 168, 168, 168, 168, 168, 328 460, 460, 460, 460, 460, 460, 460, 460, 330 460, 460, 460, 460, 460, 460, 460, 460, 332 492, 492, 492, 492, 492, 492, 492, 492, 334 492, 492, 492, 492, 492, 492, 492, 492, 336 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 338 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 340 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 342 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 344 200, 200, 200, 200, 200, 200, 200, 200, 346 200, 200, 200, 200, 200, 200, 200, 200, 348 200, 200, 200, 200, 200, 200, 200, 200, 350 200, 200, 200, 200, 200, 200, 200, 200, 352 200, 200, 200, 200, 200, 200, 200, 200, 354 200, 200, 200, 200, 200, 200, 200, 200, 356 200, 200, 200, 200, 200, 200, 200, 200, 358 200, 200, 200, 200, 200, 200, 200, 200, 360 232, 232, 232, 232, 232, 232, 232, 232, 362 232, 232, 232, 232, 232, 232, 232, 232, 364 232, 232, 232, 232, 232, 232, 232, 232, 366 232, 232, 232, 232, 232, 232, 232, 232, 368 232, 232, 232, 232, 232, 232, 232, 232, 370 232, 232, 232, 232, 232, 232, 232, 232, 372 232, 232, 232, 232, 232, 232, 232, 232, 374 232, 232, 232, 232, 232, 232, 232, 232, 376 }; 377 378 static short additionalMakeup[] = { 380 28679, 28679, 31752, (short)32777, 381 (short)33801, (short)34825, (short)35849, (short)36873, 382 (short)29703, (short)29703, (short)30727, (short)30727, 383 (short)37897, (short)38921, (short)39945, (short)40969 384 }; 385 386 static short initBlack[] = { 388 3226, 6412, 200, 168, 38, 38, 134, 134, 390 100, 100, 100, 100, 68, 68, 68, 68 392 }; 393 394 static short twoBitBlack[] = {292, 260, 226, 226}; 397 static short black[] = { 399 62, 62, 30, 30, 0, 0, 0, 0, 401 0, 0, 0, 0, 0, 0, 0, 0, 403 0, 0, 0, 0, 0, 0, 0, 0, 405 0, 0, 0, 0, 0, 0, 0, 0, 407 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 409 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 411 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 413 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 415 588, 588, 588, 588, 588, 588, 588, 588, 417 1680, 1680, 20499, 22547, 24595, 26643, 1776, 1776, 419 1808, 1808, -24557, -22509, -20461, -18413, 1904, 1904, 421 1936, 1936, -16365, -14317, 782, 782, 782, 782, 423 814, 814, 814, 814, -12269, -10221, 10257, 10257, 425 12305, 12305, 14353, 14353, 16403, 18451, 1712, 1712, 427 1744, 1744, 28691, 30739, -32749, -30701, -28653, -26605, 429 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 431 424, 424, 424, 424, 424, 424, 424, 424, 433 424, 424, 424, 424, 424, 424, 424, 424, 435 424, 424, 424, 424, 424, 424, 424, 424, 437 424, 424, 424, 424, 424, 424, 424, 424, 439 750, 750, 750, 750, 1616, 1616, 1648, 1648, 441 1424, 1424, 1456, 1456, 1488, 1488, 1520, 1520, 443 1840, 1840, 1872, 1872, 1968, 1968, 8209, 8209, 445 524, 524, 524, 524, 524, 524, 524, 524, 447 556, 556, 556, 556, 556, 556, 556, 556, 449 1552, 1552, 1584, 1584, 2000, 2000, 2032, 2032, 451 976, 976, 1008, 1008, 1040, 1040, 1072, 1072, 453 1296, 1296, 1328, 1328, 718, 718, 718, 718, 455 456, 456, 456, 456, 456, 456, 456, 456, 457 456, 456, 456, 456, 456, 456, 456, 456, 459 456, 456, 456, 456, 456, 456, 456, 456, 461 456, 456, 456, 456, 456, 456, 456, 456, 463 326, 326, 326, 326, 326, 326, 326, 326, 465 326, 326, 326, 326, 326, 326, 326, 326, 467 326, 326, 326, 326, 326, 326, 326, 326, 469 326, 326, 326, 326, 326, 326, 326, 326, 471 326, 326, 326, 326, 326, 326, 326, 326, 473 326, 326, 326, 326, 326, 326, 326, 326, 475 326, 326, 326, 326, 326, 326, 326, 326, 477 326, 326, 326, 326, 326, 326, 326, 326, 479 358, 358, 358, 358, 358, 358, 358, 358, 481 358, 358, 358, 358, 358, 358, 358, 358, 483 358, 358, 358, 358, 358, 358, 358, 358, 485 358, 358, 358, 358, 358, 358, 358, 358, 487 358, 358, 358, 358, 358, 358, 358, 358, 489 358, 358, 358, 358, 358, 358, 358, 358, 491 358, 358, 358, 358, 358, 358, 358, 358, 493 358, 358, 358, 358, 358, 358, 358, 358, 495 490, 490, 490, 490, 490, 490, 490, 490, 497 490, 490, 490, 490, 490, 490, 490, 490, 499 4113, 4113, 6161, 6161, 848, 848, 880, 880, 501 912, 912, 944, 944, 622, 622, 622, 622, 503 654, 654, 654, 654, 1104, 1104, 1136, 1136, 505 1168, 1168, 1200, 1200, 1232, 1232, 1264, 1264, 507 686, 686, 686, 686, 1360, 1360, 1392, 1392, 509 12, 12, 12, 12, 12, 12, 12, 12, 511 390, 390, 390, 390, 390, 390, 390, 390, 513 390, 390, 390, 390, 390, 390, 390, 390, 515 390, 390, 390, 390, 390, 390, 390, 390, 517 390, 390, 390, 390, 390, 390, 390, 390, 519 390, 390<
|