0

我必须将 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 并显示它。因此,当我尝试将上述代码生成的文件作为函数的输入时,它会显示嘈杂的图像。

但是,如果我在paint中打开同一个文件并将其另存为24bpp bmp,然后将其输入到函数中,则图片显示正常。我错过了什么?

4

2 回答 2

2
  b2.Save(destinationFileName);

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

  b2.Save(destinationFilename, System.Drawing.Imaging.ImageFormat.Bmp);
于 2011-02-11T11:27:58.123 回答
0

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

于 2011-10-05T12:01:08.100 回答