一:基础定义

 #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的使用的更多相关文章

  1. C# 使用 GDI+ 画图

    最近做一个微信公众号服务,有一些简单的图片处理功能.主要就是用户在页面操作,前端做一些立刻显示的效果,然后提交保存时后端真正修改原图. 我们的后端是 ASP.NET,也就是 C# 语言了,C# 本身处 ...

  2. Android中利用画图类和线程画出闪烁的心形

                                                        本文讲解主要涉及的知识点: 1.线程控制 2.画图类 3.心形函数 大家先看图片: <ig ...

  3. C++MFC编程笔记day06 MFC向导、MFC画图类使用

    MFC画图    MFC画图类包含画图设备类和画图对象类    1 画图设备类      CDC类-父类是CObject,封装的是一般的画图设备,比如:显示器,            打印机等.    ...

  4. Graphics 导出图片使用【这个主要是画图类图的使用,记录一下】

    /// <summary> /// 导出信令流程矢量图 /// </summary> /// <param name="signalFlowInfos" ...

  5. C# GDI+编程之Graphics类

    GDI+是GDI的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像.数学仿真等. Graphics类是GDI+的核心, ...

  6. WinForm GDI编程:Graphics画布类

    命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using System.Drawing.Drawing2D;//提供高级的二维和矢量图像功能 using ...

  7. C#-gdi画图,双缓冲画图,Paint事件的触发---ShinePans

    在使用gdi技术画图时,有时会发现图形线条不够流畅,或者在改变窗口大小时会闪烁不断的现象.(Use DoubleBuffer to solve it!)                         ...

  8. c# GDI画图 双缓冲画图分析

    双缓冲绘图分析  1.Windows 绘图原理  我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是“画”出来的.这时的屏幕,就相当于一块黑板,而 Windows ...

  9. Android 画图类View与SurfaceView之学习

    在开发游戏开发中,android相应的提供了几个重要的模块: 1.显示界面的视图:  Android 提供 View 和 SurfaceView 2.控制游戏整体结构: android 提供 Acti ...

随机推荐

  1. android string.xml前后加空格的技巧

    方法1: <string name="password">密    码</string>&#160 这个就代表着空格. 方法2:用\u0020代表空 ...

  2. LVS图解 ---阿里

    LVS在大规模网络环境中的应用   1. SLB总体架构   LVS本身是开源的,我们对它进行了多方面的改进,并且也已开源-https://github.com/alibaba/LVS.     接下 ...

  3. Delpoyment assembly

    遇见异常: java.lang.ClassNotFoundException: 原因:没有对tomcat进行依赖说明 解决: properties - Delpoyment assembly 将tom ...

  4. setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key delete.的问题

    今天弄ios的sqlite数据库,程序写完后编译发现一个奇怪的问题,错误信息也不提示行号,只有如下信息: 一遍遍的查找代码也没有发现啥问题,后来在storyboard中找到了该错误的原因 原来是一个按 ...

  5. discuz! X3.2 自定义后台门户模块模板里的标签

    这里只提供对源码的修改, 至于插件, 暂不考虑... 想在首页里展示一些自定义字段的内容, 奈何dz无此功能, 无奈去扒源码. 首先切到 source 文件夹下 1. 在 class/block/po ...

  6. Linux 基本命令(持续更新ing)

    cd -> 变换路径                        //文件一般存在/var/路径下,var为可修改存储盘 ls -> 列出所有隐藏文件与相关文件的属性   #ls -al ...

  7. FineUI属性的简单总结

    .PageManager控件— 页面级别的控制(包括主题.语言 等等) 覆盖web.config中自定义结点的配置 EnablePageLoading:是否启用页面的第一次加载提示,默认居中显示加载图 ...

  8. 将sql数据库逆向生成PDM模型

    由于接手的一个项目是公司前期外包出去的,所以到手的只有繁杂的代码,和数据库文件.由于是个新手,我需要一个数据字典来帮助我完成一些东西,所以我就想到从sql数据库转换出一个pdm模型的数据字典. 第一步 ...

  9. Dedecms调用文章发布时间的方法

    在织梦系统中,有时候需要调用文章发布的时间,格式不同,代码不同.现总结织梦系统dedecms调用文章发布时间的几种方法.   11-20 样式 ([field:pubdate function='st ...

  10. Linq101-Ordering

    using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Orderin ...