in src/main/java/org/apache/xmlgraphics/image/codec/png/PNGImageDecoder.java [674:772]
private void parse_IEND_chunk(PNGChunk chunk) throws Exception {
// Store text strings
int textLen = textKeys.size();
String[] textArray = new String[2 * textLen];
for (int i = 0; i < textLen; i++) {
String key = (String)textKeys.get(i);
String val = (String)textStrings.get(i);
textArray[2 * i] = key;
textArray[2 * i + 1] = val;
if (emitProperties) {
String uniqueKey = "text_" + i + ':' + key;
properties.put(uniqueKey.toLowerCase(Locale.getDefault()), val);
}
}
if (encodeParam != null) {
encodeParam.setText(textArray);
}
// Store compressed text strings
int ztextLen = ztextKeys.size();
String[] ztextArray = new String[2 * ztextLen];
for (int i = 0; i < ztextLen; i++) {
String key = (String)ztextKeys.get(i);
String val = (String)ztextStrings.get(i);
ztextArray[2 * i] = key;
ztextArray[2 * i + 1] = val;
if (emitProperties) {
String uniqueKey = "ztext_" + i + ':' + key;
properties.put(uniqueKey.toLowerCase(Locale.getDefault()), val);
}
}
if (encodeParam != null) {
encodeParam.setCompressedText(ztextArray);
}
// Parse prior IDAT chunks
InputStream seqStream =
new SequenceInputStream(Collections.enumeration(streamVec));
InputStream infStream =
new InflaterInputStream(seqStream, new Inflater());
dataStream = new DataInputStream(infStream);
// Create an empty WritableRaster
int depth = bitDepth;
if ((colorType == PNG_COLOR_GRAY)
&& (bitDepth < 8) && output8BitGray) {
depth = 8;
}
if ((colorType == PNG_COLOR_PALETTE) && expandPalette) {
depth = 8;
}
int bytesPerRow = (outputBands * width * depth + 7) / 8;
int scanlineStride =
(depth == 16) ? (bytesPerRow / 2) : bytesPerRow;
theTile = createRaster(width, height, outputBands,
scanlineStride,
depth);
if (performGammaCorrection && (gammaLut == null)) {
initGammaLut(bitDepth);
}
if ((postProcess == POST_GRAY_LUT)
|| (postProcess == POST_GRAY_LUT_ADD_TRANS)
|| (postProcess == POST_GRAY_LUT_ADD_TRANS_EXP)) {
initGrayLut(bitDepth);
}
decodeImage(interlaceMethod == 1);
sampleModel = theTile.getSampleModel();
if ((colorType == PNG_COLOR_PALETTE) && !expandPalette) {
if (outputHasAlphaPalette) {
colorModel = new IndexColorModel(bitDepth,
paletteEntries,
redPalette,
greenPalette,
bluePalette,
alphaPalette);
} else {
colorModel = new IndexColorModel(bitDepth,
paletteEntries,
redPalette,
greenPalette,
bluePalette);
}
} else if ((colorType == PNG_COLOR_GRAY)
&& (bitDepth < 8) && !output8BitGray) {
byte[] palette = expandBits[bitDepth];
colorModel = new IndexColorModel(bitDepth,
palette.length,
palette,
palette,
palette);
} else {
colorModel =
createComponentColorModel(sampleModel);
}
}