private PngChunk processHeadChunks(PngImage result, Iterator<PngChunk> itChunks) throws IOException { PngChunk chunk = null; while (itChunks.hasNext()) { chunk = itChunks.next(); if (PngChunk.IMAGE_DATA.equals(chunk.getTypeString())) { break; } if (chunk.isRequired()) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(chunk.getLength()); DataOutputStream data = new DataOutputStream(bytes); data.write(chunk.getData()); data.close(); PngChunk newChunk = new PngChunk(chunk.getType(), bytes.toByteArray()); if (PngChunk.IMAGE_HEADER.equals(chunk.getTypeString())) { newChunk.setInterlace((byte) 0); } result.addChunk(newChunk); } } return chunk; }
private PngChunk processTailChunks( PngImage result, Iterator<PngChunk> itBaseChunks, PngChunk lastBaseChunk) throws IOException { while (lastBaseChunk != null) { if (lastBaseChunk.isCritical()) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(lastBaseChunk.getLength()); DataOutputStream data = new DataOutputStream(bytes); data.write(lastBaseChunk.getData()); data.close(); PngChunk newChunk = new PngChunk(lastBaseChunk.getType(), bytes.toByteArray()); result.addChunk(newChunk); } lastBaseChunk = itBaseChunks.hasNext() ? itBaseChunks.next() : null; } return lastBaseChunk; }