Image控件顯示以byte[]字節數組形式存在的圖片


工作中遇到了這樣的一個問題。起初覺得很簡單,獲得了圖片的byte[]后,可以將其轉換成內存中的圖片對象(如System.Drawing.Image),而后賦給頁面的Image控件。嘗試后才發現這樣根本做不到。搜索網絡,整理出兩種實現的方法。

 

示例代碼在此!

 

一、引入一新頁面.aspx,Image控件URL指向該頁面

該頁面ImageSource.aspx只完成一件事:將代表圖片的byte[]寫入http輸出流。

1 Response.BinaryWrite(imgBytes);

該頁面的執行效果即只顯示圖片本身。

 

使Image控件的ImageUrl屬性指向該頁面。

1 imgPicture.ImageUrl = string.Concat("ImageSource.aspx?name=", "Lighthouse");

 

功能實現。該種方式比較簡單,但是弊端就是引入了一個貌似多余的頁面ImageSource.aspx。為避免這一點,便有了第二種方法。

 

二、引入HttpHandler,專門處理圖片加載的請求

Image控件依然通過ImageUrl屬性指向一頁面url,但該頁面並不真實存在。該請求交由Handler處理。

1 <httpHandlers>
2     <add verb="*" path="ImageVirtualSource.aspx" type="ImageBytesShowSample.ImageVirtualSourceHandler"/>
3 </httpHandlers>

ImageVirtualSourceHandler中完成的工作基本與先前ImageSource.aspx中無異,主要就是將圖片byte[]輸出到http流。

1 public void ProcessRequest(HttpContext context)
2 {
3     var imgName = context.Request.QueryString["name"];
4     var lightImg = Image.FromFile(string.Concat("E:\\CSPro\\ImageBytesShowSample\\ImageBytesShowSample\\", imgName, ".jpg"));
5 
6     Byte[] imgBytes = ImageToBytes(lightImg);
7 
8     context.Response.BinaryWrite(imgBytes);
9 }

 

特別注意:

若使用集成環境運行(VS調試運行),<system.web>下<httpHandlers>配置不被識別。請改為在IIS經典模式下運行或者將configuration移到<system.webServer>下。

1 <system.webServer>
2   <handlers>
3     <add name ="virtualImageHandler" verb="*" path="ImageVirtualSource.aspx" type="ImageBytesShowSample.ImageVirtualSourceHandler"/>
4   </handlers>
5 </system.webServer>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM