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