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