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

asp.net

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

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

     } }

时间: 2025-01-30 15:39:53

Asp.net中使用GDI+繪製圖形的相关文章

ASP.NET中通过对话框方式下载文件

ASP.NET中通过对话框方式下载文件 1 通过探出对话框提示文件下载或打开 2 通过自定义Header让特定的应用程序打开文件  使用的方法:Response.TransmitFile()  例程: Response.ContentType = "image/jpeg";Response.AppendHeader("Content-Disposition","attachment; filename=SailBig.jpg");Response

ASP.NET中共用代码

asp.net 在 ASP.NET 中由於可直接使用或替換 DLL 檔,大部分人較不關心動態共用原始碼的問題,由於 ASP.NET 在執行時可動態編譯最新原始碼供網站執行,是否一定要採用 DLL 來執行網頁對於管理者來說,沒有絕對的準則,但對系統或程式設計師來說,動態共用原始碼意味相同原始碼可供各專案同時共用,當在開發或維護某一專案時,針對共用原始碼的變動,亦等同於針對所有專案一起更新,此外亦可降低相同功能類似原始開發維護時間,有助於開發力的提升及專案小組共同開發. 例如早期專案存取資料庫可能以

asp.net中如何将excel工作表转为图片,然后在本地打印

问题描述 asp.net中如何将excel工作表转为图片,然后在本地打印 解决方案 解决方案二:用GDI+画吧!解决方案三:转化为PDF打印行吗?PDF就比较容易了解决方案四:是那种柱形之类的图案吧那个好像需要Execl.dll这个解决方案五:我是在做一个数据库程序,客户端需要打印查询结果,在网上看到可以把查询结果生成excel表格,然后转换为图片,这样就可以在客户端打印了.但不知道是如何实现的.可以直接转换成pdf?解决方案六:直接打印Excel吧,转化成图片,没做过,帮顶,要不考虑做成水晶报

ASP.NET中的状态管理

asp.net 我们在ASP中能够通过cookie.查询字符串.应用程序.对话等轻易地解决这些问题.现在到了ASP.NET环境中,我们仍然可以使用这些功能,只是它们的种类更多了,功能也更强大了. 管理互联网网页主要有二种不同的方法:客户端和服务器端. 1.客户端的状态管理: 在客户端.服务器之间的多次请求-应答期间,服务器上不保存信息,信息将被存储在网页或用户的计算机上. A.Cookie cookie是存储在客户端文件系统的文本文件中或客户端浏览器对话的内存中的少量数据,它主要用来跟踪数据设置

数据-新手求解asp.net:asp.net中如何根据自己的需要动态的生成表格并能输入保存

问题描述 新手求解asp.net:asp.net中如何根据自己的需要动态的生成表格并能输入保存 新手求解asp.net:asp.net中如何根据自己的需要输入行列数动态的生成表格行和列,并且在网页中生成的表格能够对数据的输入并保存到后台数据库中,如果表格不能实现输入的话用文本框形式又如何解决?如何动态生成文本框并保存到数据库表格中,急啊,谢谢大神指点,好人一生平安0.0! 解决方案 asp.net 动态表格生成1.ASP.NET动态生成HTML页面Asp.net利用Jquery动态添加表格的行数

在ASP.NET中使用计时器(Timer)

我在实验中发现在 ASP.NET 中可以使用计时器(Timer)完成一些定时动作.这一点可能会对我们的一些 Web 程序有益. 下面首先介绍我测试使用的一个例子: 首先在 global.asax 中的 Application_OnStart 事件过程中定义计时器,代码如下: [VB.NET] global.asax <%@ import Namespace="System.Timers" %> <script runat="server">

asp.net中ajax技术是否可以实现停止服务器端正在运行的按钮事件

问题描述 asp.net中ajax技术是否可以实现停止服务器端正在运行的按钮事件 给予B/S的webform项目 在服务器端有一个按钮事件 执行时间较长 所以就添加了一个按钮用来可以随时停止正在运行的耗时较长的按钮 问题是那个正在服务器端运行的按钮是否可以被其他按钮终止呢?求解答 解决方案 不可以.首先将长时间操作的任务放在按钮事件中就是错误的.按钮事件在页面回传前调用,ajax回发根本在页面加载后.你应该用消息队列.后台服务去执行长时间的任务. 解决方案二: 这个理论上是可以实现的. 服务器端

Asp.Net中使用Highcharts控件X轴的categories数据一多会被截断

问题描述 Asp.Net中使用Highcharts控件X轴的categories数据一多会被截断 xAxis: { tickmarkPlacement: ""on"" type: 'datetime' tickInterval: [<%=num %>] categories: [<%=lastModifyTime %>] } xAxis中 categories数据会被截断的问题怎么解决 解决方案 ASP.NET中通过WebService获取数

asp.net中td中的两个控件左右并排好了,但是如何上下居中,怎么弄都不得,大神帮看看

问题描述 asp.net中td中的两个控件左右并排好了,但是如何上下居中,怎么弄都不得,大神帮看看 /asp:TextBox 如何让这个TextBox控件和ImageButton控件都是并排的上下居中吖,我用了valign="middle" 还是不得,各位大神,帮帮我吧,我弄了一个早上了,明天要交作业了 解决方案 td不够宽导致另外控件换行了吧,td宽度设置大一点能容下2个按钮 解决方案二: 长度是足够长的,会不会是我的TextBox小了?因为我的图片比那个TextBox大,可以再帮我