ASP.NET画曲线图

类LineChart public class LineChart { public Bitmap b; public string Title = "在ASP.NET中实现数据图表"; public ArrayList chartValues = new ArrayList(); public float Xorigin = 0, Yorigin = 0; public float ScaleX, ScaleY; public float Xdivs = 2, Ydivs = 2; private int Width, Height; private Graphics g; private Page p; struct datapoint { public float x; public float y; public bool valid; } public LineChart(int myWidth, int myHeight, Page myPage) { Width = myWidth; Height = myHeight; ScaleX = myWidth; ScaleY = myHeight; b = new Bitmap(myWidth, myHeight); g = Graphics.FromImage(b); p = myPage; } public void AddValue(int x, int y) { datapoint myPoint; myPoint.x = x; myPoint.y = y; myPoint.valid = true; chartValues.Add(myPoint); } public void Draw() { int i; float x, y, x0, y0; string myLabel; Pen blackPen = new Pen(Color.Blue, 2);//定义画笔 Brush blackBrush = new SolidBrush(Color.Black);//定义画刷 Font axesFont = new Font("arial", 10);//定义字体 //首先要创建图片的大小 p.Response.ContentType = "image/jpeg"; g.FillRectangle(new SolidBrush(Color.LightGreen), 0, 0, Width, Height); int ChartInset = 50; int ChartWidth = Width - (2 * ChartInset); int ChartHeight = Height - (2 * ChartInset); g.DrawRectangle(new Pen(Color.Black, 1), ChartInset, ChartInset, ChartWidth, ChartHeight); //写出图片上面的图片内容文字 g.DrawString(Title, new Font("arial", 14), blackBrush, Width / 3, 10); //沿X坐标写入X标签 for (i = 0; i <= Xdivs; i++) { x = ChartInset + (i * ChartWidth) / Xdivs; y = ChartHeight + ChartInset; myLabel = (Xorigin + (ScaleX * i / Xdivs)).ToString(); g.DrawString(myLabel, axesFont, blackBrush, x - 4, y + 10); g.DrawLine(blackPen, x, y + 2, x, y - 2); } //沿Y坐标写入Y标签 for (i = 0; i <= Ydivs; i++) { x = ChartInset; y = ChartHeight + ChartInset - (i * ChartHeight / Ydivs); myLabel = (Yorigin + (ScaleY * i / Ydivs)).ToString(); g.DrawString(myLabel, axesFont, blackBrush, 5, y - 6); g.DrawLine(blackPen, x + 2, y, x - 2, y); } g.RotateTransform(180); g.TranslateTransform(0, -Height); g.TranslateTransform(-ChartInset, ChartInset); g.ScaleTransform(-1, 1); //画出图表中的数据 datapoint prevPoint = new datapoint(); prevPoint.valid = false; foreach (datapoint myPoint in chartValues) { if (prevPoint.valid == true) { x0 = ChartWidth * (prevPoint.x - Xorigin) / ScaleX; y0 = ChartHeight * (prevPoint.y - Yorigin) / ScaleY; x = ChartWidth * (myPoint.x - Xorigin) / ScaleX; y = ChartHeight * (myPoint.y - Yorigin) / ScaleY; g.DrawLine(blackPen, x0, y0, x, y); g.FillEllipse(blackBrush, x0 - 2, y0 - 2, 4, 4); g.FillEllipse(blackBrush, x - 2, y - 2, 4, 4); } prevPoint = myPoint; } //最后以图片形式来浏览 b.Save(p.Response.OutputStream, ImageFormat.Jpeg); } public void Dispose() { g.Dispose(); b.Dispose(); } } aspx.cs页面调用: private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 LineChart c = new LineChart(640, 480, this.Page); c.Title = " 在ASP.NET中实现数据图表"; c.Xorigin = 0; c.ScaleX = 500; c.Xdivs = 5; c.Yorigin = 0; c.ScaleY = 1000; c.Ydivs = 5; c.AddValue(0, 150); c.AddValue(50, 50); c.AddValue(100, 700); c.AddValue(200, 150); c.AddValue(300, 450); c.AddValue(400, 75); c.AddValue(450, 450); c.AddValue(500, 250); c.Draw(); c.Dispose(); }

posted on 2008-09-12 13:29  风乔  阅读(327)  评论(0编辑  收藏  举报

导航