.NET有一個(gè)很靈巧的特性,就是可以編寫代碼生成動(dòng)態(tài)圖形,然后將生成的圖形保存在磁盤上或者直接將其發(fā)送到客戶端的瀏覽器。
原理
用.NET生成圖形的功能封裝在System.Drawing名稱空間中,它支持多種圖形文件格式,包括:JPEG、GIF、PNG、TIFF、BMP、PhotoCD、FlashPIX、WMF、EMF和EXIF。
創(chuàng)建這些圖形的通用機(jī)制是構(gòu)造一個(gè)BitMap(位圖)對(duì)象,它為要?jiǎng)?chuàng)建的圖形提供了內(nèi)存空間。然后,就可以調(diào)用它的“Save”方法,將其保存在磁盤,或者將其發(fā)送到任何.NET的輸出流中。ASP.NET通過Response.OutputStream屬性揭示.NET輸出流,這意味著你可以直接將圖形的內(nèi)容發(fā)送到瀏覽器,而不用將其保存到磁盤中。
例如,在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)
如果用的是一個(gè)ASPX頁(yè)面實(shí)現(xiàn)這個(gè)目的,就要同時(shí)設(shè)置適當(dāng)?shù)腍TTP ContentType(內(nèi)容類型)頭文件,這樣瀏覽器就不會(huì)將頁(yè)面內(nèi)容解釋為html,而是解釋為一個(gè)圖形。可以通過代碼設(shè)置Response.ContentType屬性,或者是在頂層頁(yè)面指令上設(shè)置新的“ContentType”屬性來實(shí)現(xiàn)這一點(diǎn):
<%@ Page Language="VB" ContentType="image/jpeg" %>
注意:ASP.NET的輸出緩存功能對(duì)文本內(nèi)容和二進(jìn)制輸出都奏效。這樣,如果你正在從一個(gè)頁(yè)面動(dòng)態(tài)生成圖形,就可以很容易地使用輸出緩存指令,從而避免在各個(gè)請(qǐng)求上都重新生成圖形。要注意圖形的生成有可能是很麻煩的,因此我強(qiáng)烈推薦你使用這一功能。比如,可以用下面的指令每隔60秒對(duì)生成的圖形進(jìn)行輸出緩存:
<%@ Page Language="VB" ContentType="image/jpeg" %> <%@ OutputCache Duration="60" %>
生成股票圖形例程
為了給你提供一個(gè)生成圖形的完整舉例,在這里包含了一個(gè)簡(jiǎn)單的股票圖形生成樣本代碼。請(qǐng)注意其中股票的價(jià)格并不是真實(shí)的,只是我想象出來的。樣本代碼使用了一個(gè)定制的“ChartEngine”類,它可以將建立一個(gè)普通圖形所要求的邏輯封裝起來。你應(yīng)該可以使用這個(gè)組件來制作任何定制圖形,它并不是只局限于股票數(shù)據(jù)的。
在樣本代碼中,隨便你想要使用哪些都可以,想要怎樣使用都可以,也可以隨便將其貼在文章的任何地方,以及其它樣本中。
要想運(yùn)行這個(gè)樣本,將以下內(nèi)容分別保存為文件放到IIS的一個(gè)應(yīng)用程序Vroot下:請(qǐng)看源碼。 然后,在命令行中鍵入以下語句:
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被編譯后,點(diǎn)擊StockPicker.aspx頁(yè)面運(yùn)行這個(gè)樣本。這樣,也就設(shè)置了一個(gè)指向ImageGenerator_VB.aspx 頁(yè)面的<img>標(biāo)記,就是它來進(jìn)行實(shí)際的圖形生成工作。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!