C# “保存”不会将图像数据保存到文件中
我有一个Windows窗体应用程序,可以从和网站获取jpeg图像,并将其显示在图像控件中。但是,当我尝试使用image.save函数将图像保存到文件系统时,它会创建文件,但将其保留为空。不知道我做错了什么 在下面的示例中,DownloadData()成功检索包含图像的字节数组C# “保存”不会将图像数据保存到文件中,c#,image,image-processing,gdi+,system.drawing,C#,Image,Image Processing,Gdi+,System.drawing,我有一个Windows窗体应用程序,可以从和网站获取jpeg图像,并将其显示在图像控件中。但是,当我尝试使用image.save函数将图像保存到文件系统时,它会创建文件,但将其保留为空。不知道我做错了什么 在下面的示例中,DownloadData()成功检索包含图像的字节数组 byte[] imageData = DownloadData(); MemoryStream stream = new MemoryStream(imageData); Image img = Image.FromSt
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对象执行Save,则会得到相同的结果
实际上,应用程序在执行最后一行时终止,显然没有抛出异常。我尝试了你的代码,它抛出了一个
外部异常
,表示在GDI+中发生了一个一般错误,没有任何内部异常
,也创建了一个空文件。省略这一行使图像在表单上显示得很好。更改.NET版本似乎没有任何影响
虽然我不确定为什么会发生这种情况,但是您可以通过使用
System.IO.File.WriteAllBytes(fname, imageData);
而不是
picMain.Image.Save(fname, System.Drawing.Imaging.ImageFormat.Jpeg);
因为
Image.Save
在保存之前必须首先处理图像格式,而且您已经有了字节数组。您的问题是,使用FromStream
实例化的图像
要求流在图像
的生命周期内保持打开状态。去掉stream.Close()
,它应该就可以了。有关详细信息,请参阅。如果省略文件保存代码,则图片是否通过picMain.Image=img代码>?是的,它至少能正确地做到这一点。很好的答案,与@SimonMcKenzie给出的答案一样好!我看你是立陶宛人!美好的我已故妻子的父母都出生在克莱佩达,很久以前它还是德国的一部分!当然,他们称之为Memel,但没关系。回答不错,Simon!工作起来很有魅力!