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

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 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内容足够了,如果有问题,欢迎在评论中提出。