in src/main/java/org/apache/commons/imaging/formats/png/ScanExpediter.java [90:183]
protected int getRGB(BitParser bitParser, int pixelIndexInScanline)
throws ImageReadException, IOException
{
switch (colorType)
{
case 0: // 1,2,4,8,16 Each pixel is a grayscale sample.
{
int sample = bitParser.getSampleAsByte(pixelIndexInScanline, 0);
if (gammaCorrection != null)
{
sample = gammaCorrection.correctSample(sample);
}
int rgb = getPixelRGB(sample, sample, sample);
if (transparencyFilter != null)
rgb = transparencyFilter.filter(rgb, sample);
return rgb;
}
case 2: // 8,16 Each pixel is an R,G,B triple.
{
int red = bitParser.getSampleAsByte(pixelIndexInScanline, 0);
int green = bitParser.getSampleAsByte(pixelIndexInScanline, 1);
int blue = bitParser.getSampleAsByte(pixelIndexInScanline, 2);
int rgb = getPixelRGB(red, green, blue);
if (transparencyFilter != null)
rgb = transparencyFilter.filter(rgb, -1);
if (gammaCorrection != null)
{
int alpha = (0xff000000 & rgb) >> 24; // make sure to preserve
// transparency
red = gammaCorrection.correctSample(red);
green = gammaCorrection.correctSample(green);
blue = gammaCorrection.correctSample(blue);
rgb = getPixelARGB(alpha, red, green, blue);
}
return rgb;
}
//
case 3: // 1,2,4,8 Each pixel is a palette index;
// a PLTE chunk must appear.
{
int index = bitParser.getSample(pixelIndexInScanline, 0);
int rgb = pngChunkPLTE.getRGB(index);
if (transparencyFilter != null)
rgb = transparencyFilter.filter(rgb, index);
return rgb;
}
case 4: // 8,16 Each pixel is a grayscale sample,
// followed by an alpha sample.
{
int sample = bitParser.getSampleAsByte(pixelIndexInScanline, 0);
int alpha = bitParser.getSampleAsByte(pixelIndexInScanline, 1);
if (gammaCorrection != null)
sample = gammaCorrection.correctSample(sample);
int rgb = getPixelARGB(alpha, sample, sample, sample);
return rgb;
}
case 6: // 8,16 Each pixel is an R,G,B triple,
{
int red = bitParser.getSampleAsByte(pixelIndexInScanline, 0);
int green = bitParser.getSampleAsByte(pixelIndexInScanline, 1);
int blue = bitParser.getSampleAsByte(pixelIndexInScanline, 2);
int alpha = bitParser.getSampleAsByte(pixelIndexInScanline, 3);
if (gammaCorrection != null)
{
red = gammaCorrection.correctSample(red);
green = gammaCorrection.correctSample(green);
blue = gammaCorrection.correctSample(blue);
}
int rgb = getPixelARGB(alpha, red, green, blue);
return rgb;
}
default:
throw new ImageReadException("PNG: unknown color type: "
+ colorType);
}
}