将32bpp位图转换为16bpp(灰度)

时间:2014-06-20 19:47:28

标签: c# bitmap pixel

我正在使用Image对象在C#中创建一个Bitmap。

我得到的位图是32bpp,我怎样才能将其转换为16bpp?

Bitmap image_bmp;
System.Drawing.Image tmp = (System.Drawing.Image)img.RenderImage(0); //RenderImage creates an object of tyoe System.Drawing.Image
image_bmp = new Bitmap(tmp);

1 个答案:

答案 0 :(得分:1)

如果您在谷歌上运行快速搜索,您可以找到许多优秀的颜色到灰度公式。以下面的from wikipedia为例:

Y' =  0.2126 R' + 0.7152 G' + 0.0722 B'

考虑到这一点,.NET中的一般过程将是:

  • 使用16bpp灰度
  • 创建正确尺寸的新图像
  • 使用" LockBits"在原始图像和新图像上并在每个像素上循环
  • 解锁两个图像,然后将新图像保存到文件

我没有进一步深入这些步骤,而是从堆栈和网络上找到了一些其他问题,这些问题真正深入研究了细节。参见:

祝你好运!

注意 - 我假设您正在使用GDI +。 Windows Imaging Component(WIC)的步骤类似,但类和语法完全不同。