Image.Save 不会将图像数据保存到文件中

本文关键字:数据 存到文件 图像 Save Image | 更新日期: 2023-09-27 18:32:46

>我有一个有效的Windows窗体应用程序,它从和网站获取jpeg图像并将其显示在图像控件中。 但是,当我尝试使用 Image.Save 函数将图像保存到文件系统时,它会创建文件,但将其留空。 不知道我做错了什么...

在下文中,DownloadData() 成功检索到包含图像的字节数组。

byte[] imageData = DownloadData(); 
MemoryStream stream = new MemoryStream(imageData);
Image img = Image.FromStream(stream);
stream.Close();
picMain.Image = img;
string fname = @"C:'Users'mikec1'Pictures'Construction'Construction_" + Now.ToString("yyyyMMdd") + "_" + Now.ToString("HHmmss") + ".jpg";
picMain.Image.Save(fname, System.Drawing.Imaging.ImageFormat.Jpeg);

如果我从 img 对象执行保存,我会得到相同的结果。

事实上,应用程序在执行最后一行时终止,显然不会引发异常。

Image.Save 不会将图像数据保存到文件中

您的问题是使用 FromStream 实例化的Image要求流在Image的生命周期内保持打开状态。摆脱stream.Close(),应该没问题。有关详细信息,请参阅 msdn

我尝试了你的代码,它抛出了一个ExternalException,说A generic error occurred in GDI+,没有任何InnerException,也创建了一个空文件。省略该行可以使图像在表单上显示得很好。更改 .NET 版本似乎没有任何影响。

虽然我不确定为什么会发生这种情况,请参阅西蒙的答案,但您可以简单地通过使用

System.IO.File.WriteAllBytes(fname, imageData);

而不是

picMain.Image.Save(fname, System.Drawing.Imaging.ImageFormat.Jpeg);

它也应该使用更少的开销,因为Image.Save必须在保存之前先处理图像格式,并且您已经在那里拥有字节数组。