C# GDI+编程之Graphics类
GDI+是GDI的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像、数学仿真等。
Graphics类是GDI+的核心,它提供将对象绘制到显式设备的方法。Graphics类封装了绘制直线、曲线、圆形、图像和文本的方法,是一切GDI+操作的基础类。在绘图之前,必须在指定的窗体上创建一个Graphics对象,才能调用Graphics类的方法画图。
一、创建Graphics类对象的的三种方法
1.1 Paint事件
在窗体或控件的Paint事件中创建,将其作为PaintEventArgs的一部分。在为控件创建绘制代码时,通常会使用此方法。
例如,在Paint事件中创建Graphics对象:
private void Form1_Paint(object sender, PaintEventArgs e) //窗体的Paint事件
{
Graphics g = e.Graphics; //创建Graphics对象
}
1.2 CreateGraphics方法
调用窗体或控件的CreateGraphics方法可以获取对Graphics对象的引用,该对象表示控件或窗体的绘图画面。如果在已存在的窗体或控件身上绘图,应该使用此方法
例如,在窗体的Load事件中,通过CreateGraphics方法创建Graphics对象
private void Form1_Load(object sender, EventArgs e) //窗体的Load事件
{
Graphics g; //声明一个Graphics对象
g = this.CreateGraphics();
}
1.3 Graphics.FromImage方法
由从Image继承的任何对象创建Graphics对象,调用Graphics.FromImage方法即可,该方法在需要更改已存在的图像时十分有用,例:
private void Form1_Load(object sender, EventArgs e)
{
Bitmap mbit = new Bitmap(@"C:\test.bmp");
Graphics g = Graphics.FromImage(mbit);
}
二、Graphics类的属性
| Clip |
获取或设置 Region,它限定此 Graphics 的绘图区域。 |
| ClipBounds |
获取一个 RectangleF 结构,该结构限定此 Graphics 的剪辑区域。 |
| CompositingMode |
获取一个值,该值指定如何将合成图像绘制到此 Graphics。 |
| CompositingQuality |
获取或设置绘制到此 Graphics 的合成图像的呈现质量。 |
| DpiX |
获取此 Graphics 的水平分辨率。 |
| DpiY |
获取此 Graphics 的垂直分辨率。 |
| InterpolationMode |
获取或设置与此 Graphics 关联的插补模式。 |
| IsClipEmpty |
获取一个值,该值指示此 Graphics 的剪辑区域是否为空。 |
| IsVisibleClipEmpty |
获取一个值,该值指示此 Graphics 的可见剪辑区域是否为空。 |
| PageScale |
获取或设置此 Graphics 的世界单位和页单位之间的比例。 |
| PageUnit |
获取或设置用于此 Graphics 中的页坐标的度量单位。 |
| PixelOffsetMode |
获取或设置一个值,该值指定在呈现此 Graphics 的过程中像素如何偏移。 |
| RenderingOrigin |
为抵色处理和阴影画笔获取或设置此 Graphics 的呈现原点。 |
| SmoothingMode |
获取或设置此 Graphics 的呈现质量。 |
| TextContrast |
获取或设置呈现文本的灰度校正值。 |
| TextRenderingHint |
获取或设置与此 Graphics 关联的文本的呈现模式。 |
| Transform |
获取或设置此 Graphics 的几何世界转换的副本。 |
| VisibleClipBounds |
获取此 Graphics 的可见剪辑区域的边框。 |
注:详情参考MSDN对Graphics属性的说明
三、Graphics类的常用方法及说明
| 方法 | 描述 |
| Clear | 清除整个绘图面并以指定背景色填充 |
| Dispose | 释放由此Graphics对象使用的所有资源 |
| DrawArc | 绘制一段弧线,它表示由一对坐标、宽高指定的椭圆部分 |
| DrawBezier | 绘制由四个Point结构定义的贝塞尔样条 |
| DrawBeziers | 从Point结构的数组绘制一系列贝塞尔样条 |
| DrawCurve | 绘制经过一组指定的Point结构的基数样条 |
| DrawEllipse | 绘制一个由一对坐标、宽度和高度指定的椭圆 |
| DrawIcon | 在指定坐标处绘制由指定的Icon对象表示的图像 |
| DrawImage | 在指定的位置并且按原始大小绘制指定的Image对象 |
| DrawLine | 绘制一条连接由坐标对象指定的两个点的线条 |
| DrawLines | 绘制一列连接一组Point结构的线段 |
| DrawPath | 绘制GraphicsPath对象 |
| DrawPie | 绘制一个扇形,该扇形由一个坐标对象,宽度和高度,以及两条射线所指定的椭圆指定 |
| DrawPolygon | 绘制由一组Point结构定义的多边形 |
| DrawRectangle | 绘制由坐标对。宽度和高度指定的矩形 |
| DrawRectangles | 绘制一系列由Rectangle结构指定的矩形 |
| DrawString | 在指定位置并且用指定的Brush和Font对象绘制指定的文本字符串 |
| FillEllipse | 填充边框所定义的椭圆内部,该边框由一对坐标、一个高度和一个宽度指定 |
| FillPath | 填充GraphicsPath对象的内部 |
| FillPie | 填充扇形内部 |
| FillPolygon | 填充多边形内部 |
| FillRectangle | 填充由一对坐标、一个宽度和一个高度指定的矩形内部 |
| FillRectangles | 填充由Rectangle结构指定的一些列矩阵的内部 |
| FillRegion | 填充Region对象的内部 |
| FromImage | 从指定的Image对象创建行的Graphics对象 |
| Save | 保存此Graphics对象的当前状态,并且GraphicsState对象标识保存的状态 |
注:完整的Graphics方法请查看MSDN对Graphics方法的说明
由于时间有限,后续还会对GDI+ 相关内容进行更新
C# GDI+编程之Graphics类的更多相关文章
- [深入浅出WP8.1(Runtime)]网络编程之HttpClient类
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- 网络编程之HttpClient类(转)
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- GUI异步编程之BackgroundWorker类
GUI编程中,经常需要另建一个线程,在后台运行以完成某项工作,并不时地与界面主线程进行通信,以改变界面显示.BackgroundWorker类为此而生. BackgroundWorker类的主要成员: ...
- Java并发编程之ThreadLocal类
ThreadLocal类可以理解为ThreadLocalVariable(线程局部变量),提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回当 ...
- C++图形编程之graphics.h头文件
graphics.h是Turbo C的针对DOS下的一个C语言图形库,如果要用的话应该用TC的编译器来编译,但是如果需要在vc及vs环境中使用graphics.h的功能,则可以选择下载EasyX图形库 ...
- 并发编程之 Thread 类过期方法和常用方法
前言 在 Java 刚诞生时,Thread 类就已经有了很多方法,但这些方法由于一些原因(有一些明显的bug或者设计不合理)有些已经废弃了,但是他们的方法名却是非常的好,真的是浪费.我们在进行并发必编 ...
- winform网络编程之TcpClient类,TcpListener类和UdpClient类
TcpClient类和TcpListener类 (1)TcpClient的用途: 用于在同步阻止模式下通过网络来链接.发送和接受流数据,在此情况下,必须有侦听此连接的请求,而侦听的任务就交给TcpLi ...
- IO编程之File类
File类是java.io包下代表与平台无关的文件及目录,程序操作文件和目录都可以通过File类来完成.值得指出的是,不管是文件还是目录都可以通过File类来操作.File能新建.删除.重命名文件和目 ...
- Qt编程之QImage类小结
最近用Qt做图像处理,以下references是需要用到的 references: http://blog.csdn.net/lyc_daniel/article/details/9193881 ht ...
随机推荐
- var
在函数中,使用var声明的变量,为局部变量,只能在函数内部访问. 不使用var声明的变量,为全局变量,在函数外边也能访问. 没有var的情况 <script type="text/ja ...
- java技术突破要点
一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...
- 前端vue框架 脚手架
1.安装node.js最新版本2.cmd下输入 1.node -v得到版本号检测是否安装成功 版本号要在6.9以上 2.npm -v 版本号要在3.10以上3.安装脚手架 1.npm install ...
- Visual Studio 2013 配置多个Release版本,并为每个版本配置预编译的宏
最近开发过程中,需要将同一份工程编译成两个版本,分别为ReleaseA和ReleaseB. ReleaseB比ReleaseA少了部分功能,所以希望在编译的时候,根据不同的版本编译工程中相应的代码. ...
- 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调
[源码下载] 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调 作者: ...
- Kaldi单音素模型 训练部分
在Kaldi中,单音素GMM的训练用的是Viterbi training,而不是Baum-Welch training.因此就不是用HMM Baum-Welch那几个公式去更新参数,也就不用计算前向概 ...
- Android开发 - 掌握ConstraintLayout(二)介绍
介绍 发布时间 ConstraintLayout是在2016的Google I/O大会上发布的,经过这么长时间的更新,现在已经非常稳定. 支持Android 2.3(API 9)+ 目前的Androi ...
- 发现CVE-2018-11512-wityCMS 0.6.1 持久型XSS
CMS(内容管理系统)很适合被用来做代码审计,尤其是现在CMS系统越来越流行,很多人愿意使用CMS搭建自己的项目.由于大部分CMS是一种开源项目,所以对于CMS的审计属于白盒测试,白盒测试让我们可以发 ...
- 2.SlidingMenu(侧边栏效果)
> 使用步骤库:别的程序可以用它的方法.图片. 下载的其中一个框架的例子是没有actionBar的,example_update 引入出错可能是俩个v4包冲突了,删掉工程里的一个,不要删了库里的 ...
- .NET手记-HttpClient解析GB2312乱码问题
最近为App的服务器端卸了个爬虫程序,输出结果时发现出现乱码现象,尝试使用了几个方案发现效果并不太好,最后发现了一个很简单的用法. var result = await client.GetByteA ...