2012-06-18 35 views
0

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

回答

0

您可以拨打Image.Save方法。

using(MemoryStream ms = new MemoryStream()) 
{ 
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
    ms.WriteTo(context.Response.OutputStream); 
} 
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"

希望这有助于。

+0

但HttpHandler的没有那么传递给它的关键是无用的Dictionary对象的知识。 –

0

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

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

您可能还需要检查this blog post by Scott Hanselman,在那里他的延伸会谈<asp:image/>

相关问题