in src/main/java/org/apache/xmlgraphics/image/loader/impl/PNGFile.java [122:191]
public ImageRawPNG getImageRawPNG(ImageInfo info) throws ImageException {
InputStream seqStream = new SequenceInputStream(Collections.enumeration(streamVec));
ColorSpace rgbCS = null;
switch (colorType) {
case PNG_COLOR_GRAY:
if (hasPalette) {
throw new ImageException("Corrupt PNG: color palette is not allowed!");
}
colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), false, false,
ColorModel.OPAQUE, DataBuffer.TYPE_BYTE);
break;
case PNG_COLOR_RGB:
if (iccProfile != null) {
rgbCS = new ICC_ColorSpace(iccProfile);
} else if (sRGBRenderingIntent != -1) {
rgbCS = ColorSpace.getInstance(ColorSpace.CS_sRGB);
} else {
rgbCS = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB);
}
colorModel = new ComponentColorModel(rgbCS, false, false, ColorModel.OPAQUE, DataBuffer.TYPE_BYTE);
break;
case PNG_COLOR_PALETTE:
if (hasAlphaPalette) {
colorModel = new IndexColorModel(bitDepth, paletteEntries, redPalette, greenPalette,
bluePalette, alphaPalette);
} else {
colorModel = new IndexColorModel(bitDepth, paletteEntries, redPalette, greenPalette,
bluePalette);
}
break;
case PNG_COLOR_GRAY_ALPHA:
if (hasPalette) {
throw new ImageException("Corrupt PNG: color palette is not allowed!");
}
colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), true, false,
ColorModel.TRANSLUCENT, DataBuffer.TYPE_BYTE);
break;
case PNG_COLOR_RGB_ALPHA:
if (iccProfile != null) {
rgbCS = new ICC_ColorSpace(iccProfile);
} else if (sRGBRenderingIntent != -1) {
rgbCS = ColorSpace.getInstance(ColorSpace.CS_sRGB);
} else {
rgbCS = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB);
}
colorModel = new ComponentColorModel(rgbCS, true, false, ColorModel.TRANSLUCENT,
DataBuffer.TYPE_BYTE);
break;
default:
throw new ImageException("Unsupported color type: " + colorType);
}
// the iccProfile is still null for now
ImageRawPNG rawImage = new ImageRawPNG(info, seqStream, colorModel, bitDepth, iccProfile);
if (isTransparent) {
if (colorType == PNG_COLOR_GRAY) {
rawImage.setGrayTransparentAlpha(grayTransparentAlpha);
} else if (colorType == PNG_COLOR_RGB) {
rawImage.setRGBTransparentAlpha(redTransparentAlpha, greenTransparentAlpha,
blueTransparentAlpha);
} else if (colorType == PNG_COLOR_PALETTE) {
rawImage.setTransparent();
} else {
//
}
}
if (sRGBRenderingIntent != -1) {
rawImage.setRenderingIntent(sRGBRenderingIntent);
}
return rawImage;
}