分享
 
 
 

Asp.net中使用GDI+繪製圖形

王朝asp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

GDI+ ——下一代圖形設備接口

所有的圖形用戶界面(GUI)應用程序都與硬件設備(顯示器,打印機,掃描儀)進行交互,這可以表示為可讀的數據。不過應用程序並不直接和設備之間進行通信,否則必須為每台設備分別編寫 不同的用戶接口代碼。為了避免這種重復的工作,我們可以在應用程序和設備之間使用第三個組件,此組件將轉換和傳送發送到設備的數據,以及設備發送到程序的數據。而這個組件就是GDI+。GDI+是.NET Framework中與圖形設備進行交互的入口。GDI+是一組C++類,位于一個名為Gdiplus.dll的類庫中。Gdiplus.dll是Windows xp和Windows Server 2003操作系統中一個内置組件。好了,學術性的東西在這裡就不多廢唇舌了,下面我們用GDI+在Web Form中來畫一幅圖。

像類似這樣的圖想必大家都見過,當然這個圖並不標準,這裡把代碼貼出來有興趣的可以試一試!

namespace Sky_MsdnDataGrid

{

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Drawing.Imaging;

using System.Web;

using System.Web.sessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

/// <summary>

/// aspxChart 的摘要描述。

/// </summary>

public class AspxChart : System.Web.UI.Page

{

PRivate Bitmap bitmap;

private Graphics graphics;

private int[] arrValues;

private string[] arrValueNames;

private void Page_Load(object sender, System.EventArgs e)

{

arrValues = new int[6];

arrValueNames = new string[6];

arrValues[0] = 100;

arrValues[1] = 135;

arrValues[2] = 115;

arrValues[3] = 125;

arrValues[4] = 75;

arrValues[5] = 120;

arrValueNames[0] = "一月";

arrValueNames[1] = "二月";

arrValueNames[2] = "三月";

arrValueNames[3] = "四月";

arrValueNames[4] = "五月";

arrValueNames[5] = "六月";

this.Init_Bitmap();

this.Draw_Rectangle();

this.Draw_Pie();

// 將繪製的圖像以 Gif 的格式保存到當前頁面響應的輸出流中

bitmap.Save(this.Response.OutputStream,ImageFormat.Gif);

}

/// <summary>

/// 對即將要被繪製的位圖(可想象為一塊畫佈)進行初始動作

/// </summary>

private void Init_Bitmap()

{

bitmap = new Bitmap(400,200);

graphics = Graphics.FromImage(bitmap);

graphics.Clear(Color.White);

graphics.DrawString("X 公司上半年銷售情況",new Font("新細明体",16,FontStyle.Underline),Brushes.Black,new PointF(5,5));

}

#region Web Form 設計工具產生的程式碼

override protected void OnInit(EventArgs e)

{

//

// CODEGEN: 此為 asp.net Web Form 設計工具所需的呼叫。

//

InitializeComponent();

base.OnInit(e);

}

/// <summary>

/// 此為設計工具支援所必須的方法 - 請勿使用程式碼編輯器修改

/// 這個方法的內容。

/// </summary>

private void InitializeComponent()

{

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

/// <summary>

/// 在畫佈上面繪製矩形

/// </summary>

private void Draw_Rectangle()

{

int i;

PointF symbolLeg = new PointF(335,20);

PointF descLeg = new PointF(360,16);

for (i = 0; i < arrValueNames.Length; i++)

{

graphics.FillRectangle(new SolidBrush(GetColor(i)),symbolLeg.X,symbolLeg.Y,20,10);

graphics.DrawRectangle(Pens.Black,symbolLeg.X,symbolLeg.Y,20,10);

graphics.DrawString(arrValueNames[i].ToString(),new Font("新細明体",8),Brushes.Black,descLeg);

symbolLeg.Y += 15;

descLeg.Y += 16;

}

for (i = 0; i < arrValues.Length; i++)

{

graphics.FillRectangle(new SolidBrush(GetColor(i)),(i*35) + 15,200 - arrValues[i],20,arrValues[i]);

graphics.DrawRectangle(Pens.Black,(i*35) + 15,200 - arrValues[i],20,arrValues[i]);

}

}

/// <summary>

/// 在畫佈上面繪製圓餅形

/// </summary>

private void Draw_Pie()

{

int i;

// currentangle代表當前角度 totalangle代表最大角度 totalvalues代表最大的銷售額

float sglCurrentAngle = 0,sglTotalAngle = 0,sglTotalValues = 0;

// 計算最大銷售額

for (i = 0; i < arrValues.Length; i++)

sglTotalValues += arrValues[i];

for (i = 0; i < arrValues.Length; i++)

{

// 當月角度值 : 當月銷售額 / 最大銷售額 * 360

sglCurrentAngle = arrValues[i] / sglTotalValues * 360;

graphics.FillPie(new SolidBrush(GetColor(i)),240,95,100,100,sglTotalAngle,sglCurrentAngle);

graphics.DrawPie(Pens.Black,240,95,100,100,sglTotalAngle,sglCurrentAngle);

sglTotalAngle += sglCurrentAngle;

}

}

#region Helper Function

private Color GetColor(int itemIndex)

{

Color color;

switch(itemIndex)

{

case 0:

color = Color.Blue;

break;

case 1:

color = Color.Red;

break;

case 2:

color = Color.Yellow;

break;

case 3:

color = Color.Purple;

break;

case 4:

color = Color.Orange;

break;

case 5:

color = Color.Brown;

break;

default:

color = Color.Blue;

break;

}

return color;

}

#endregion

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有