Пример #1
0
  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;
  }
Пример #2
0
  private byte[] getInflatedImageData(PngChunk chunk, Iterator<PngChunk> itChunks)
      throws IOException {
    ByteArrayOutputStream imageBytes =
        new ByteArrayOutputStream(chunk == null ? 0 : chunk.getLength());
    DataOutputStream imageData = new DataOutputStream(imageBytes);
    while (chunk != null) {
      if (PngChunk.IMAGE_DATA.equals(chunk.getTypeString())) {
        imageData.write(chunk.getData());
      } else {
        break;
      }
      chunk = itChunks.hasNext() ? itChunks.next() : null;
    }
    imageData.close();

    return this.pngCompressionHandler.inflate(imageBytes);
  }
Пример #3
0
  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;
  }