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.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;
using System.Drawing;

/// <summary>
/// DrawingCurve 的摘要说明
/// </summary>
public class DrawingCurve
{
    
    public int intXLong = 800;   //图片大小 长
    public int intYLong = 600;   //图片大小 高
    public int intXMultiple = 1;    //零刻度的值 X
    public int intYMultiple = 0;    //零刻度的值 Y
    public int intXMax = 12;    //最大刻度(点数) X
    public int intYMax = 30;    //最大刻度(点数) Y

public int intLeft = 50;   //左边距
    public int intRight = 120; //右边距
    public int intTop = 30;    //上边距
    public int intEnd = 50;    //下边距

public string strXText = "时间(单位:月)";    //单位 X
    public string strYText = "数量(单位:个)";    //单位 Y
    public string strTitle = "趋势线图";    //标题
    public DataTable tbData;    //要统计的数据

private int intXScale = 30;    //一刻度长度 X
    private int intYScale = 30;    //一刻度高度 Y
    //private int intX = 0;   //0点 X坐标
    //private int intY = 0;   //0点 Y坐标
    public int intData = 0;    //记录数

public DrawingCurve()
    {

intXScale = (intXLong - intLeft - intRight) / (intXMax + 1);//一刻度长度 X
        intYScale = (intYLong - intTop - intEnd) / (intYMax + 1);//一刻度高度 Y

//intX = intXLong - intLeft;   //0点 X坐标
        //intY = intYLong - intEnd;   //0点 Y坐标
    }

public Bitmap DrawingImg()
    {

Bitmap img = new Bitmap(intXLong, intYLong); //图片大小
        Graphics g = Graphics.FromImage(img);
        g.Clear(Color.Snow);
        g.DrawString(strTitle, new Font("宋体", 14), Brushes.Black, new Point(5, 5));
        g.DrawLine(new Pen(Color.Black, 2), intLeft, intYLong - intEnd, intXLong - intRight, intYLong - intEnd); //绘制横向
        g.DrawLine(new Pen(Color.Black, 2), intLeft, intTop, intLeft, intYLong - intEnd);   //绘制纵向

//绘制纵坐标
        g.DrawString(strYText, new Font("宋体", 12), Brushes.Black, new Point(intLeft, intTop));//Y 单位
        Point p1 = new Point(intLeft - 10, intYLong - intEnd);
        for (int j = 0; j <= intYMax; j++)
        {
            p1.Y = intYLong - intEnd - j * intYScale;
            Point pt = new Point(p1.X + 10, p1.Y);
            //绘制纵坐标的刻度和直线
            g.DrawLine(Pens.Black, pt, new Point(p1.X + 15, p1.Y));
            //绘制纵坐标的文字说明
            g.DrawString(Convert.ToString(j + intYMultiple), new Font("宋体", 12), Brushes.Black, new Point(p1.X - 25, p1.Y - 8));
        }

//绘制横坐标
        g.DrawString(strXText, new Font("宋体", 12), Brushes.Black, new Point(intXLong - intRight, intYLong - intEnd));//X 单位
        Point p = new Point(intLeft, intYLong - intEnd);
        for (int i = 0; i < intXMax; i++)
        {
            p.X = intLeft + i * intXScale;
            //绘制横坐标刻度和直线
            g.DrawLine(Pens.Black, p, new Point(p.X, p.Y - 5));
            //绘制横坐标的文字说明
            g.DrawString(Convert.ToString(i + intXMultiple), new Font("宋体", 12), Brushes.Black, p);
        }

intData = tbData.Rows.Count;
        if (intData > 0)
        {
            //趋势线图
            for (int i = 0; i < intData - 1; i++)
            {
                DataRow Row1 = tbData.Rows[i];
                DataRow Row2 = tbData.Rows[i + 1];
                //定义起点
                Point rec = new Point(Convert.ToInt32(intLeft + ((TurnNumber(Row1[0].ToString()) - intXMultiple) * intXScale)), Convert.ToInt32(intYLong - intEnd - (TurnNumber(Row1[1].ToString()) - intYMultiple) * intYScale));
                //定义终点
                Point dec = new Point(Convert.ToInt32(intLeft + ((TurnNumber(Row2[0].ToString()) - intXMultiple) * intXScale)), Convert.ToInt32(intYLong - intEnd - (TurnNumber(Row2[1].ToString()) - intYMultiple) * intYScale));
                //绘制趋势折线
                g.DrawLine(new Pen(Color.Red), rec, dec);
            }
        }

return img;
    }

//转换数字
    private double TurnNumber(string str)
    {
        double dubReturn;
        try
        {
            dubReturn = Convert.ToDouble(str);
        }
        catch
        {
            dubReturn = 0;
        }
        return dubReturn;

}

}

----------------------------------调用------------------------------------------------

