protected int getRGB()

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);
        }
    }