GDI+画图类Graphics的使用
一:基础定义
#region 定义线尾、线头为箭头、字体和笔刷
Pen p = new Pen(Color.Black, );//定义画笔 蓝色,宽度为1(坐标显示颜色)
p.EndCap = LineCap.ArrowAnchor;//定义线尾的样式为箭头 Pen pk = new Pen(Color.Black, );//定义画笔 黑色,宽度为1(坐标显示颜色)
Pen pbl = new Pen(Color.Red,);
pbl.EndCap = LineCap.ArrowAnchor;//定义线尾的样式为箭头 StringFormat strF = new StringFormat(StringFormatFlags.DirectionVertical);//定义格式
Font f = new System.Drawing.Font("宋体", );//定义字体
SolidBrush bB = new SolidBrush(Color.Black);//定义单色画刷
SolidBrush bl = new SolidBrush(Color.Red);//定义单色画刷
#endregion
二:使用前准备,新建一个picturebox,实例化一个 Graphics类,关联它们
Graphics gph;//绘画区域
Bitmap bmp = new Bitmap(pic_Img.Width, pic_Img.Height);//600, 512
gph = Graphics.FromImage(bmp);
三:实例

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D; namespace DrawLine
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); #region 定义线尾、线头为箭头、字体和笔刷
Pen p = new Pen(Color.Blue, );//定义画笔 蓝色,宽度为1(坐标显示颜色)
p.EndCap = LineCap.ArrowAnchor;//定义线尾的样式为箭头
p.StartCap = LineCap.ArrowAnchor;//定义线首的样式为箭头 Font f = new System.Drawing.Font("宋体", );//定义字体
SolidBrush bB = new SolidBrush(Color.Black);//定义单色画刷
//SolidBrush bB = new SolidBrush(Color.Blue);
#endregion
string[] month = new string[] { "一月", "二月", "三月", "四月", "五月", "六月",
"七月", "八月", "九月", "十月", "十一月", "十二月" };
float[] d = new float[] { 20.5F, , 10.8F, 15.6F, , 70.9F, 50.3F, 30.7F, , 50.4F, 30.8F, };
//画图初始化
Bitmap bMap = new Bitmap(, );
Graphics gph = Graphics.FromImage(bMap);
//gph.Clear(Color.White);
PointF cPt = new PointF(, );//中心点
PointF[] xPt = new PointF[]{new PointF(cPt.Y+,cPt.Y),
new PointF(cPt.Y,cPt.Y-),new PointF(cPt.Y,cPt.Y+)};//X轴三角形
PointF[] yPt = new PointF[]{new PointF(cPt.X,cPt.X-),
new PointF(cPt.X-,cPt.X),new PointF(cPt.X+,cPt.X)};//Y轴三角形
gph.DrawString("红马車公司月生产量图表", new Font("宋体", )
, Brushes.Black, new PointF(cPt.X + , cPt.X));//图标标题
//画X轴
gph.DrawLine(Pens.Black, cPt.X, cPt.Y, cPt.Y, cPt.Y);
gph.DrawPolygon(Pens.Black, xPt);
gph.FillPolygon(new SolidBrush(Color.Black), xPt);
gph.DrawString("月份", new Font("宋体", ), Brushes.Black, new PointF(cPt.Y + , cPt.Y + ));
//画Y轴
gph.DrawLine(Pens.Black, cPt.X, cPt.Y, cPt.X, cPt.X);
gph.DrawPolygon(Pens.Black, yPt);
gph.FillPolygon(new SolidBrush(Color.Black), yPt);
gph.DrawString("单位(万)", new Font("宋体", ), Brushes.Black, new PointF(, ));
for (int i = ; i <= ; i++)
{
//画Y轴刻度
if (i < )
{
gph.DrawString((i * ).ToString(), new Font("宋体", ), Brushes.Black, new PointF(cPt.X - , cPt.Y - i * - ));
gph.DrawLine(Pens.Black, cPt.X - , cPt.Y - i * , cPt.X, cPt.Y - i * );
}
//画X轴项目
gph.DrawString(month[i - ].Substring(, ), new Font("宋体", ), Brushes.Black,
new PointF(cPt.X + i * - , cPt.Y + ));
gph.DrawString(month[i - ].Substring(, ), new Font("宋体", ), Brushes.Black,
new PointF(cPt.X + i * - , cPt.Y + ));
if (month[i - ].Length > ) gph.DrawString(month[i - ].Substring(, ), new Font("宋体", ),
Brushes.Black,
new PointF(cPt.X + i * - , cPt.Y + ));
gph.DrawLine(Pens.Black, cPt.X + i * , cPt.Y, cPt.X + i * , cPt.Y + );
//画点
gph.DrawEllipse(Pens.Black, cPt.X + i * , cPt.Y - d[i - ] * - 1.5F, , );
gph.FillEllipse(new SolidBrush(Color.Black), cPt.X + i * , cPt.Y - d[i - ] * - 1.5F,
, );
//画数值
gph.DrawString(d[i - ].ToString(), new Font("宋体", ), Brushes.Black,
new PointF(cPt.X + i * , cPt.Y - d[i - ] * ));
//画折线
if (i > )
gph.DrawLine(Pens.Red, cPt.X + (i - ) * , cPt.Y - d[i - ] * , cPt.X + i * , cPt.Y - d[i - ] * );
}
pictureBox1.Image = bMap;
} }
}
四:注意事项
如何建立一个有比例关系的坐标系,主要是确定实际距离和像素的关系,一个像素代表多少米的距离
如何生成一个动态比例尺、动态刻度值的坐标系,这就需要确立一个参照点,将这个参照点作为零点,再计算刻度值,从零点的左右两边分别标刻度值。标点时,需要确立动态的像素和距离的关系来确定位置

