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