Image.Save 不保存图像数据到文件
Image.Save does not save image data to file
我正在使用 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 对象执行保存,我会得到相同的结果。
事实上,应用程序在执行最后一行时终止,没有明显抛出异常。
我试过你的代码,它抛出一个 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
必须在保存之前首先处理图像格式,并且您已经有了字节数组。
您的问题是使用 FromStream
实例化的 Image
要求流在 Image
的生命周期内保持打开状态。摆脱 stream.Close()
应该没问题。有关详细信息,请参阅 msdn。
我正在使用 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 对象执行保存,我会得到相同的结果。
事实上,应用程序在执行最后一行时终止,没有明显抛出异常。
我试过你的代码,它抛出一个 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
必须在保存之前首先处理图像格式,并且您已经有了字节数组。
您的问题是使用 FromStream
实例化的 Image
要求流在 Image
的生命周期内保持打开状态。摆脱 stream.Close()
应该没问题。有关详细信息,请参阅 msdn。