当前位置:  开发笔记 > 编程语言 > 正文

使用Image.FromStream返回图像

如何解决《使用Image.FromStream返回图像》经验,为你挑选了1个好方法。

我知道也有类似的帖子,但是我的问题没有任何答案,因此发布了此帖子。

我有一个从图像路径检索并返回图像的方法。以下是我使用的代码段。在某些情况下,这会失败,因为返回后图像会丢失。

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); 

有人可以建议我解决此问题的最佳方法。

提前致谢!!



1> Justin Steel..:

这就是为什么它对您不起作用的原因(来自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。

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有