在ASP.NET中動態產生圖形(轉)
最後更新:2017-02-28
來源:互聯網
上載者:User
asp.net|動態|圖形 在ASP.NET中動態產生圖形
.NET有一個很靈巧的特性,就是可以編寫代碼產生動態圖形,然後將產生的圖形儲存在磁碟上或者直接將其發送到用戶端的瀏覽器。
原理
用.NET產生圖形的功能封裝在System.Drawing名稱空間中,它支援多種圖形檔案格式,包括:JPEG、GIF、PNG、TIFF、BMP、PhotoCD、FlashPIX、WMF、EMF和EXIF。
建立這些圖形的通用機制是構造一個BitMap(位元影像)對象,它為要建立的圖形提供了記憶體空間。然後,就可以調用它的“Save”方法,將其儲存在磁碟,或者將其發送到任何.NET的輸出資料流中。ASP.NET通過Response.OutputStream屬性揭示.NET輸出資料流,這意味著你可以直接將圖形的內容發送到瀏覽器,而不用將其儲存到磁碟中。
例如,在VB中,可以編寫這樣的代碼:
' Create In-Memory BitMap of JPEG
Dim MyChartEngine as New ChartEngine
Dim StockBitMap as BitMap = MyChartEngine.DrawChart(600, 400, myChartData)
' Render BitMap Stream Back To Browser
StockBitMap.Save(Response.OutputStream, ImageFormat.JPEG)
如果用的是一個ASPX頁面實現這個目的,就要同時設定適當的HTTP ContentType(內容類型)標頭檔,這樣瀏覽器就不會將頁面內容解釋為html,而是解釋為一個圖形。可以通過代碼設定Response.ContentType屬性,或者是在頂層頁面指令上設定新的“ContentType”屬性來實現這一點:
<%@ Page Language="VB" ContentType="image/jpeg" %>
注意:ASP.NET的輸出緩衝功能對常值內容和二進位輸出都奏效。這樣,如果你正在從一個頁面動態產生圖形,就可以很容易地使用輸出緩衝指令,從而避免在各個請求上都重建圖形。要注意圖形的產生有可能是很麻煩的,因此我強烈推薦你使用這一功能。比如,可以用下面的指令每隔60秒對產生的圖形進行輸出緩衝:
<%@ Page Language="VB" ContentType="image/jpeg" %>
<%@ OutputCache Duration="60" %>
產生股票圖形常式
為了給你提供一個產生圖形的完整舉例,在這裡包含了一個簡單的股票圖形產生樣本代碼。請注意其中股票的價格並不是真實的,只是我想象出來的。樣本代碼使用了一個定製的“ChartEngine”類,它可以將建立一個普通圖形所要求的邏輯封裝起來。你應該可以使用這個組件來製作任何定製圖形,它並不是只局限於股票資料的。
在樣本代碼中,隨便你想要使用哪些都可以,想要怎樣使用都可以,也可以隨便將其貼在文章的任何地方,以及其它樣本中。
要想運行這個樣本,將以下內容分別儲存為檔案放到IIS的一個應用程式Vroot下:請看源碼。
然後,在命令列中鍵入以下語句:
mkdir bin
csc /t:library /out:bin\chartgen.dll ChartEngine.cs /r:System.Web.dll /r:System.Winforms.dll /r:System.Drawing.dll /r:System.dll
chartengine被編譯後,點擊StockPicker.aspx頁面運行這個樣本。這樣,也就設定了一個指向ImageGenerator_VB.aspx 頁面的<img>標記,就是它來進行實際的圖形產生工作。