自定义服务器控件嵌入图像

时间:2012-02-23 09:49:57

标签: c# asp.net webforms

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

我没有静态图像,图像是动态创建的。感谢。

3 个答案:

答案 0 :(得分:1)

这里有两个选择:

  1. 根据次要请求提供图片
  2. 将图像编码到页面中
  3. 第一个选项是最常用的方法,如果您的图片大小超过几千字节,强烈建议使用。您将实现一个回流生成的图像的HttpHandler。在您的页面中,将页面中的ImageUrl设置为指向您的处理程序的网址。您可以在图像URL中包含数据,以指示处理程序如何呈现图像或使用哪些数据。

    您应该意识到,任何人都可以调用此处理程序,因此如果您的图像包含敏感信息或个人信息,请确保检查请求是否已获得授权。

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

答案 1 :(得分:0)

我认为这不可能来自图像控制。你可以做的是实现一个自定义的ashx处理程序,它可以动态生成图像并将其写入响应流。 然后你可以按照

的方式做点什么
Image.ImageUrl="~/ImageHandler.ashx?name=myimage"

修改:请参阅以下How to bind a MemoryStream to asp:image control?

答案 2 :(得分:0)

我认为您最好的选择是将图片构建操作设置为Embedded Resource并使用ClientScript.RegisterClientScriptResource将图片注册到页面中

您需要使用WebResource属性通知程序集资源存在:

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

通过嵌入资源,您还可以将图像内容作为流读取:

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

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