current = nextNBits(10); entry = white[current]; twoBits = nextLesserThan8Bits(2); updatePointer(4 - bits); } else if (bits == 0) { // ERROR throw new RuntimeException(PropertyUtil.getString("TIFFFaxDecoder0")); updatePointer(10 - bits); if (isT == 0) { isWhite = false; advancePointer(); current = nextLesserThan8Bits(4); entry = initBlack[current]; current = nextNBits(9); entry = black[current]; updatePointer(5); current = nextLesserThan8Bits(4); entry = additionalMakeup[current]; bits = (entry >>> 1) & 0x07; // 3 bits 0000 0111 code = (entry >>> 4) & 0x0fff; // 12 bits setToBlack(buffer, lineOffset, bitOffset, code); bitOffset += code;
if (readEOL() != 1) { throw new RuntimeException(PropertyUtil.getString("TIFFFaxDecoder3")); decodeNextScanline(buffer, lineOffset, startX); lineOffset += scanlineStride; if (readEOL() == 0) { getNextChangingElement(a0, isWhite, b); entry = nextLesserThan8Bits(7); setToBlack(buffer, lineOffset, bitOffset, b2 - bitOffset); updatePointer(7 - bits); } else if (code == 1) { updatePointer(7 - bits); number = decodeWhiteCodeWord(); bitOffset += number; currChangingElems[currIndex++] = bitOffset; number = decodeBlackCodeWord(); setToBlack(buffer, lineOffset, bitOffset, number); bitOffset += number; currChangingElems[currIndex++] = bitOffset; } else {
current = nextLesserThan8Bits(4); entry = initBlack[current]; current = nextNBits(9); entry = black[current]; updatePointer(5); current = nextLesserThan8Bits(4); entry = additionalMakeup[current]; bits = (entry >>> 1) & 0x07; // 3 bits 0000 0111 updatePointer(4 - bits); } else if (bits == 15) { } else { runLength += code; updatePointer(9 - bits); if (isT == 0) { isWhite = true; current = nextLesserThan8Bits(2); entry = twoBitBlack[current]; code = (entry >>> 5) & 0x07ff; runLength += code; bits = (entry >>> 1) & 0x0f; updatePointer(2 - bits); isWhite = true; } else {
getNextChangingElement(a0, isWhite, b); b1 = b[0]; b2 = b[1]; entry = nextLesserThan8Bits(7); setToBlack(buffer, lineOffset, bitOffset, b2 - bitOffset); updatePointer(7 - bits); } else if (code == 1) { // Horizontal updatePointer(7 - bits); number = decodeWhiteCodeWord(); bitOffset += number; cce[currIndex++] = bitOffset; number = decodeBlackCodeWord(); setToBlack(buffer, lineOffset, bitOffset, number); bitOffset += number; cce[currIndex++] = bitOffset; } else { number = decodeBlackCodeWord(); setToBlack(buffer, lineOffset, bitOffset, number); bitOffset += number; cce[currIndex++] = bitOffset;
} else if (compression == COMP_FAX_G3_1D) { stream.readFully(data, 0, byteCount); decoder.decode1D(bdata, data, 0, newRect.height); } else if (compression == COMP_FAX_G3_2D) { stream.readFully(data, 0, byteCount); decoder.decode2D(bdata, data, 0, newRect.height, tiffT4Options); } else if (compression == COMP_FAX_G4_2D) { stream.readFully(data, 0, byteCount); decoder.decodeT6(bdata, data, 0, newRect.height, tiffT6Options); } else if (compression == COMP_DEFLATE) {
private int readEOL() { if (fillBits == 0) { if (nextNBits(12) != 1) { throw new RuntimeException(PropertyUtil.getString("TIFFFaxDecoder6")); if (nextNBits(bitsLeft) != 0) { throw new RuntimeException(PropertyUtil.getString("TIFFFaxDecoder8")); if (nextNBits(8) != 0) { throw new RuntimeException(PropertyUtil.getString("TIFFFaxDecoder8")); while ((n = nextNBits(8)) != 1) { return nextLesserThan8Bits(1);
public void decode1D(byte[] buffer, byte[] compData, int startX, int height) { this.data = compData; int lineOffset = 0; int scanlineStride = (w + 7) / 8; bitPointer = 0; bytePointer = 0; for (int i = 0; i < height; i++) { decodeNextScanline(buffer, lineOffset, startX); lineOffset += scanlineStride; } }
decoder = new TIFFFaxDecoder(fillOrder, tileWidth, tileHeight); break;
current = nextNBits(10); entry = white[current]; twoBits = nextLesserThan8Bits(2); code = (entry >>> 4) & 0x0fff; // 12 bits runLength += code; updatePointer(4 - bits); } else if (bits == 0) { // ERROR throw new RuntimeException(PropertyUtil.getString("TIFFFaxDecoder0")); updatePointer(10 - bits); if (isT == 0) { isWhite = false;