我已經創建了一個自定義服務器控件,並嘗試使用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,你無法將圖像推入管道