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 ...
随机推荐
- 第一个VS2015 Xaramin Android项目
20170323新增:VS环境配置 打开VS,菜单栏选工具(Tools) 选项\ 一般有2个地方需要修改 1 2 新建第一个项目,什么都没有修改的情况下(已经配置好环境变量)直接运行,会发现如下错误: ...
- vue中遇到的一个点击展开或收起并且改变背景颜色的问题。
<template> <div class="expense-center"> <div class="fl expense-left&qu ...
- Django的学习进阶(二)———— name
一.问题: 在做完第一个demo的时候,由于只是基础学习,所以对于name的使用并不需要很熟练,也不用理解的很深.但是在做音乐网站的时候遇到了关于如何使用name的内容. 由于一个app中会使用到另一 ...
- 关于git 命令的一些事
克隆代码命令 http://www.yiibai.com/git/git_clone.html 关键:得实现新建本地仓库文件夹 ==> git clone 远程网址 git 上传主要代码:htt ...
- C#中Equals()和= =(等于号)区别
在这里,首先得告诉大家,在C#中,不管是 == ,还是 Equals() 我们都是可以重写的.所以,在具体选择使用两者时,还是得根据这两个方法的具体实现逻辑来选择. 值类型的比较 对于值类型来说,两者 ...
- 1119 Pre- and Post-order Traversals
Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...
- 1018 Public Bike Management
There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...
- 通过MFC设计一个简单的计价程序
1.实验目的 掌握使用MFC应用程序向导创建应用程序的方法. 掌握新建对话框资源的方法. 掌握生成对话框的方法. 2.实验内容 用应用程序创建一个默认的对话框应用程序,在对话框中能进入下一个对话框,在 ...
- 记一次安装VS2015后启动失败的修复过程
安装过程没有提示任何问题,然而启动vs时提示没有安装 .Net Framework 4.6,那就安装吧,但是安装 4.6 时却提示 Windows Moudle Installer 服务没有启动,于是 ...
- 骚年,看我如何把 PhantomJS 图片的 XSS 升级成 SSRF/LFR
这篇文章实在是太好了,我看了好几篇,所以极力推荐给大家 原文地址 http://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-ren ...