iTextSharp.text.pdf.codec.BmpImage.Read1632Bit C# (CSharp) Method

Read1632Bit() private method

private Read1632Bit ( bool is32 ) : Image
is32 bool
return Image
        private Image Read1632Bit(bool is32)
        {
            int red_mask = FindMask(redMask);
            int red_shift = FindShift(redMask);
            int red_factor = red_mask + 1;
            int green_mask = FindMask(greenMask);
            int green_shift = FindShift(greenMask);
            int green_factor = green_mask + 1;
            int blue_mask = FindMask(blueMask);
            int blue_shift = FindShift(blueMask);
            int blue_factor = blue_mask + 1;
            byte[] bdata = new byte[width * height * 3];
            // Padding bytes at the end of each scanline
            int padding = 0;

            if (!is32) {
            // width * bitsPerPixel should be divisible by 32
                int bitsPerScanline = width * 16;
                if ( bitsPerScanline%32 != 0) {
                    padding = (bitsPerScanline/32 + 1)*32 - bitsPerScanline;
                    padding = (int)Math.Ceiling(padding/8.0);
                }
            }

            int imSize = (int)imageSize;
            if (imSize == 0) {
                imSize = (int)(bitmapFileSize - bitmapOffset);
            }

            int l=0;
            int v;
            if (isBottomUp) {
                for (int i=height - 1; i >= 0; --i) {
                    l = width * 3 * i;
                    for (int j=0; j<width; j++) {
                        if (is32)
                            v = (int)ReadDWord(inputStream);
                        else
                            v = ReadWord(inputStream);
                        bdata[l++] = (byte)((Util.USR(v, red_shift) & red_mask) * 256 / red_factor);
                        bdata[l++] = (byte)((Util.USR(v, green_shift) & green_mask) * 256 / green_factor);
                        bdata[l++] = (byte)((Util.USR(v, blue_shift) & blue_mask) * 256 / blue_factor);
                    }
                    for (int m=0; m<padding; m++) {
                        inputStream.ReadByte();
                    }
                }
            } else {
                for (int i=0; i<height; i++) {
                    for (int j=0; j<width; j++) {
                        if (is32)
                            v = (int)ReadDWord(inputStream);
                        else
                            v = ReadWord(inputStream);
                        bdata[l++] = (byte)((Util.USR(v, red_shift) & red_mask) * 256 / red_factor);
                        bdata[l++] = (byte)((Util.USR(v, green_shift) & green_mask) * 256 / green_factor);
                        bdata[l++] = (byte)((Util.USR(v, blue_shift) & blue_mask) * 256 / blue_factor);
                    }
                    for (int m=0; m<padding; m++) {
                        inputStream.ReadByte();
                    }
                }
            }
            return new ImgRaw(width, height, 3, 8, bdata);
        }