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

我必须将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,并将其输入到该function,则图片显示正常。 我错过了什么?

  b2.Save(destinationFileName); 

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

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

如果你有一个blackimage – 添加g.Clear(Color.White);