protected void Page_Load(object sender, EventArgs e)
    {
        DataTable MyTable = new DataTable();

string constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("App_Data/db.mdb");
        string cmdstr = "SELECT 月份,销量 FROM Result";
        OleDbConnection con = new OleDbConnection(constr);
        con.Open();
        //OleDbCommand cmd = new OleDbCommand(cmdstr, con);
        OleDbDataAdapter da = new OleDbDataAdapter(cmdstr, con);
        da.Fill(MyTable);

DrawingCurve MyDc = new DrawingCurve();
        MyDc.tbData = MyTable;

Bitmap img = new Bitmap(100, 100);
        img = MyDc.DrawingImg();
        Graphics g = Graphics.FromImage(MyDc.DrawingImg());

//显示图形
        img.Save(Response.OutputStream, ImageFormat.Jpeg);;
        g.Dispose();
        Response.Write("<br>" + MyDc.intData.ToString());
    }

C#.NET 用程序画图,曲线图的更多相关文章

  1. 关于微信小程序前端Canvas组件教程

    关于微信小程序前端Canvas组件教程 微信小程序Canvas接口函数 ​ 上述为微信小程序Canvas的内部接口,通过熟练使用Canvas,即可画出较为美观的前端页面.下面是使用微信小程序画图的一些 ...

  2. OpenGL教程之新手上路

    Jeff Molofee(NeHe)的OpenGL教程- 新手上路 译者的话:NeHe的教程一共同拥有30多课,内容翔实,而且不断更新 .国内的站点实在应该向他们学习.令人吃惊的是,NeHe提供的例程 ...

  3. python入门学习1

    实学习每一种语言,都可以找到很快乐的学习方法.有兴趣,有乐趣,才会一直想学.知道print().input().if/else就可以做一个简陋的游戏了. print() # 打印函数,将信息打印出来 ...

  4. PHP中GD库是做什么用的? PHP GD库介绍11111111

    什么是gd库?    gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...

  5. Qwt--散点图/函数图

    1.Qwt库 QwtPlot是用来绘制二维图像的widget.在它的画板上可以无限制的显示绘画组件.绘画组件可以是曲线(QwtPlotCurve).标记(QwtPlotMarker).网格(QwtPl ...

  6. java画图程序_图片用字母画出来_源码发布_版本二

    在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...

  7. java画图程序_图片用字母画出来_源码发布

    在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构 ...

  8. java画图程序_图片用字母画出来

    最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...

  9. IOS 作业项目(4)步步完成 画图 程序(中续)

    一,程序布局整理 前言://1,程序启动//2,程序流程框架//3,程序界面一致//4,程序界面功能, //这里只做页面的固定功能, //在首次创建界面时,我们会指定好固定事件触发前的固定方法 //至 ...

随机推荐

  1. jQuery插件:Ajax将Json数据自动绑定到Form表单

    jQuery注册方法的两种常用方式: //jQuery静态方法注册 //调用方法$.a1() $.extend({ a1: function () { console.log("a1&quo ...

  2. 使用Dapper进行参数化查询

    在使用Dapper操作Mysql数据库中我介绍了使用dapper进行CURD基本操作,但在示例代码中参数虽然也是通过@开头,但其实不是真正意义的参数化查询,而是拼接sql,这种方式不利于防止sql注入 ...

  3. 基于java的后台截图功能的实现

    Java后台截图功能的实现 背景介绍: 在近期开发的可视化二期项目中的邮件项目中,邮件中的正文中含有图片.该图片的产生是将一些html网页转为图片格式,刚开始考虑使用第三方组件库html2image和 ...

  4. 让EditPlus支持SQL高亮提示

    将文件放在一个确定的位置,不要放在桌面这些临时位置.然后在 EditPlus 的菜单栏选择 工具(T) -> 配置用户工具(C) 选择左边"类别"中的 文件 -> 设置 ...

  5. Winform常用的一些功能收集(持续更新)

    #region progressBar实时显示进度 private void button1_Click(object sender, EventArgs e) { int i = 10000; pr ...

  6. mongodb生产环境(副本集模式)集群搭建配置

    mongodb副本集模式由如下几部分组成: 1.路由实例mongos 2.配置实例configsvr 3.副本集集群replset(一主多从) tips: 1.以上实例都是mongod守护进程 2.以 ...

  7. Weave Scope 多主机监控 - 每天5分钟玩转 Docker 容器技术(81)

    除了监控容器,Weave Scope 还可以监控 Docker Host. 点击顶部 HOSTS 菜单项,地图将显示当前 host. 与容器类似,点击该 host 图标将显示详细信息. host 当前 ...

  8. mac idea sbt工程打jar包

    1.首先保证sbt已下载,否则下载homebrew:在命令行输入/usr/bin/ruby XXX ->下载完成后在终端输入brew install sbt ->安装完毕后可以打jar包 ...

  9. Pyhton编程(三)之Pycharm安装及运算符

    一:上节题目解答 1)使用while循环输出 1 2 3 4 5 6 8 9 10(注意:没有7) n=1while n<11: if n==7: pass //pass代码段指代空代码.. e ...

  10. 前端工程化grunt

    1.grunt是什么? grunt是基于nodejs的前端构建工具.grunt用于解决前端开发的工程问题. 2.安装nodejs Grunt和所有grunt插件都是基于nodejs来运行的. 安装了n ...