在C#问题中32位rgb bmp到24位rgb bmp

时间:2011-02-11 10:27:46

标签: c# imaging

我必须将32位rgb bmp图像转换为24位rgb bmp。

这就是我想要做的事情

Bitmap b1=new Bitmap(sorecFileName);

Bitmap b2=new 

Bitmap(b1.Size.Width,b1.Size.Height,System.Drawing.Imaging.PixelFormat.Format24bppRgb);       
b2.SetResolution(b1.HorizontalResolution, b1.VerticalResolution);

Graphics g=Graphics.FromImage(b2);

g.DrawImage(b1,0,0);

//continue to draw on g here to add text or graphics.

g.Dispose();

b2.Save(destinationFileName);

代码编译良好并生成24bpp的输出图像,但不再是rgb格式。为什么会这样?

我想通了,因为我有一个库,它将图像输入为rgb24并显示它。因此,当我尝试将上面代码生成的文件作为函数的输入时,它会显示噪声图像。

但是,如果我在绘画中打开相同的文件并将其保存为24bpp bmp,并将其输入到该功能,则图片显示正常。我错过了什么?

2 个答案:

答案 0 :(得分:2)

  b2.Save(destinationFileName);

您没有指定图像文件格式。默认值为PNG,而不是BMP。您现在可能在磁盘上有一个实际包含PNG图像的.bmp文件。很多图形程序都会注意文件头而不是文件扩展名。例如,MSPaint在加载文件时没有问题。就像使用GDI +的任何其他程序一样。对于一个程序盲目地假定该文件包含BMP并且根本不进行检查,您可能不会那么幸运。修正:

  b2.Save(destinationFilename, System.Drawing.Imaging.ImageFormat.Bmp);

答案 1 :(得分:0)

如果你有黑色图像 - 添加g.Clear(Color.White);