谁有asp.net用C#代码生成图形的,不要告诉我去搜索,我可以在网上找了好久没有找到,才发这个贴子的..
谁有asp.net用C#代码生成图形的,不要告诉我去搜索,我可以在网上找了好久没有找到,才发这个贴子的..
这个是我练着玩的,可以用。你看看吧!
数据库中GDI表。yf-月份,xl-销量
private void Page_Load(object sender, System.EventArgs e) //自己的代码(绘制柱状图)
{
// 在此处放置用户代码以初始化页面
SqlConnection conn=new SqlConnection("server=localhost; database=WKM001; uid=sa; pwd="); //创建数据库连接以获得数据
conn.Open();
SqlCommand com=new SqlCommand("select yf, xl from GDI order by yf" , conn);
SqlDataReader dr=com.ExecuteReader();
int [] szxls=new int[12]; //定义数组存放从数据库获得的销量数据
string [] szyf=new string[12]; //定义数组存放从数据库获得的月份
int iindex=0;
while(dr.Read())
{
szxls[iindex]=dr.GetInt32(1);
szyf[iindex]=dr.GetInt32(0).ToString()+"月";
iindex ++; //读取GDI中的数据并存入数组
}
dr.Close();
com.Dispose();
conn.Close(); //关闭数据连接
Bitmap bm=new Bitmap(600,250); //创建一个长度为600,宽带为250的Bitmap实例
Graphics g ;
g=Graphics.FromImage(bm); //由此Bitmap实例创建Graphic实例
g.Clear(Color.Snow); //用Snow色彩为背景色填充此绘画图面
g.DrawString("××公司××××年度销售情况统计表",new Font("黑体",16), Brushes.Black, new Point(5,5)); //在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题
//以下代码是是实现图右上部
Point myRec=new Point(535, 30);
Point myDec=new Point(560, 26); //以上是在图01中为下面绘制定位
g.DrawString("单位:万套", new Font("宋体", 9), Brushes.Black, new Point(525, 12));
for ( int i = 0 ; i < szyf.Length ; i++ )
{
g.DrawRectangle(Pens.Black, myRec.X, myRec.Y, 20, 10); //绘制小方块
g.FillRectangle(new SolidBrush(GetColor(i)), myRec.X, myRec.Y, 20 , 10 ); //填充小方块
g.DrawString(szyf[i].ToString(), new Font("宋体", 9), Brushes.Black, myDec); //绘制小方块右边的文字
myRec . Y += 15 ;
myDec . Y += 15 ;
}
//以下代码是绘制Bar图,及其销售数量
int iBarWidth = 40 ;
int scale = 10 ;
for ( int i = 0 ; i < szxls . Length ; i++ )
{
g.DrawRectangle(Pens.Black, (i*iBarWidth)+15, 250-(szxls[i]*scale), 20, (szxls[i]*scale)+5); //绘制Bar图
g.FillRectangle(new SolidBrush(GetColor(i)), (i*iBarWidth)+15, 250-(szxls[i]*scale), 20, (szxls[i]*scale)+5); //以指定的色彩填充Bar图
g.DrawString(szxls[i].ToString(), new Font("宋体", 9), Brushes.Black, (i*iBarWidth)+20, 235-(szxls[i]*scale)); //显示Bar图代表的数据
}
//以下代码是绘制曲线图
Point[] points = new Point[szyf.Length]; //定义曲线转折点
for (int i = 0; i < szyf.Length; i++)
{
int iWidth=30;
int scale = 10 ;
points[i].X= i*iWidth;
points[i].Y = 250-(szxls[i]*scale);
}
Pen pen=new Pen(Color.Black, 2);
g.DrawCurve(pen, points, 0.8f);
//以下代码是绘制边框,并形成Jpeg文件,供浏览器显示出来
Pen p = new Pen ( Color.Black , 2 ) ;
g . DrawRectangle ( p , 1 , 1 , 598 , 248 ) ;
bm.Save ( Response . OutputStream , ImageFormat.Gif) ;
}
#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);
}
/// <summary>
/// 获取颜色
/// </summary>
/// <param name="itemIndex">数组的索引</param>
/// <returns></returns>
private Color GetColor ( int itemIndex )
{
Color MyColor ;
int i = itemIndex ;
switch (i)
{
case 0 :
MyColor = Color.Green;
return MyColor;
case 1 :
MyColor = Color.Red;
return MyColor;
case 2:
MyColor = Color.Yellow;
return MyColor;
case 3 :
MyColor = Color.Blue;
return MyColor;
case 4 :
MyColor = Color.Orange;
return MyColor;
case 5 :
MyColor = Color.Aqua;
return MyColor;
case 6:
MyColor = Color.SkyBlue;
return MyColor;
case 7:
MyColor = Color.DeepPink;
return MyColor;
case 8:
MyColor = Color.Azure;
return MyColor;
case 9:
MyColor = Color.Brown;
return MyColor;
case 10:
MyColor = Color.Pink;
return MyColor;
case 11:
MyColor = Color.BurlyWood;
return MyColor;
case 12:
MyColor = Color.Chartreuse;
return MyColor;
default:
MyColor = Color.Pink;
return MyColor;
}
}