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,程序界面功能, //这里只做页面的固定功能, //在首次创建界面时,我们会指定好固定事件触发前的固定方法 //至 ...
随机推荐
- Java历程-初学篇 Day04选择结构(1)
一,if 1,单分支 if(条件){ } 示例: 2,双分支 if(条件){ }else{ } 示例: 3,多重if if(条件){ }else if(条件){ }else{ } 示例: 4,嵌套if ...
- ch1-vuejs基础入门(hw v-bind v-if v-for v-on v-model 应用组件简介 小案例)
1 hello world 引入vue.min.js 代码: ----2.0+版本 <div id="test"> {{str}} </div> <s ...
- 数据库表反向生成(一) MyBatis-generator与IDEA的集成
在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中. 数据库表反向生成,指的是通过数据库如mysql中的库表schema生成dao层读写表的基础代码,包括model ...
- 实验:实现https
实现https 环境 1.三台主机分别为A,B,C. 2.A主机设置为CA和DNS服务器,ip为192.168.213.129 3.B主机为client,ip为192.168.213.253 4.C主 ...
- Extjs6(四)——侧边栏导航根据路由跳转页面
本文基于ext-6.0.0 之前做的时候这个侧边栏导航是通过tab切换来切换页面的,但是总感觉不太对劲,现在终于发现怎么通过路由跳转了,分享给大家,可能有些不完善的地方,望大家读后可以给些指点.欢迎留 ...
- rewrap-ajax.js插件
很久没有动手写技术的文章,这个过程中间一直在写日记,生活点滴的记录替代了技术文章的编写,可以看出以往的内心是激情或烈火,现在是... 最近写了一个JS插件,用圈内的话说叫造了个轮子,造的好与不好都不是 ...
- 人工智能 tensorflow框架-->简介及安装01
简介:Tensorflow是google于2015年11月开源的第二代机器学习框架. Tensorflow名字理解:图形边中流动的数据叫张量(Tensor),因此叫Tensorflow 既 张量流动 ...
- win10 UWP RSS阅读器
RSS简易信息聚合(也叫聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议.RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使 ...
- go基础编程 day-1
Go语言的特性 开启了学习新的语言路程,记录每天学习的笔记,与大家一起分享. ①.自动垃圾回收 ②.更丰富的内置类型 ③.函数多返回值 ④.错误处理 ⑤.匿名函数和闭包 ⑥.类型和接口 ⑦.并发编程 ...
- nodejs里的module.exports和exports
引 在node.js中我们可以使用module.exports和exports导出模块,设置导出函数.数组.变量等等 为什么可以用这两个模块? 或者直接问,node.js的模块功能是怎么实现的. 这样 ...