惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
N
Netflix TechBlog - Medium
博客园 - 聂微东
Y
Y Combinator Blog
罗磊的独立博客
博客园_首页
小众软件
小众软件
有赞技术团队
有赞技术团队
爱范儿
爱范儿
F
Fortinet All Blogs
C
Check Point Blog
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏

博客园 - xingd

Minesweeper: 新版代码 Minesweeper: 代码结构改进 Minesweeper: GDI+ 初步实现 SQL Server 2008: Change Data Capture和Change Tracking SQL Server 2008: 常见缩写汇总 SQL Server 2008: Feb CTP 企业数据平台增强 SQL Server 2008: Feb CTP 关系数据库引擎增强 SQL Server 2008: Installation Center SQL Server 2008: Feb CTP 开放下载 Minesweeper: GDI+ Line Scratch Minesweeper: GDI+ 概述 Minesweeper: 索引 推荐.NET新书 忽略大小写的.NET脏字过滤算法 2007年度总结 再度提升!.NET脏字过滤算法 单独谈谈C#3.0 (再发).NET脏字过滤算法 (重发).NET脏字过滤算法
Minesweeper: GDI+ 综述
xingd · 2008-03-02 · via 博客园 - xingd

系列前面的两篇文章写的内容太简单了,本文对我理解的GDI+做一个综述,不再涉及代码细节。

GDI+中共有三种坐标,全局坐标、页面坐标和设备坐标。在GDI+的绘图调用中,传入的坐标位于全局坐标内,全局坐标经由全局变换转换到页面坐标,页面坐标再通过页面变换计算出设备坐标。

全局变换通过Graphics.Transform指定,其类型为Matrix。GDI+中的矩阵为3x3浮点矩阵,可以通过Matrix类的方法和属性来修改全局变换,也可以通过Graphics类上的TranslateTransform等方法来设定。页面变换通过Graphics类的PageUnit和PageScale来设定坐标单位和缩放倍数。

Point, Size, Rectangle是GDI+中常用的度量类型,并且都具有对应的float类型。Color则代表了32位A8R8G8B8的颜色。这一些都是基本的值类型,在实际使用的时候,要牢记其值类型的特征,类似o.Size.Width = 100的代码是没有作用的,因为.Width = 100是作用在了o.Size返回的临时变量上了,对于o的状态没有任何影响。

GraphicsPath,Region, Image则是GDI+中的一些资源性的类型,在使用完成后要尽快Dispose。GraphicsPath是一系列连续的线,包含直线和曲线。Region则表示封闭的一个区域,这个区域的边界可以由GraphicsPath来描述。Image表示一个图形,其中表现像素组成的位图的派生类为Bitmap,表现失量绘图指令组成的图形的派生类为Metafile。计算机屏幕最擅长展现两维的数据,因此Rectangle视为最简单的一种Region,并且应用面也非常广泛,计算包含整个Region的Rectangle也是非常常见的一种操作。

Brush用来填充一个Region,填充时可以使用单色填充,可以使用纹理(图片)填充,也可以使用线型填充和渐变填充,.NET中封充的GDI+提供了SolidBrush,TextureBrush,HatchBrush,LinearGradientBrush和PathGradientBrush类。Brush也是需要及时Dispose的,对于SolidBrush,可使用SystemBrushes和Brushes中的静态属性,获取预定义的Brush对表,免去Dispose的麻烦。

Pen是用来画线的,GDI+的线是有宽度的,也就有其内部区域,因此GDI+中的Pen需要一个Brush实例来构造。同样SystemPens和Pens中提供了预定义的单色Pen实例。

此外Font对象用来实现GDI+中不同字体的输出,Graphics类提供了一个MeasureString方法计算一段字符串绘制出来时占据的区域大小。

Graphics类提供了一系列Draw...方法,使用特定的Pen来绘制一定的形状,Fill...系列则使用特定的Brush来填充指定区域。

Graphics的Clip属性通过一个Region类的实例指定GDI+有效绘制区域,这是一个基础信息,Graphics的属性ClipBounds,IsClipEmpty,IsVisibleClipEmpty,VisibleClipBounds均基于Clip属性,并且为只读的。

CompositingQuality,InterpolationMode,PixelOffsetMode,SmoothingMode,TextRenderingHint用来控制绘制输出质量,质量越高,速度越慢。CompositingMode用来启用Alpha Blend,TextContrast控制文本输出时的Gamma值,RenderingOrigin用来控制8bit/16bit色深时的色彩拌动和Hatch Brush的起始点。

这些内容对之后的Minesweeper内容足够了,如果有问题,欢迎在评论中提出。