[英]Returning Image using Image.FromStream
我知道有类似的帖子,但我没有得到任何答案我的问题,因此张贴这个。
我有一个方法,从图像路径中检索并返回图像。 以下是我使用的代码段。 在某些情况下,由于图像在返回后丢失,因此失败。
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它可以工作。 但这里可能存在内存泄漏。 如果我使用块,图像将丢失。
MemoryStream ms = new MemoryStream();
objWebStream.CopyTo(ms, 8192);
return System.Drawing.Image.FromStream(ms);
有人可以建议我解决这个问题的最佳方法。
提前致谢!!
这就是为什么它不适合你(来自https://msdn.microsoft.com/en-us/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
}
通过在“使用”语句中包装“var image”,将在图像上调用Dispose(),这也将Dispose()并释放Image使用的底层MemoryStream。
使用MemoryStream
并且不要显式关闭它。 Bitmap
将在其Dispose
方法中关闭它。 没有内存泄漏,只要你记得在完成后使用Dispose()
Bitmap
。 (即使你没有, MemoryStream
最终会收集垃圾,只要你在某个时候放开Bitmap
并且Bitmap
是唯一持有它的引用。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.