in src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java [746:824]
private GifHeaderInfo readHeader(final InputStream is,
final FormatCompliance formatCompliance) throws ImagingException,
IOException {
final byte identifier1 = readByte("identifier1", is, "Not a Valid GIF File");
final byte identifier2 = readByte("identifier2", is, "Not a Valid GIF File");
final byte identifier3 = readByte("identifier3", is, "Not a Valid GIF File");
final byte version1 = readByte("version1", is, "Not a Valid GIF File");
final byte version2 = readByte("version2", is, "Not a Valid GIF File");
final byte version3 = readByte("version3", is, "Not a Valid GIF File");
if (formatCompliance != null) {
formatCompliance.compareBytes("Signature", GIF_HEADER_SIGNATURE,
new byte[] { identifier1, identifier2, identifier3 });
formatCompliance.compare("version", 56, version1);
formatCompliance.compare("version", new int[] { 55, 57, }, version2);
formatCompliance.compare("version", 97, version3);
}
if (LOGGER.isLoggable(Level.FINEST)) {
logCharQuad("identifier: ", ((identifier1 << 16)
| (identifier2 << 8) | (identifier3 << 0)));
logCharQuad("version: ",
((version1 << 16) | (version2 << 8) | (version3 << 0)));
}
final int logicalScreenWidth = read2Bytes("Logical Screen Width", is, "Not a Valid GIF File", getByteOrder());
final int logicalScreenHeight = read2Bytes("Logical Screen Height", is, "Not a Valid GIF File", getByteOrder());
if (formatCompliance != null) {
formatCompliance.checkBounds("Width", 1, Integer.MAX_VALUE,
logicalScreenWidth);
formatCompliance.checkBounds("Height", 1, Integer.MAX_VALUE,
logicalScreenHeight);
}
final byte packedFields = readByte("Packed Fields", is,
"Not a Valid GIF File");
final byte backgroundColorIndex = readByte("Background Color Index", is,
"Not a Valid GIF File");
final byte pixelAspectRatio = readByte("Pixel Aspect Ratio", is,
"Not a Valid GIF File");
if (LOGGER.isLoggable(Level.FINEST)) {
logByteBits("PackedFields bits", packedFields);
}
final boolean globalColorTableFlag = ((packedFields & 128) > 0);
if (LOGGER.isLoggable(Level.FINEST)) {
LOGGER.finest("GlobalColorTableFlag: " + globalColorTableFlag);
}
final byte colorResolution = (byte) ((packedFields >> 4) & 7);
if (LOGGER.isLoggable(Level.FINEST)) {
LOGGER.finest("ColorResolution: " + colorResolution);
}
final boolean sortFlag = ((packedFields & 8) > 0);
if (LOGGER.isLoggable(Level.FINEST)) {
LOGGER.finest("SortFlag: " + sortFlag);
}
final byte sizeofGlobalColorTable = (byte) (packedFields & 7);
if (LOGGER.isLoggable(Level.FINEST)) {
LOGGER.finest("SizeofGlobalColorTable: "
+ sizeofGlobalColorTable);
}
if (formatCompliance != null) {
if (globalColorTableFlag && backgroundColorIndex != -1) {
formatCompliance.checkBounds("Background Color Index", 0,
convertColorTableSize(sizeofGlobalColorTable),
backgroundColorIndex);
}
}
return new GifHeaderInfo(identifier1, identifier2, identifier3,
version1, version2, version3, logicalScreenWidth,
logicalScreenHeight, packedFields, backgroundColorIndex,
pixelAspectRatio, globalColorTableFlag, colorResolution,
sortFlag, sizeofGlobalColorTable);
}