WindowsGDI_的研究与应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows G DI+的研究与应用
陈本峰,苏 琦
(中国科学技术大学电子工程与信息科学系,安徽合肥230027)
摘 要:G DI是W indows图形图像编程的主要接口,但是其功能贫乏,使用复杂给程序员带来很多的不便。G DI+的出现使这一现象大为改观,它是微软的.Net Framew ork的一个重要组成部分,大大增强了W indows的图形图像开发接口,同时它也改变了传统的G DI编程模式,使开发工作大幅度简化。首先从理论角度介绍G DI+的种种优越特性,再从代码开发的角度说明如何来使用G DI+。
关键词:G DI;G DI+;图形图像;W indows
中图法分类号:TP311111 文献标识码:A 文章编号:100123695(2003)0320056204
Research and Application of Windows G DI+
CHE N Ben2feng,S U Qi
(Dept.o f Electronic Engineering&Information Science,Univer sity o f Science&Technology o f China,H e fei Anhui230027,China)
Abstract:G DI is the main inter face of W ind ows graphic programming,but it is low functional and tedious.W ith the G DI+coming up,this environment change greatly,the G DI+is an im portant com ponent of M icros Framew ork,which n ot only b oosts up the inter face of W ind ows graphic programming,but als o changes the programming m ode of G DI s oftware development and greatly sim plifies the w orkload of coding.This paper firstly presents the various excellent characteristic of the G DI+on theory aspect,and then intro2 duces h ow to utilize the G DI+.
K ey w ords:G DI;G DI+;G raphic;W ind ows
1 引言
众所周知,在W indows下进行图形图像程序的开发是一件非常烦琐的事,比如显示一幅位图(BMP),需要装入位图、读取位图文件格式头信息、启用设备环境、位传输等等,如果是J PEG,G IF等图像,还需要编写复杂冗长的解码算法,还比如进行各种图像变换、图像处理,以及在动画中实现Alpha混合等图像特效,都需要做大量的代码工作。这些都是W indows G DI功能的局限性所在。
随着G DI+的出现这一切大为改观,它使W indows 下的图形图像程序开发发生了一次重大的变革。G DI+是W indows XP操作系统的子系统,负责在屏幕和打印机上显示信息。顾名思义,G DI+是G DI(W indows早期版本提供的图形设备接口)的后续版本。G DI+是一种应用程序编程接口(API),通过一套部署为托管代码的类来展现。这套类被称为G DI+的“托管类接口”。应用程序的程序员可利用G DI+这样的图形设备接口在屏幕或打印机上显示信息,而不需要考虑特定显示设备的具体情况。应用程序的程序员调用G DI+类提供的方法,而这些方法又反过来相应地调用特定的设备驱动程序。G DI+将应用程序与图形硬件隔离,而正是这种隔离允许开发人员创建设备无关的应用程序。
G DI+主要提供了以下三个功能服务:
(1)二维矢量图形
矢量图形包括坐标系统中的系列点指定的绘图基元(如直线、曲线和图形)。例如,直线可通过它的两个端点来指定,而矩形可通过确定其左上角位置的点并给出其宽度和高度的一对数字来指定。简单路径可由通过直线连接的点的数组来指定。贝塞尔样条是由四个控制点指定的复杂曲线。
G DI+提供了存储基元自身相关信息的类(结构)、存储基元绘制方式相关信息的类,以及实际进行绘制的类。例如,Rectangle结构存储矩形的位置和尺寸;Pen类存储有关线条颜色、线条粗细和线型的信息;而G raphics 类具有用于绘制直线、矩形、路径和其它图形的方法。还有几种Brush类,它们存储有关如何使用颜色或图案来填充封闭图形和路径的信息。
用户可以在图元文件中记录矢量图像(图形命令的序列)。G DI+提供了M etafile类,可用于记录、显示和保存图元文件。M etafileHeader和M etaHeader类允许您检查图元文件头中存储的数据。
(2)图像处理
某些种类的图片很难或者根本无法用矢量图形技
收稿日期:2002206207;修返日期:2002207226
术来显示。例如,工具栏按钮上的图片和显示为图标的
图片就难以指定为直线和曲线的集合。拥挤的棒球运动场的高分辨率数字照片会更难以使用矢量技术来制作。这种类型的图像可存储为位图,即代表屏幕上单个点颜色的数字数组。G DI +提供了Bitmap 类,可用于显示、操作和保存位图。
(3)文字显示版式就是使用各种字体、字号和样式来显示文本。G DI +为这种复杂任务提供了大量的支持。G DI +中的新功能之一是子像素消除锯齿,它可以使文本在LC D 屏幕上呈现时显得比较平滑。
本文首先介绍G DI +的几个主要新增的特性及其功能,然后说明它给W indows 图形图像程序的开发模式带来的变化,最后给出代码实例,介绍如何在VC ++6.0中使用G DI +进行程序开发。
2 G DI +的新增特性
(1)渐变的画刷(G radient Brushes )
通过提供用于填充图形、路径和区域的线性渐变画笔和路径渐变画笔,G DI +扩展了G DI 的功能。渐变画笔还可用于绘制直线、曲线和路径。线性渐变画笔可用于使用颜色来填充图形,画笔在图形中移动时,颜色会逐渐改变。例如,假定通过指定图形左边为蓝色、右边为绿色创建了一个水平渐变画笔。当用水平渐变画笔填充该图形时,随着画笔从图形的左边移至右边,颜色就会由蓝色逐渐变为绿色。用类似方法定义的垂直渐变画笔填充的图形,颜色从上到下变化。图1显示了用水平渐变画笔填充的椭圆和用斜式渐变画笔填充的区域。
用路径渐变画笔填充图形时,可选择不同的方法来指定当从图形的一部分至另一部分移动画笔时颜色的变化方式。一种选择是指定中心颜色和边缘颜色,在从图形中间向外边缘移动画笔时,像素逐渐从一种颜色变化到另一种颜色。图2显示了用路径渐变画笔填充的路径(该路径是用一对贝塞尔样条创建的)。
(2)基数样条函数(Cardinal S pines )G DI +支持在G DI 中不支持的基数样条。基数样条是一连串单独的曲线,这些曲线连接起来形成一条较大的曲线。样条由点的数组指定,并通过该数组中的每一个点。基数样条平滑地(没有锐角)通过数组中的每一个点,因此,比通过连接直线创建的路径更精准。图3显示了两个路径:一个以基数样条的形式创建;另一个通过连接直线创建
。
(3)持久的路径对象(Persistent Path Objects )
在G DI 中,路径属于设备上下文,并且会在绘制时被毁坏。利用G DI +,绘图由G raphics 对象执行,可以创
建并维护几个与G raphics 对象分开的G raphicsPath 对象。绘图操作不会破坏G raphicsPath 对象,因此可以多次使用同一个G raphicsPath 对象来绘制路径。
(4)变形和矩阵对象(T rans formations &M atrix Object )G DI +提供了M atrix 对象,它是一种可以使变形(旋转、平移等)简易灵活的强大工具。矩阵对象与所变形对象联合使用。例如,G raphicsPath 对象具有T rans form 方法,此方法接收M atrix 对象作为参数。单一的3×3矩阵可存储一种变形或一个变形序列。图4显示了一个路径在执行两种变形前后的情况。
(5)可伸缩区域(Scalable Regions )G DI+通过对区域的支持极大地扩展了G DI 。在G DI 中,区域存储在设备坐标中,而且,可应用于区域的惟一变形是平移。G DI +在全局坐标中存储区域,且允许区域发生任何可存储在变形矩阵中的变形(如缩放)。图5显示一个区域在执行三种变形(缩放、旋转和平移)前后的情况。
(6)Alpha 混合(Alpha Blending )
在图5中,可以在变形区域(用蓝色阴影画笔填充)中看到未变形区域(用红色填充)。这是由G DI +支持的Alpha 混合实现的。使用Alpha 混合,可以指定填充颜色的透明度。透明色与背景色相混合———填充色越透明,透出的背景色就越多。图6显示四个用相同颜色(红色)填充、但透明层次不同的椭圆
。
(7)丰富的图像格式支持
G DI +提供Image ,Bitmap 和M etafile 类,可以用不同的格式加载、保存和操作图像。G DI +支持BMP ,G IF ,J PEG,EXIF ,PNG,TIFF ,IC ON ,W MF ,E MF 共九种常用的W indows 图像格式。
3 编程模式的改变
G DI +的出现也使基于G DI 的编程模式产生了比较大的变化,主要体现在以下几个方面:
(1)设备上下文、句柄和图形对象
如果您使用过G DI (W indows 的以前版本中包括的图形设备接口)编写程序,就会熟悉设备上下文的知识。设备上下文是W indows 使用的一种结构,用于存储与特殊显示设备的功能和指定如何在该设备上绘制项目的属性相关的信息。用于视频显示的设备上下文还与显示的特定窗口关联。首先,获得一个设备上下文的句柄(H DC ),然后将该句柄作为参数传递至实际进行绘制的G DI 函数。还可将此句柄作为参数传递给获取或设置设备上下文属性的G DI 函数。
使用G DI +,不需要再使用句柄或设备上下文,而是只需创建一个G raphics 对象,然后用熟悉的面向对象样式myG raphicsObject.Draw Line (参数)中调用其方法。正