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