in src/main/java/org/apache/xmlgraphics/image/codec/png/PNGRed.java [1009:1064]
private void parse_bKGD_chunk(PNGChunk chunk) {
switch (colorType) {
case PNG_COLOR_PALETTE:
int bkgdIndex = chunk.getByte(0) & 0xff;
bkgdRed = redPalette[bkgdIndex] & 0xff;
bkgdGreen = greenPalette[bkgdIndex] & 0xff;
bkgdBlue = bluePalette[bkgdIndex] & 0xff;
if (encodeParam != null) {
((PNGEncodeParam.Palette)encodeParam).setBackgroundPaletteIndex(bkgdIndex);
}
break;
case PNG_COLOR_GRAY: case PNG_COLOR_GRAY_ALPHA:
int bkgdGray = chunk.getInt2(0);
bkgdRed = bkgdGreen = bkgdBlue = bkgdGray;
if (encodeParam != null) {
((PNGEncodeParam.Gray)encodeParam).setBackgroundGray(bkgdGray);
}
break;
case PNG_COLOR_RGB: case PNG_COLOR_RGB_ALPHA:
bkgdRed = chunk.getInt2(0);
bkgdGreen = chunk.getInt2(2);
bkgdBlue = chunk.getInt2(4);
int[] bkgdRGB = new int[3];
bkgdRGB[0] = bkgdRed;
bkgdRGB[1] = bkgdGreen;
bkgdRGB[2] = bkgdBlue;
if (encodeParam != null) {
((PNGEncodeParam.RGB)encodeParam).setBackgroundRGB(bkgdRGB);
}
break;
}
if (emitProperties) {
int r = 0;
int g = 0;
int b = 0;
if ((colorType == PNG_COLOR_PALETTE) || (bitDepth == 8)) {
r = bkgdRed;
g = bkgdGreen;
b = bkgdBlue;
} else if (bitDepth < 8) {
r = expandBits[bitDepth][bkgdRed];
g = expandBits[bitDepth][bkgdGreen];
b = expandBits[bitDepth][bkgdBlue];
} else if (bitDepth == 16) {
r = bkgdRed >> 8;
g = bkgdGreen >> 8;
b = bkgdBlue >> 8;
}
properties.put("background_color", new Color(r, g, b));
}
}