2012-02-23 44 views
0

我已经创建了一个自定义服务器控件,并尝试使用System.Web.UI.WebControls.Image添加图像。我想从内存流或位图中使用图像。我怎么能做到这一点,似乎WebControls.Image需要ImageURL。自定义服务器控件嵌入图像

我没有静态图像,图像即时创建。谢谢。

回答

1

这里有两种选择:

  1. 在二次请求
  2. 编码图像即成图像进入页面

第一个选项是最常用的方法,如果您的映像的大小超过几千字节,则强烈建议使用该选项。你会实现一个HttpHandler来生成图像。在您的页面中,将页面中的ImageUrl设置为指向您的处理程序的网址。您可以在图像url中包含数据,以指示处理程序如何呈现图像或使用哪些数据。

你应该认识到,任何人都可以调用这个处理程序,所以如果你的图像包含敏感或个人信息,请确保你检查请求是否被授权。

第二种选择是将图像作为base64数据直接编码到您的页面中。由于base64编码会使数据大小增加137%,因此它仅适用于小图像。你也不会从标准的服务器控件中得到任何支持,所以我必须从头开始实现这一点。

0

我不认为这是可能的图像控制。你可以做的是实现一个定制的ashx处理程序,它可以即时生成图像并将其写入响应流。 然后,你可以沿着线做一些

Image.ImageUrl="~/ImageHandler.ashx?name=myimage" 

编辑:请参见以下How to bind a MemoryStream to asp:image control?

0

我认为最好的办法是将图像生成操作设置为Embedded Resource和使用ClientScript.RegisterClientScriptResource将图像注册到页面

您需要通知该资源使用WebResource属性存在装配:

[assembly:WebResource("namespace.images.file.jpg", "image/jpg")] 

通过嵌入的资源,你还必须阅读图像内容作为流的机会:

typeof(yourClass).Assembly.GetManifestResourceStream("namespace.images.file.jpg"); 

但是如果不使用上面提到的HttpHandler,你无法将图像推入管道

相关问题