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 ...
随机推荐
- android string.xml前后加空格的技巧
方法1: <string name="password">密 码</string>  这个就代表着空格. 方法2:用\u0020代表空 ...
- LVS图解 ---阿里
LVS在大规模网络环境中的应用 1. SLB总体架构 LVS本身是开源的,我们对它进行了多方面的改进,并且也已开源-https://github.com/alibaba/LVS. 接下 ...
- Delpoyment assembly
遇见异常: java.lang.ClassNotFoundException: 原因:没有对tomcat进行依赖说明 解决: properties - Delpoyment assembly 将tom ...
- setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key delete.的问题
今天弄ios的sqlite数据库,程序写完后编译发现一个奇怪的问题,错误信息也不提示行号,只有如下信息: 一遍遍的查找代码也没有发现啥问题,后来在storyboard中找到了该错误的原因 原来是一个按 ...
- discuz! X3.2 自定义后台门户模块模板里的标签
这里只提供对源码的修改, 至于插件, 暂不考虑... 想在首页里展示一些自定义字段的内容, 奈何dz无此功能, 无奈去扒源码. 首先切到 source 文件夹下 1. 在 class/block/po ...
- Linux 基本命令(持续更新ing)
cd -> 变换路径 //文件一般存在/var/路径下,var为可修改存储盘 ls -> 列出所有隐藏文件与相关文件的属性 #ls -al ...
- FineUI属性的简单总结
.PageManager控件— 页面级别的控制(包括主题.语言 等等) 覆盖web.config中自定义结点的配置 EnablePageLoading:是否启用页面的第一次加载提示,默认居中显示加载图 ...
- 将sql数据库逆向生成PDM模型
由于接手的一个项目是公司前期外包出去的,所以到手的只有繁杂的代码,和数据库文件.由于是个新手,我需要一个数据字典来帮助我完成一些东西,所以我就想到从sql数据库转换出一个pdm模型的数据字典. 第一步 ...
- Dedecms调用文章发布时间的方法
在织梦系统中,有时候需要调用文章发布的时间,格式不同,代码不同.现总结织梦系统dedecms调用文章发布时间的几种方法. 11-20 样式 ([field:pubdate function='st ...
- Linq101-Ordering
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Orderin ...