//部分代码参考了http://www.yesky.com/20030324/1658705_2.shtml
//Page_Load事件如果改成从数据库中获取数据,就能根据数据库中的数据进行绘图了
public class bitmappicture : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
//标题
string title="年度销售业绩统计";
//数据数组
float []Arr={3,5,6,11,33,16,10,8,21,19,11,20};
//string []Arr1={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
//类别数组
string ARR="一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月";
string []Arr1=ARR.Split(',');
barpicture(title,Arr,Arr1); //调用绘图函数
}
//函数中的三参数分别为:标题,数据数组,类别数组
private void barpicture(string title,float []Arr,string []Arr1)
{
//显示屏幕分辨率
int ScreenWidth=800;
int ScreenHeight=600;
int XX=100;//Y轴竖直位置 直线y=XX
int YY=ScreenHeight-XX;//X轴水平位置 直线x=YY
int XD=50;//X轴步距
int YD=10;//Y轴步距
int WW=25;//柱形宽度
int KD=YD;//Y轴上的最小刻度值,为精确标刻必须同Y轴步距相关
//创建一个宽度为ScreenWidth,高度为ScreenHeight的Bitmap实例
Bitmap bm = new Bitmap(ScreenWidth,ScreenHeight);
//由此Bitmap实例创建Graphic实例
Graphics g = Graphics.FromImage(bm);
g.Clear(Color.Snow);
g.DrawString(title,new Font("宋体",20),Brushes.Blue,ScreenWidth/2-80,80);//绘制标题
//绘制坐标
Pen p1=new Pen(Brushes.Black,3);//定义绘制坐标的画笔
g.DrawLine(p1,new Point(XX,YY),new Point(ScreenWidth-XX,YY));//绘制X轴
g.DrawLine(p1,new Point(XX,XX),new Point(XX,YY));//绘制Y轴
//绘制Y轴上的刻度
for(int j=0;j<(YY-XX)/KD;j++)
{
if(j%3==0) //避免Y轴上刻度太密,所以每3个标一个刻度
{
g.DrawLine(p1,new Point(XX,YY-j*KD),new Point(XX+10,YY-j*KD));//刻度短划线
g.DrawString(j.ToString(),new Font("Arial",15,FontStyle.Regular),Brushes.Black,XX-30,YY-10-j*KD);
//刻度值
}
}
//绘制X轴上的标识和柱形所表示的数据
for(int i=0;i<Arr.Length;i++)
{
g.DrawRectangle(new Pen( GetColor(i)),XX+20+i*XD,YY-Arr[i]*YD,WW,Arr[i]*YD); //绘制柱形
g.FillRectangle(new SolidBrush( GetColor(i)),XX+20+i*XD,YY-Arr[i]*YD,WW,Arr[i]*YD); //用颜色填充柱形
g.DrawString(Arr[i].ToString(),new Font("Arial",20),Brushes.Black,XX+20+i*XD,YY-Arr[i]*YD-40);//标识数据
g.DrawString(Arr1[i],new Font("Arial",15),Brushes.Black,XX+5+i*XD,YY+30);//标识每个柱状对应的月份
}
Pen p=new Pen(Brushes.Black,3);//绘制边框的画笔
g.DrawRectangle(p,20,20,ScreenWidth-40,ScreenHeight-40); //绘制边框
bm.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
}
//颜色函数
private Color GetColor ( int itemIndex )
{
Color MyColor ;
int i = itemIndex ;
switch ( i )
{
case 0 :
MyColor = Color.Silver ;
return MyColor ;
case 1 :
MyColor = Color.Red ;
return MyColor ;
case 2 :
MyColor = Color.Yellow ;
return MyColor ;
case 3 :
MyColor = Color.Peru ;
return MyColor ;
case 4 :
MyColor = Color.Orange ;
return MyColor ;
case 5 :
MyColor = Color.Coral ;
return MyColor ;
case 6:
MyColor = Color.Gray ;
return MyColor ;
case 7:
MyColor = Color.Maroon ;
return MyColor ;
case 8:
MyColor = Color.SeaGreen ;
return MyColor ;
case 9:
MyColor = Color.Teal ;
return MyColor ;
case 10:
MyColor = Color.RoyalBlue ;
return MyColor ;
case 11:
MyColor = Color.BurlyWood ;
return MyColor ;
case 12:
MyColor = Color.Chartreuse ;
return MyColor ;
default:
MyColor = Color.Green ;
return MyColor ;
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
原贴:http://lcszndx.bokee.com/viewdiary.11080075.html 作者:龙
相关贴子:
http://www.yesky.com/20030324/1658705_2.shtml
和
http://www.yesky.com/20020627/1617851.shtml