這裡是從Dataset裡的數據生成曲線圖
我的Dataset是從表Sendrec裡讀取的數據分別有IdSendid(訂單號)Sendtime(記錄時間)Sendnum(單位時間發送量/我這裡是五分鐘)幾個字段
過程如下:
public void draw(Page pageDataSet dsint Tnum){}
其中page是用來傳遞引用這個過程的頁面這樣讓頁面是JPG方式直接向客戶端輸出生成的曲線圖
ds就是取出來的數據集了
Tnum只是我這裡要用到的一個參數不想讓這個類去接觸讀取過程所以把訂單的總量直接取出後傳遞給它的
using System;
using SystemData;
using SystemConfiguration;
using SystemWeb;
using SystemWebSecurity;
using SystemWebUI;
using SystemWebUIWebControls;
using SystemWebUIHtmlControls;
using SystemDrawingDrawingD;
using SystemDrawingImaging;
using SystemDrawing;
using SystemIO;
public class imgdraw
{
public imgdraw()
{
}
public void draw(Page pageDataSet dsint Tnum)
{
//取得記錄數量
int count = dsTables[]RowsCount;
//記算圖表寬度
int wd = + * (count );
//設置最小寬度為
if (wd < ) wd = ;
//生成Bitmap對像
Bitmap img=new Bitmap(wd);
//生成繪圖對像
Graphics g = GraphicsFromImage(img);
//定義黑色畫筆
Pen Bp = new Pen(ColorBlack);
//定義紅色畫筆
Pen Rp = new Pen(ColorRed);
//定義銀灰色畫筆
Pen Sp = new Pen(ColorSilver);
//定義大標題字體
Font Bfont = new Font(Arial FontStyleBold);
//定義一般字體
Font font = new Font(Arial );
//定義大點的字體
Font Tfont = new Font(Arial );
//繪制底色
gDrawRectangle(new Pen(ColorWhite ) imgWidth imgHeight);
//定義黑色過渡型筆刷
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle( imgWidth imgHeight) ColorBlack ColorBlack F true);
//定義藍色過渡型筆刷
LinearGradientBrush Bluebrush = new LinearGradientBrush(new Rectangle( imgWidth imgHeight) ColorBlue ColorBlue F true);
//繪制大標題
gDrawString(dsTables[]Rows[][sendid]ToString() + 號訂單發送情況曲線圖 Bfont brush );
//取得當前發送量
int nums=;
for (int i = ; i < count; i++)
{
nums+=ConvertToInt(dsTables[]Rows[i][sendnum]);
}
//繪制信息簡報
string info=訂單發送時間+dsTables[]Rows[][sendtime]ToString()+ 曲線圖生成時間+DateTimeNowToString()+ 訂單總量+TnumToString()+ 當前發送總量+numsToString();
gDrawString(info Tfont Bluebrush );
//繪制圖片邊框
gDrawRectangle(Bp imgWidth imgHeight );
//繪制豎坐標線
for (int i = ; i < count; i++)
{
gDrawLine(Sp + * i + * i );
}
//繪制時間軸坐標標簽
for (int i = ; i < count; i+=)
{
string st = ConvertToDateTime(dsTables[]Rows[i][sendtime])ToString(hh:mm);
gDrawString(st font brush + * i );
}
//繪制橫坐標線
for (int i = ; i < ; i++)
{
gDrawLine(Sp +*i +*(count) +*i);
int s = * i * ;
//繪制發送量軸坐標標簽
gDrawString(sToString() font brush + * i);
}
//繪制豎坐標軸
gDrawLine(Bp );
//繪制橫坐標軸
gDrawLine(Bp + * (count ) );
//定義曲線轉折點
Point[] p = new Point[count];
for (int i = ; i < count; i++)
{
p[i]X = + * i;
p[i]Y = ConvertToInt(dsTables[]Rows[i][sendnum]) / */;
}
//繪制發送曲線
gDrawLines(Rp p);
for (int i = ; i < count; i++)
{
//繪制發送記錄點的發送量
gDrawString(dsTables[]Rows[i][sendnum]ToString() font Bluebrush p[i]X p[i]Y );
//繪制發送記錄點
gDrawRectangle(Rp p[i]X p[i]Y );
}
//繪制豎坐標標題
gDrawString(發送量 Tfont brush );
//繪制橫坐標標題
gDrawString(發送時間 Tfont brush );
//保存繪制的圖片
MemoryStream stream = new MemoryStream();
imgSave(stream ImageFormatJpeg);
//圖片輸出
pageResponseClear();
pageResponseContentType = image/jpeg;
pageResponseBinaryWrite(streamToArray());
}
}
嘿嘿!發表這個就是一個圖片的繪制方法的記錄了這裡面還有很多不當之久望指教
From:http://tw.wingwit.com/Article/program/net/201311/13134.html