我已经创建了一个自定义服务器控件,并尝试使用System.Web.UI.WebControls.Image添加图像。我想从内存流或位图中使用图像。我怎么能做到这一点,似乎WebControls.Image需要ImageURL。自定义服务器控件嵌入图像
我没有静态图像,图像即时创建。谢谢。
我已经创建了一个自定义服务器控件,并尝试使用System.Web.UI.WebControls.Image添加图像。我想从内存流或位图中使用图像。我怎么能做到这一点,似乎WebControls.Image需要ImageURL。自定义服务器控件嵌入图像
我没有静态图像,图像即时创建。谢谢。
这里有两种选择:
第一个选项是最常用的方法,如果您的映像的大小超过几千字节,则强烈建议使用该选项。你会实现一个HttpHandler来生成图像。在您的页面中,将页面中的ImageUrl
设置为指向您的处理程序的网址。您可以在图像url中包含数据,以指示处理程序如何呈现图像或使用哪些数据。
你应该认识到,任何人都可以调用这个处理程序,所以如果你的图像包含敏感或个人信息,请确保你检查请求是否被授权。
第二种选择是将图像作为base64数据直接编码到您的页面中。由于base64编码会使数据大小增加137%,因此它仅适用于小图像。你也不会从标准的服务器控件中得到任何支持,所以我必须从头开始实现这一点。
我不认为这是可能的图像控制。你可以做的是实现一个定制的ashx处理程序,它可以即时生成图像并将其写入响应流。 然后,你可以沿着线做一些
Image.ImageUrl="~/ImageHandler.ashx?name=myimage"
我认为最好的办法是将图像生成操作设置为Embedded Resource
和使用ClientScript.RegisterClientScriptResource
将图像注册到页面
您需要通知该资源使用WebResource属性存在装配:
[assembly:WebResource("namespace.images.file.jpg", "image/jpg")]
通过嵌入的资源,你还必须阅读图像内容作为流的机会:
typeof(yourClass).Assembly.GetManifestResourceStream("namespace.images.file.jpg");
但是如果不使用上面提到的HttpHandler,你无法将图像推入管道