in src/main/java/org/apache/xmlgraphics/image/codec/png/PNGImageEncoder.java [695:742]
private void writeTRNS() throws IOException {
if (param.isTransparencySet()
&& (colorType != PNG_COLOR_GRAY_ALPHA)
&& (colorType != PNG_COLOR_RGB_ALPHA)) {
ChunkStream cs = new ChunkStream("tRNS");
try {
if (param instanceof PNGEncodeParam.Palette) {
byte[] t =
((PNGEncodeParam.Palette)param).getPaletteTransparency();
for (byte aT : t) {
cs.writeByte(aT);
}
} else if (param instanceof PNGEncodeParam.Gray) {
int t = ((PNGEncodeParam.Gray)param).getTransparentGray();
cs.writeShort(t);
} else if (param instanceof PNGEncodeParam.RGB) {
int[] t = ((PNGEncodeParam.RGB)param).getTransparentRGB();
cs.writeShort(t[0]);
cs.writeShort(t[1]);
cs.writeShort(t[2]);
}
cs.writeToStream(dataOutput);
} finally {
cs.close();
}
} else if (colorType == PNG_COLOR_PALETTE) {
int lastEntry = Math.min(255, alphaPalette.length - 1);
int nonOpaque;
for (nonOpaque = lastEntry; nonOpaque >= 0; nonOpaque--) {
if (alphaPalette[nonOpaque] != (byte)255) {
break;
}
}
if (nonOpaque >= 0) {
ChunkStream cs = new ChunkStream("tRNS");
try {
for (int i = 0; i <= nonOpaque; i++) {
cs.writeByte(alphaPalette[i]);
}
cs.writeToStream(dataOutput);
} finally {
cs.close();
}
}
}
}