【问题标题】:How show image(s) from Stream(Responce) in a PictureBox - Specific URL如何在 PictureBox 中显示来自 Stream(Response) 的图像 - 特定 URL
【发布时间】:2014-05-20 16:40:14
【问题描述】:

这是我的代码:

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.flowercity.com/");
    req.Method = "GET";
    req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    req.ContentType = "text/html; charset=utf-8";
    req.Timeout = 25000;

    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

    Stream Stream = res.GetResponseStream();
    StreamReader reader = new StreamReader(Stream);
    string reader_str = reader.ReadToEnd();

如何在 Stream 中抓取加载的图像并在 PictureBox 中一张一张显示它们?

编辑 1:
请查看我的网址,它不是图片,它是一个网站,我们在 Stream 中有一个网站。
所以下面的代码不起作用:

    Image img = Image.FromStream(Stream);
    PictureBox1.Image = img;

编辑 2:
我不能使用HtmlAgilityPack 获取图像urls
每张图片都没有特定的网址,需要显示流中先前加载的图片

【问题讨论】:

  • 该页面只是 HTML。您需要使用 HtmlAgilityPack 之类的东西来梳理 HTML 以查找图像。
  • 图片的网址是这样的:web site/124124124.blablabla 所以在每次加载时我都会得到不同的图片,我想要从 req.GetResponse() 加载的第一个图片;
  • 我的问题是那些第一次加载的图像在哪里,我该如何抓取它们?

标签: c# stream picturebox httpwebresponse


【解决方案1】:

正如 vcsjones 评论中所述,您的流是网站索引页面的流。其中包含图像标签。就像您导航到相关网站时浏览器为您所做的一样,您需要单独下载图片。

最可靠的方法可能是使用正则表达式在网页(您在示例代码中加载的网页)搜索这些链接。您显然可以尝试将页面加载为 XML 文档,但 XML 解析器对有效性非常严格。不幸的是,大多数网页作者并没有那么“松散”地在网页上搜索您的链接可能效果最好。

如果您提供直接图片链接,您的代码应该可以工作。您现在面临的挑战是从您正在加载的页面中获取这些直接链接。

编辑

您的网页如下所示:

<html>
<title>welcome to the flower page</title>
<img src="flower.jpg"/>
</html>

(为简单起见缩短)

您需要通读所获得的文本以找到图像在网络服务器上的存储位置,然后打开单独的 http 连接以下载每个图像。

【讨论】:

  • 嗨,Markus,请看我的评论。
  • 我想你误解了网页的工作原理,MoonLight。您打开的流中的数据仅包含网页的文本和图片的链接,而不是图片本身。
  • 看看我的回答中的编辑,评论大小无法正确解释。
猜你喜欢
  • 1970-01-01
  • 2021-06-26
  • 2015-06-29
  • 2020-06-25
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
相关资源
最近更新 更多