public PNGFile()

in src/main/java/org/apache/xmlgraphics/image/loader/impl/PNGFile.java [72:120]


    public PNGFile(InputStream stream, String uri) throws IOException, ImageException {
        if (!stream.markSupported()) {
            stream = new BufferedInputStream(stream);
        }
        DataInputStream distream = new DataInputStream(stream);
        long magic = distream.readLong();
        if (magic != PNG_SIGNATURE) {
            String msg = PropertyUtil.getString("PNGImageDecoder0");
            throw new ImageException(msg);
        }
        // only some chunks are worth parsing in the current implementation
        do {
            try {
                PNGChunk chunk;
                String chunkType = PNGChunk.getChunkType(distream);
                if (chunkType.equals(PNGChunk.ChunkType.IHDR.name())) {
                    chunk = PNGChunk.readChunk(distream);
                    parse_IHDR_chunk(chunk);
                } else if (chunkType.equals(PNGChunk.ChunkType.PLTE.name())) {
                    chunk = PNGChunk.readChunk(distream);
                    parse_PLTE_chunk(chunk);
                } else if (chunkType.equals(PNGChunk.ChunkType.IDAT.name())) {
                    chunk = PNGChunk.readChunk(distream);
                    streamVec.add(new ByteArrayInputStream(chunk.getData()));
                } else if (chunkType.equals(PNGChunk.ChunkType.IEND.name())) {
                    // chunk = PNGChunk.readChunk(distream);
                    PNGChunk.skipChunk(distream);
                    break; // fall through to the bottom
                } else if (chunkType.equals(PNGChunk.ChunkType.tRNS.name())) {
                    chunk = PNGChunk.readChunk(distream);
                    parse_tRNS_chunk(chunk);
                } else if (chunkType.equals(PNGChunk.ChunkType.iCCP.name())) {
                    chunk = PNGChunk.readChunk(distream);
                    parse_iCCP_chunk(chunk);
                } else if (chunkType.equals(PNGChunk.ChunkType.sRGB.name())) {
                  chunk = PNGChunk.readChunk(distream);
                  parse_sRGB_chunk(chunk);
                } else {
                    if (Character.isUpperCase(chunkType.charAt(0))) {
                        throw new ImageException("PNG unknown critical chunk: " + chunkType);
                    }
                    PNGChunk.skipChunk(distream);
                }
            } catch (Exception e) {
                String msg = PropertyUtil.getString("PNGImageDecoder2");
                throw new RuntimeException(msg + " " + uri, e);
            }
        } while (true);
    }