C#.NET 用程序画图,曲线图
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 用程序画图,曲线图的更多相关文章
- 关于微信小程序前端Canvas组件教程
关于微信小程序前端Canvas组件教程 微信小程序Canvas接口函数 上述为微信小程序Canvas的内部接口,通过熟练使用Canvas,即可画出较为美观的前端页面.下面是使用微信小程序画图的一些 ...
- OpenGL教程之新手上路
Jeff Molofee(NeHe)的OpenGL教程- 新手上路 译者的话:NeHe的教程一共同拥有30多课,内容翔实,而且不断更新 .国内的站点实在应该向他们学习.令人吃惊的是,NeHe提供的例程 ...
- python入门学习1
实学习每一种语言,都可以找到很快乐的学习方法.有兴趣,有乐趣,才会一直想学.知道print().input().if/else就可以做一个简陋的游戏了. print() # 打印函数,将信息打印出来 ...
- PHP中GD库是做什么用的? PHP GD库介绍11111111
什么是gd库? gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...
- Qwt--散点图/函数图
1.Qwt库 QwtPlot是用来绘制二维图像的widget.在它的画板上可以无限制的显示绘画组件.绘画组件可以是曲线(QwtPlotCurve).标记(QwtPlotMarker).网格(QwtPl ...
- java画图程序_图片用字母画出来_源码发布_版本二
在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...
- java画图程序_图片用字母画出来_源码发布
在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构 ...
- java画图程序_图片用字母画出来
最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...
- IOS 作业项目(4)步步完成 画图 程序(中续)
一,程序布局整理 前言://1,程序启动//2,程序流程框架//3,程序界面一致//4,程序界面功能, //这里只做页面的固定功能, //在首次创建界面时,我们会指定好固定事件触发前的固定方法 //至 ...
随机推荐
- ZOJ2067 经典 DP
题目:一个由'.'和'#'组成矩形,统计里面'.'组成的矩形的个数.点击打开链接 自己写挂了,懒得搞了 #include <stdio.h> #include <string.h&g ...
- dmesg和addr2line 定位 segfault
程序长时间运行崩溃,但是没有保存core dump消息.可以用下面的方法定位出程序出错位置: 1. 用dmesg查找出错的代码段地址 ip 000000000041ccec 发生错误时指令的地址, s ...
- 在jsp页面的js中使用Cookie的原理介绍以及相应方法的代码
1. 设置cookie 1.1 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="user_Id=828&q ...
- zookeeper curator使用caches实现各种监听
1.篇首语 curator是zookeeper的一个高级api开发包.封装了zookeeper众多的recipes,并且实现了一些新的recipes原语,最重要的是基于zookeeper提供的各种机制 ...
- JS 巧用 && 与 ||
在对于流程控制语句当中,我们最熟悉不过的就是 if (条件){ //代码块 }else{ //代码块 } 对于一个执行不同的代码来说,如果执行的代码很多,可能就有必要使用上面这种方式 但往往我们开发当 ...
- C# 使用itextsharp 读取pdf中文字坐标
程序调用: using iTextSharp.text.pdf; using System; using System.Collections.Generic; using System.Linq ...
- win10 uwp 通知列表
经常看到小伙伴问,问已经绑定列表,在进行修改时,不会通知界面添加或删除.这时问题就在,一般使用的列表不会在添加时通知界面,因为他们没有通知. 本文:知道什么是通知的列表,如何去写一个通知列表 在 C# ...
- SGU 223 Little Kings(状压DP)
Description 用字符矩阵来表示一个8x8的棋盘,'.'表示是空格,'P'表示人质,'K'表示骑士.每一步,骑士可以移动到他周围的8个方格中的任意一格.如果你移动到的格子中有人质(即'P'), ...
- EF 数据重复和缺失问题(select 错误 )
字段有 id,name,password,sex 1.错误举例: var data = db.User.Select(d => d): 2修正 var data = db.User.Sele ...
- windows消息简单应用实例
//基本定义 internal class MyMessager : IMessageFilter { public bool PreFilterMessage(ref Message m) { // ...