zoukankan      html  css  js  c++  java
  • asp.net的生成曲线图的过程简单实例

    这里是从Dataset里的数据生成曲线图.
    我的Dataset是从表Sendrec里读取的数据,分别有Id,Sendid(订单号),Sendtime(记录时间),Sendnum(单位时间发送量/我这里是五分钟)几个字段
    过程如下:
    public void draw(Page page,DataSet ds,int Tnum){}
    其中page是用来传递引用这个过程的页面,这样让页面是JPG方式直接向客户端输出生成的曲线图.
    ds就是取出来的数据集了
    Tnum只是我这里要用到的一个参数,不想让这个类去接触读取过程,所以把订单的总量直接取出后传递给它的.
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;
    using System.Drawing;
    using System.IO;

    public class imgdraw
    {
        public imgdraw()
        {
           
        }
        public void draw(Page page,DataSet ds,int Tnum)
        {
            //取得记录数量
            int count = ds.Tables[0].Rows.Count;
            //记算图表宽度
            int wd = 80 + 20 * (count - 1);
            //设置最小宽度为800
            if (wd < 800) wd = 800;
            //生成Bitmap对像
            Bitmap img=new Bitmap(wd,400);
            //生成绘图对像
            Graphics g = Graphics.FromImage(img);
            //定义黑色画笔
            Pen Bp = new Pen(Color.Black);
            //定义红色画笔
            Pen Rp = new Pen(Color.Red);
            //定义银灰色画笔
            Pen Sp = new Pen(Color.Silver);
            //定义大标题字体
            Font Bfont = new Font("Arial", 12, FontStyle.Bold);
            //定义一般字体
            Font font = new Font("Arial", 6);
            //定义大点的字体
            Font Tfont = new Font("Arial", 9);
            //绘制底色
            g.DrawRectangle(new Pen(Color.White, 400), 0, 0, img.Width, img.Height);
            //定义黑色过渡型笔刷
          LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0,img.Width, img.Height), Color.Black, Color.Black, 1.2F, true);
            //定义蓝色过渡型笔刷
          LinearGradientBrush Bluebrush = new LinearGradientBrush(newRectangle(0, 0, img.Width, img.Height), Color.Blue, Color.Blue, 1.2F,true);
            //绘制大标题
            g.DrawString(ds.Tables[0].Rows[0]["sendid"].ToString() + "号订单发送情况曲线图", Bfont, brush, 40, 5);
            //取得当前发送量
            int nums=0;
            for (int i = 0; i < count; i++)
            {
                nums+=Convert.ToInt32(ds.Tables[0].Rows["sendnum"]);
            }
            //绘制信息简报
          string info="订单发送时间:"+ds.Tables[0].Rows[0]["sendtime"].ToString()+" 曲线图生成时间:"+DateTime.Now.ToString()+"  订单总量:"+Tnum.ToString()+" 当前发送总量:"+nums.ToString();
            g.DrawString(info, Tfont, Bluebrush, 40, 25);
            //绘制图片边框
            g.DrawRectangle(Bp, 0, 0, img.Width - 1, img.Height - 1);
            //绘制竖坐标线     
            for (int i = 0; i < count; i++)
            {
                g.DrawLine(Sp, 40+20 * i, 60, 40+20 * i, 360);
            }
            //绘制时间轴坐标标签
            for (int i = 0; i < count; i+=2)
            {
                string st = Convert.ToDateTime(ds.Tables[0].Rows["sendtime"]).ToString("hh:mm");
                g.DrawString(st, font, brush, 30 + 20 * i, 370);
            }
            //绘制横坐标线
            for (int i = 0; i < 10; i++)
            {
                g.DrawLine(Sp, 40, 60+30*i, 40+20*(count-1), 60+30*i);
                int s = 2500 - 50 * i * 5;
                //绘制发送量轴坐标标签
                g.DrawString(s.ToString(), font, brush, 10, 60 + 30 * i);
            }
           
            //绘制竖坐标轴
            g.DrawLine(Bp, 40, 55, 40, 360);
            //绘制横坐标轴
            g.DrawLine(Bp, 40, 360, 45 + 20 * (count - 1), 360);
            //定义曲线转折点
            Point[] p = new Point[count];
            for (int i = 0; i < count; i++)
            {
                p.X = 40 + 20 * i;
                p.Y = 360- Convert.ToInt32(ds.Tables[0].Rows["sendnum"]) / 5*3/5;
            }
            //绘制发送曲线
            g.DrawLines(Rp, p);
            for (int i = 0; i < count; i++)
            {
                //绘制发送记录点的发送量
                g.DrawString(ds.Tables[0].Rows["sendnum"].ToString(), font, Bluebrush, p.X, p.Y - 10);
                //绘制发送记录点
                g.DrawRectangle(Rp, p.X - 1, p.Y - 1, 2, 2);
            }
            //绘制竖坐标标题
            g.DrawString("发送量", Tfont, brush, 5, 40);
            //绘制横坐标标题
            g.DrawString("发送时间", Tfont, brush, 40, 385);

            //保存绘制的图片
            MemoryStream stream = new MemoryStream();
            img.Save(stream, ImageFormat.Jpeg);
            //图片输出
            page.Response.Clear();
            page.Response.C;
            page.Response.BinaryWrite(stream.ToArray());
        }
    }
  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/jazzka702/p/1503267.html
Copyright © 2011-2022 走看看