本文示例小工程將向你展示如何使用Response對象在ASP.NET 2.0 Web頁面中輸出直接存儲在SQL Server 2005數據庫中的圖像數據。直接在Web頁面上繪制並輸出圖像數據和事件設計。
一、簡介
作為ASP.NET基本對象之一的Response對象不但可以通過Write()方法直接在頁面上輸出字符串數據,而且還可以使用BinaryWrite()方法直接顯示二進制表示的數據,如圖像、圖片等。
本文示例小工程將向你展示如何使用Response對象在ASP.NET 2.0 Web頁面中輸出直接存儲在SQL Server 2005數據庫中的圖像數據。
【注意】在本例中,我們沒有討論僅在SQL Server 2005表格中存儲圖像的URL的情形。因為這種情形是實際開發中被廣為采用的方法,所以,讀者不難在Web上搜到相應的使用案例。
首先,讓我們來分析一個簡單的直接在Web頁面上繪制並輸出圖像數據的例子。
二、直接在Web頁面上繪制並輸出圖像數據
下面的代碼示例在請求頁面時將繪制三個部分重疊的矩形。該代碼首先將ContentType屬性設置為image/jpeg,以便將整個頁面呈現為一幅JPEG圖像。第二步,該代碼調用Clear方法以確保不會將無關的內容(包括標頭)與此響應一同發送。第三步,該代碼將BufferOutput屬性設置為true,從而使該頁面在完全處理之後再發送到發出請求的客戶端。第四步,創建兩個用於繪制矩形的對象,即Bitmap和Graphics對象。在該頁中創建的變量將作為繪制矩形的坐標和在最大的矩形中顯示的字符串。
在繪制三個矩形和其中顯示的字符串時,將Bitmap保存到與OutputStream屬性相關聯的Stream對象中,並將其格式設置為JPEG。接下來,該代碼調用Dispose和Dispose方法來釋放資源—這些資源為兩個繪制對象所使用。最後,該代碼調用Flush方法將緩沖的響應發送到請求客戶端。
完整的實現代碼如下所示:
<%@ Page Language="C#" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<%@ import Namespace="System.Drawing.Drawing2D" %>
<script runat="server">
private void Page_Load(object sender, EventArgs e)
...{
//設置頁面的content type為JPEG文件
//並且清除所有的響應頭部信息
Response.ContentType = "image/jpeg";
Response.Clear();
//對響應作出緩沖以便處理完成後發送頁面
Response.BufferOutput = true;
//創建一字體風格
Font rectangleFont = new Font(
"Arial", 10, FontStyle.Bold);
//創建整數變量
int height = 100;
int width = 200;
//創建一個隨機數字生成器並且基於它創建
//變量值
Random r = new Random();
int x = r.Next(75);
int a = r.Next(155);
int x1 = r.Next(100);
//創建一張位圖並且使用它創建一個
//Graphics對象
Bitmap bmp = new Bitmap(
width, height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(Color.LightGray);
//使用這個Graphics對象繪制3個矩形
g.DrawRectangle(Pens.White, 1, 1, width-3, height-3);
g.DrawRectangle(Pens.Aquamarine, 2, 2, width-3, height-3);
g.DrawRectangle(Pens.Black, 0, 0, width, height);
//使用這個Graphics對象輸出一個字符串
// on the rectangles.
g.DrawString(
"ASP.NET Samples", rectangleFont,
SystemBrushes.WindowText, new PointF(10, 40));
//在其中兩個矩形上添加顏色
g.FillRectangle(
new SolidBrush(
Color.FromArgb(a, 255, 128, 255)),
x, 20, 100, 50);
g.FillRectangle(
new LinearGradientBrush(
new Point(x, 10),
new Point(x1 + 75, 50 + 30),
Color.FromArgb(128, 0, 0, 128),
Color.FromArgb(255, 255, 255, 240)),
x1, 50, 75, 30);
//把位圖保存到響應流中並且把它轉換成JPEG格式
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
//釋放掉Graphics對象和位圖所使用的內存空間
g.Dispose();
bmp.Dispose();
//把輸出結果發送到客戶端
Response.Flush();
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
</form>
</body>
</html>
接下來,讓我們討論本文重點—如何在ASP頁面中輸出直接存儲在數據庫中的圖像數據。