• 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(); }
  • 相关阅读:
    Java 8 Lambda 表达式
    OSGi 系列(十二)之 Http Service
    OSGi 系列(十三)之 Configuration Admin Service
    OSGi 系列(十四)之 Event Admin Service
    OSGi 系列(十六)之 JDBC Service
    OSGi 系列(十)之 Blueprint
    OSGi 系列(七)之服务的监听、跟踪、声明等
    OSGi 系列(六)之服务的使用
    OSGi 系列(三)之 bundle 事件监听
    OSGi 系列(三)之 bundle 详解
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175982.html
Copyright © 2020-2023  润新知