我知道也有类似的帖子,但是我的问题没有任何答案,因此发布了此帖子。
我有一个从图像路径检索并返回图像的方法。以下是我使用的代码段。在某些情况下,这会失败,因为返回后图像会丢失。
public static Image GetImageFromPicPath(string strUrl) { WebResponse wrFileResponse; wrFileResponse = WebRequest.Create(strUrl).GetResponse(); using (Stream objWebStream = wrFileResponse.GetResponseStream()) { return Image.FromStream(objWebStream); } }
如果我使用Bitmap类并返回图像,则元数据会丢失。
如果我使用MemoryStream(如下所示)并且不处置MemoryStream,那么它将起作用。但是这里可能存在内存泄漏。如果使用using块,图像将丢失。
MemoryStream ms = new MemoryStream(); objWebStream.CopyTo(ms, 8192); return System.Drawing.Image.FromStream(ms);
有人可以建议我解决此问题的最佳方法。
提前致谢!!
这就是为什么它对您不起作用的原因(来自https://msdn.microsoft.com/zh-cn/library/93z9ee4x(v=vs.110).aspx):
这是一个涵盖了更多问题的帖子:从流中加载图像而不保持流打开
尝试这个:
public static Image GetImageFromPicPath(string strUrl) { using (WebResponse wrFileResponse = WebRequest.Create(strUrl).GetResponse()) using (Stream objWebStream = wrFileResponse.GetResponseStream()) { MemoryStream ms = new MemoryStream(); objWebStream.CopyTo(ms, 8192); return System.Drawing.Image.FromStream(ms); } }
在您使用的代码中执行以下操作:
using (var image = GetImageFromPicPath("http://imgur.com/123456.png")) { //use image }
通过在using语句中包装“ var image”,将在image上调用Dispose(),这也会同时Dispose()并释放Image正在使用的底层MemoryStream。