【发布时间】:2016-07-24 13:35:55
【问题描述】:
我遇到了一个我无法解决的问题,所以我决定问问你们。
我有非常简单的代码:
public void OpenSaveImageDialog(Bitmap bitmapImage)
{
var dlg = new SaveFileDialog
{
DefaultExt = DialogType.Image.defaultExt,
Filter = DialogType.Image.filter
};
dlg.ShowDialog();
bitmapImage.Save(dlg.FileName);
}
函数参数是一个像素格式等于 24bppRgb 的位图。在保存操作期间,保留 pixelFormat 和位深度对我来说非常重要。但是在我保存文件并检查其属性后,它被保存为 32 位深度图像。这是为什么?如何解决这个问题?
谢谢。
【问题讨论】:
-
设置 ImageFormat 以在 24 位或 32 位格式之间进行选择:msdn.microsoft.com/en-us/library/9t4syfhh(v=vs.110).aspx
-
您将图像保存为 PNG 文件格式。是的,PNG 编解码器始终使用 32bpp。使用可让您指定 ImageFormat 的 Save() 方法重载,您可能更喜欢 Bmp。确保文件扩展名匹配,水晶球说现在不匹配。
-
谢谢,但它不起作用。我之前尝试过将保存替换为: bitmapImage.Save(dlg.FileName, ImageFormat.Bmp);但它不起作用。它也保存为 bmp,并且不保持像素格式。
-
那么您创建的 Bitmap 对象是错误的,并且您认为它是 24bpp 的假设是不正确的。当您不使用指定 PixelFormat 的 Bitmap 构造函数重载时,您获得的默认值与您的视频适配器匹配。在任何现代机器上总是 32bpp。
-
哦,我真的认为我的假设是正确的。让我这样说:i.imgur.com/GGVrDNN.png 如您所见。我用 24bpp 的位图打开我的保存对话框,用保存方法保存它(添加 ImageFormat.Bmp 没有区别),然后我用我的代码打开它,PixelFormat 已经改变。还在 Windows 资源管理器中检查过。