GDI+学习笔记之--------------------------------------------GDI+的基础知识
本节主要主要是对GDI+知识的一些基本的介绍。
Microsoft Windows GDI+ 是Windows XP和Windows Server 2003操作系统的子系统,它负责在屏幕和打印机上显示信息。GDI+是一个应用程序编程接口(API),它由一组C++类实现。
顾名思义,GDI+是对于GDI的继承,后者包含于早期的Windows版本中。Windows XP 或者 Windows Server 2003支持GDI以保持对现有程序的兼容性,但是编写新程序的开发者应该使用GDI+来实现他们所有的图形需求,因为GDI+不仅优化了大部分GDI性能而且提供了更多特性。
一个图形设备接口,比如GDI+,允许应用程序开发者将信息显示在显示器或者打印机上,而无须考虑该显示设备的详细情况。应用程序开发者调用GDI+类所提供的方法,而这些方法又依次适当地调用特定设备驱动程序。GDI+使得应用程序和图形硬件隔离开来,得益于此,开发者因而可以创建设备无关的应用程序。
(1)Microsoft Windows GDI+服务分为以下3个主要部分。
二维矢量图形:矢量图形由图元(比如线条、曲线和图形)组成,它们由一系列坐标系统的点集组成。例如,一条直线可以由它的两个端点所确定,一个矩形可以通过给出它的左上角点的位置加上它的宽度、高度来确定。一个简单的路径可以由一个由直线连接而成的点数组来描述。一条贝塞尔线条是一个由4个控制点所描述的高级曲线。GDI+提供了用于存储这些图元本身信息的类、如何绘制这些图元信息的类及实际绘制这些图元的类。例如,Rect类存储一个矩形的尺寸位置;Pen类存储线条颜色、线条宽度及线条样式等信息;而Graphics类则提供绘制线条、矩形、路径和其他图形的方法。同时,有几个Brush类还用于存储有关闭合图形和路径内部填充颜色和图案的信息。
图像:某些图片很难或者不可能采用矢量图形技术来显示。比如,工具栏按钮图片和图标就很难通过一系列线条和曲线来描述。一张拥挤的棒球馆的高分辨率的数码照片,更难采用矢量技术来创建。这种类型的图像采用位图进行存储,即由表示屏幕上独立点的颜色的数字型数组所组成。用于存储位图信息的数据结构往往比矢量图形要复杂得多,因此出于此种原因,GDI+中提供了好几种类。类似的类比如CachedBitmap,用于存储一张内存图片,供快速存取和显示用。
排版:排版关系到多种字体、尺寸和样式文字的显示。GDI+提供了对这项复杂任务的支持。新的特性中包括了子像素抗锯齿功能,它使得在液晶显示屏上可以显示更加平滑的显示文本。
(2)GDI+的成员类与函数。
Microsoft Windows GDI+包含大约40个类、50个枚举和6个结构体。同时也有少数几个函数不属于任何类。Graphics类是整个GDI+接口的核心,它是实际进行线条、曲线、图形、图像和文本绘制的类。
多数类和Graphics类配合使用。例如,Graphics::DrawLine()方法接受一个点传给一个Pen对象,该对象保存了即将绘制的线条属性(颜色、宽度、虚线类型及其他)。Graphics::FillRectangle()方法接受一个点传给LinearGradientBrush对象,该对象协同Graphics对象实现矩形的渐变色填充。Font和StringFormat对象影响到Graphics对象绘制文本的方式。Matrix对象用于存储和生成一个Graphics对象的世界变换矩阵,用于旋转、缩放和翻转图像。
有些类是主要用作数据类型结构体。这些类中大多数(例如Rect、Point和Size类)用于普通目的。其他的则用于特殊目的,被看作是辅助类。例如,BitmapData类是Bitmap类的辅助类,PathData类是GraphicsPath类的辅助类。GDI+同时定义了少数几个结构体用于组织数据。例如,ColorMap结构体存储一对颜色对象,构成了一个颜色转换表的入口 项目。
GDI+定义了数个枚举常量,它们是相关常数的集合。例如,LineJoin枚举包含了LineJoinBevel、LineJoinMiter和 LineJoinRound几个元素,表示两根线条的连接方式。GDI+提供了少数几个不属于任何类的函数,其中的两个是GdiplusStartup()和GdiplusShutdown()函数。在进行任何GDI+调用之前调用GdiplusStartup()函数,在结束GDI+调用的时候调用GdiplusShutdown()函数。