如何使用 HTTP 处理程序在网页上显示 System.Drawing.Image

本文关键字:显示 System Drawing Image 网页 何使用 HTTP 处理 程序 | 更新日期: 2023-09-27 18:37:28

我有一个返回字符串和System.Drawing.Image类型的字典的控件。我想遍历字典并输出一个 ASP 图像控件,该控件显示每个键值对中包含的图像。我知道这需要通过 HTTP 处理程序来完成,但不确定如何去做。假设图像需要转换为字节数组,然后作为处理程序的输出流返回,如何将图像或字节数组作为处理程序上下文的一部分传递?

如何使用 HTTP 处理程序在网页上显示 System.Drawing.Image

你可以调用 Image.Save 方法。

using(MemoryStream ms = new MemoryStream())
 {
   image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
   ms.WriteTo(context.Response.OutputStream);
 }

您需要正确返回内容类型和流,请参阅此链接供参考

在这里,我假设您将字典对象绑定到中继器,并且 HttpHandler 名称为 imageHandler。因此,一旦字典对象被绑定,您将获得类似

<ItemTemplate> <asp:Image id="image1" runat="server" ImageUrl='<%# "~/imageHandler.ashx?k=" + Eval("key")%>' /> </ItemTemplate>

在你的httphandler中,读取查询字符串,它将为您提供密钥,然后您可以从字典中获取system.drawing.image,之后您可以将其转换为字节数组并继续。

您可以进一步重构代码,以便将所有键值作为列表或可枚举对象获取并绑定它,然后在 httphandler 中查询数据库。

Response.Write(byte array) and response.contenttype= "give the correct content type"

希望这有帮助。

Web 中可用的大多数示例都将 id 传递给 ashx 处理程序;处理程序路径与 id 一起设置为图像控件的源。在大多数情况下,对于处理程序的每个请求都将访问数据库并获取图像,进行处理并呈现图像。

但是,在您的情况下,您似乎已经拥有图像字典(因此您需要一种方法将该信息传递给处理程序)。解决此问题的一种方法是将图像缓存为内存流,在 ashx 处理程序中,您可以访问 cahced 项,稍后清除缓存。这已经在这里讨论过了;但不是优雅的解决方案。

您可能还想查看斯科特·汉塞尔曼(Scott Hanselman)的这篇博文,他在文章中谈到了对<asp:image/>的扩展