gpt4 book ai didi

c# - 使用 Image.FromStream 返回图像

转载 作者:行者123 更新时间:2023-11-30 19:38:11 25 4
gpt4 key购买 nike

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

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

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,它就可以工作。但是这里可能存在内存泄漏。如果我使用 block ,图像就会丢失。

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

Image.FromStream Method remarks: You must keep the stream open for the lifetime of the Image.

这是一篇更详细地讨论这个问题的帖子:Loading an image from a stream without keeping the stream open

试试这个:

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”,将在图像上调用 Dispose(),这也会 Dispose() 并释放图像使用的底层 MemoryStream。

关于c# - 使用 Image.FromStream 返回图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34640803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com