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

时间:2012-06-18 10:17:20

标签: c# asp.net image-processing

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

4 个答案:

答案 0 :(得分:0)

您可以调用Image.Save方法。

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

答案 1 :(得分:0)

您需要正确返回内容类型和Stream,请参阅 这link for refference

答案 2 :(得分:0)

这里我假设您将字典对象绑定到转发器,而HttpHandler名称是imageHandler。因此,一旦字典对象被绑定,您将获得类似

的内容

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

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

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

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

希望这有帮助。

答案 3 :(得分:0)

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

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

您可能还想查看this blog post by Scott Hanselman,在那里他谈到<asp:image/>

的扩展名