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 ...
随机推荐
- win7启动时怎么自动进入桌面
1.按Win+R组合键,打开“运行”对话框.(Win是键盘下方左右两边的两个印有微软标志的键) 2.Windows XP/2003/2008/2008R2输入"control userpas ...
- @Scheduler与cron
- 1.2 eigen中矩阵和向量的运算
1.2 矩阵和向量的运算 1.介绍 eigen给矩阵和向量的算术运算提供重载的c++算术运算符例如+,-,*或这一些点乘dot(),叉乘cross()等等.对于矩阵类(矩阵和向量,之后统称为矩阵 类) ...
- c#new和override
new是覆盖父类的虚方法,当用子类构造方法构造父类对象时调用该虚方法调的是父类的方法(视为子类屏蔽了父类的方法,没实现,还是调用父类的方法). override是重写父类的虚方法,当用子类构造方法构造 ...
- 第38章:MongoDB-集群--Replica Sets(副本集)---多机的搭建
①机器环境 182.48.115.236 master-node(主节点) 182.48.115.237 slave-node1(从节点) 182.48.115.238 slave- ...
- hdu 1290_献给杭电五十周年校庆的礼物
Description 或许你曾经牢骚满腹或许你依然心怀忧伤或许你近在咫尺或许你我天各一方 对于每一个学子母校 永远航行在生命的海洋 今年是我们杭电建校五十周年,这是一个值得祝福的日子.我们该送给母校 ...
- attempt to open datawindow failed@安装两个PB软件
attempt to open datawindow failed@安装两个PB软件 安装了不同版本的PB软件后,默认打开方式为后一个安装的版本. 如果想改为第一个安装版本,在“右键”——>”打 ...
- HAProxy出现"远程主机强迫关闭了一个现有的连接 " 的错误及解决
使用haproxy作为sql server 的负载均衡器. 使用了文档中的示例配置项: timeout client 50s timeout server 50s 采用这个配置项,有时会 ...
- NET Core微服务之路:简单谈谈对ELK,Splunk,Exceptionless统一日志收集中心的心得体会
前言 日志,一直以来都是开发人员和运维人员最关心的问题.开发人员可通过日志记录来协助问题定位,运维人员可通过日志发现系统隐患,故障等定位问题.如果你的系统中没有日志,就像一个断了线的风筝,你永远不知道 ...
- Bashu2445 -- 【网络流24题-10】餐巾问题
2445 -- [网络流24题-10]餐巾问题 Description 一个餐厅在相继的n天里,每天需要用的餐巾数不尽相同.假设第i天需要ri块餐巾(i=1,2,…,n).餐厅可以购买新的餐巾,每块餐 ...