GDI+画图类Graphics的使用的更多相关文章
- C# 使用 GDI+ 画图
最近做一个微信公众号服务,有一些简单的图片处理功能.主要就是用户在页面操作,前端做一些立刻显示的效果,然后提交保存时后端真正修改原图. 我们的后端是 ASP.NET,也就是 C# 语言了,C# 本身处 ...
- Android中利用画图类和线程画出闪烁的心形
本文讲解主要涉及的知识点: 1.线程控制 2.画图类 3.心形函数 大家先看图片: <ig ...
- C++MFC编程笔记day06 MFC向导、MFC画图类使用
MFC画图 MFC画图类包含画图设备类和画图对象类 1 画图设备类 CDC类-父类是CObject,封装的是一般的画图设备,比如:显示器, 打印机等. ...
- Graphics 导出图片使用【这个主要是画图类图的使用,记录一下】
/// <summary> /// 导出信令流程矢量图 /// </summary> /// <param name="signalFlowInfos" ...
- C# GDI+编程之Graphics类
GDI+是GDI的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像.数学仿真等. Graphics类是GDI+的核心, ...
- WinForm GDI编程:Graphics画布类
命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using System.Drawing.Drawing2D;//提供高级的二维和矢量图像功能 using ...
- C#-gdi画图,双缓冲画图,Paint事件的触发---ShinePans
在使用gdi技术画图时,有时会发现图形线条不够流畅,或者在改变窗口大小时会闪烁不断的现象.(Use DoubleBuffer to solve it!) ...
- c# GDI画图 双缓冲画图分析
双缓冲绘图分析 1.Windows 绘图原理 我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是“画”出来的.这时的屏幕,就相当于一块黑板,而 Windows ...
- Android 画图类View与SurfaceView之学习
在开发游戏开发中,android相应的提供了几个重要的模块: 1.显示界面的视图: Android 提供 View 和 SurfaceView 2.控制游戏整体结构: android 提供 Acti ...
随机推荐
- MySQL的字符编码体系(二)——传输数据编码
MySQL的字符编码体系能够分成两部分:一部分是关于数据库server本身存储数据表时怎样管理字符数据的编码:还有一部分是关于client与数据库server数据传输怎样编码.上一篇MySQL的字符编 ...
- (转)cocos2dx 内存管理
原文地址:http://blog.csdn.net/ring0hx/article/details/7946397 cocos2dx的内存管理移植自Objective-C, 对于没有接触过OC的C++ ...
- 根据IP地址获取IP的详细信息
<?php header('Content-Type:text/html; charset=utf-8'); function ip_data() { $ip = GetIP(); $url = ...
- [转] HBase的特征和优点
from: http://blog.jobbole.com/83614/ 概念:行键,列簇 Hbase 是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,也就是说HBas ...
- const中的一些tricky的地方
1. 为了逻辑上的优化需要,const成员函数可能想修改某些成员变量,把这些成员变量定义为mutable可以绕过const的检查 2. 调用const和non-const的参数的函数可以重载 3. s ...
- centos 6+安装山逗斯骚尅特(本文内容来自都比更具帝)
系统支持:CentOS 6+,Debian 7+,Ubuntu 12+ 内存要求:≥128M 关于本脚本 一键安装 Shadowsocks-Python, ShadowsocksR, Shadowso ...
- 怎么在后台修改前台html页面的key、title、description
public void UpdateMeta(string title, string keyword, string desc) { ; i >= ; i--) { if (this.Head ...
- easydialog.js
/** * easyDialog v2.2 * Url : http://stylechen.com/easydialog-v2.0.html * Author : chenmnkken@gmail. ...
- HTML5 File 对象
实例说明1: <div class="container"> <input type="file" id="file" m ...
- AutoLayout(转)
转自 http://blog.sina.com.cn/s/blog_9564cb6e0101wv9o.html controller和View的责任分配: 1.View指定固有的content ...