2012-02-23 34 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,你無法將圖像推入管道

相關問題