将32位位图转换为8位(彩色和灰度)

时间:2017-05-10 11:30:46

标签: c# .net system.drawing

我有一个PixelFormat Format32bppRgb的System.Drawing.Bitmap。 我希望将此图像转换为8位的位图。

以下是将32位图像转换为8位灰度图像的代码:

        public static Bitmap ToGrayscale(Bitmap bmp)
        {
            int rgb;
            System.Drawing.Color c;

            for (int y = 0; y < bmp.Height; y++)
                for (int x = 0; x < bmp.Width; x++)
                {
                    c = bmp.GetPixel(x, y);
                    rgb = (int)((c.R + c.G + c.B) / 3);
                    bmp.SetPixel(x, y, System.Drawing.Color.FromArgb(rgb, rgb, rgb));
                }
            return bmp;
        }

但是,我最终得到的Bitmap仍然具有Format32bppRgb的PixelFormat属性。

另外,

  • 如何将32位彩色图像转换为8位彩色图像?

感谢您的任何意见!

相关。
  - Convert RGB image to RGB 16-bit and 8-bit
  - C# - How to convert an Image into an 8-bit color Image?
  - C# Convert Bitmap to indexed colour format
  - Color Image Quantization in .NET
  - quantization (Reduction of colors of image)
  - The best way to reduce quantity of colors in bitmap palette

1 个答案:

答案 0 :(得分:3)

您必须创建(并返回)新的Bitmap实例。

PixelFormat在Bitmap的构造函数中指定,无法更改。

修改 示例代码基于this answer on MSDN

/bin/ls