windows编程技术14GDI+编程基础

上传人:新** 文档编号:469755855 上传时间:2022-08-03 格式:DOC 页数:77 大小:2.28MB
返回 下载 相关 举报
windows编程技术14GDI+编程基础_第1页
第1页 / 共77页
windows编程技术14GDI+编程基础_第2页
第2页 / 共77页
windows编程技术14GDI+编程基础_第3页
第3页 / 共77页
windows编程技术14GDI+编程基础_第4页
第4页 / 共77页
windows编程技术14GDI+编程基础_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《windows编程技术14GDI+编程基础》由会员分享,可在线阅读,更多相关《windows编程技术14GDI+编程基础(77页珍藏版)》请在金锄头文库上搜索。

1、第14章 GDI+编程基础GDI+(Graphics Device Interface Plus,图形设备接口加)是Windows XP及以上版本操作系统的图形子系统,也是传统.NET框架的重要组成部分和窗体绘图的主要工具,负责在屏幕和打印机上绘制图形图像和显示信息。顾名思义,GDI+是Windows早期版本所提供的图形设备接口GDI的后续版本,是建立在GDI之上的一个高层图形子系统。GDI+是一种API,分别通过一套C+类和一套部署为托管代码的类来展现,这两套类分别被称为GDI+的“C+封装”和“托管类接口”。GDI+不但在功能上比GDI要强大很多,而且在代码编写方面也更简单,因此会成为Wi

2、ndows图形图像程序开发的主要工具之一。由于篇幅所限,本书只简单介绍利用MFC进行GDI+编程的一些基本内容,也不讲GDI+的API编程。基于GDI+托管封装的.NET窗体绘图,将在第18章中再介绍。对GDI+编程有兴趣的读者,可以参考如下图书:l 周鸣杨、赵景亮. 精通GDI+编程. 清华大学出版社,2004年2月(C+ / MFC)。l Mahesh Chand(韩江等译). GDI+图形程序设计. 电子工业出版社,2005年3月(C# / .NET)。本章将介绍GDI+的结构和组成,讨论GDI+的几个主要新增特性与功能,说明GDI+给Windows图形图像程序的开发模式带来的变化。介绍

3、C+封装的GDI+ API的具体使用方法,主要讲解二维矢量图形绘制和文字显示等基本内容。GDI+的路径、区域、变换、图像处理和图元文件等高级编程内容,安排在下一章介绍。14.1 GDI+的结构与组成本节先介绍GDI+的体系结构,再列出C+封装的GDI+ API的具体组成。14.1.1 GDI+的结构GDI+是建立在GDI之上的一种高层图形子系统,基础是GDI+平面API,有C+和托管两种封装。注意,虽然GDI+是GDI的发展,但是GDI+并非设计来替代GDI的,它不能独立工作,底层还得靠GDI实现。1GDI+的体系结构GDI+与GDI一样,都具有设备无关性。而且GDI+是建立在GDI之上的一种

4、高层接口,供Windows API和.NET框架调用。与GDI类似,GDI+主要提供了二维矢量图形、图像处理和文字显示版式三类功能(参见图14-1),只是GDI+比GDI的功能更强大,且编程模式发生了改变。设备驱动程序计算机硬件GDI+引擎GDI二维矢量图形图像文字.NET框架Win32/64 (C+)图14-1 GDI+的体系结构2GDI+平面API与封装GDI+提供(expose)了一个平面(flat)API,它包含大约600个函数,被实现在Gdiplus.dll中,声明在Gdiplusflat.h内。这些函数被包装到了前面讨论过的GDI+ API的54个C+类的集合之中。作为C+封装的替

5、代方案,微软.NET框架提供了GDI+的一个托管代码封装类集,包含大约60个类、50个枚举和8个结构。它们分属于下列命名空间:System.Drawing、System.Drawing.Drawing2D、System.Drawing.Imaging、System.Drawing.Text和System. Drawing.Printing。GDI+的平面API与其C+及托管封装的关系如图14-2所示。DllExportsSystem.Drawing.dllGdiplusGdiplus.hafxwin.hC+封装(MFC) C+封装托管代码封装设备驱动程序计算机硬件(显示器、打印机等图形设备)G

6、DI APIGDI+平面APIC+C#、VB、F#GDI+ APIGDI+托管类接口GDI类与结构Gdi32.dllWinGDI.hGdiplus.dllGdiplusFlat.h图14-2 GDI+的封装与使用14.1.2 GDI+的组成GDI+的C+封装,包含了54个类、12个全局函数、(6类)226个图像常量、55种枚举和19种结构。GDI+的.NET托管封装,则包含了大约60个类、50个枚举和8个结构。这两种封装都是基于GDI+平面API的。本小节只介绍GDI+的C+封装,GDI+的托管封装将在第18章的.NET窗体绘图中有所涉及。1类GDI+的C+封装中共有54个类,核心类是Grap

7、hics,它是实际绘制直线、曲线、图形、图像和文本的类。许多其它GDI+类是与Graphics类一起使用的。例如,DrawLine方法接收Pen对象,该对象中存有所要绘制的线条的属性(颜色、宽度、虚线线型等)。FillRectangle方法可以接收指向LinearGradientBrush对象的指针,该对象与Graphics对象配合工作来用一种渐变色填充矩形。Font和StringFormat对象影响Graphics对象绘制文本的方式。Matrix对象存储并操作Graphics对象的仿射变换旋转、缩放和翻转图像。GDI+还提供了用于组织图形数据的几种结构类(例如Rect、Point和Size)

8、。而且,某些类的主要作用是结构化数据类型。例如,BitmapData类是Bitmap类的帮助器,PathData类是GraphicsPath类的帮助器。图14-3是GDI+ API类的层次结构图。注意:在GDI+、.NET、C#、Java和VB中,都把类的成员函数称为方法。当我们在C+中,使用GDI+和.NET框架类库中的类和功能时,也常常将其函数改称为方法。GdiplusBaseGraphicsGraphicsPathGraphicsPathIteratorPenBrushSolidBrushHatchBrushTextureBrushLinearGradientBrushPathGradi

9、entBrushImageBitmapMetafileCustomLineCapAdjustableArrowCapCachedBitmapImageAttributesFontCollectionInstalledFontCollectionPrivateFontCollectionStringFormatRegionFontFontFamilyMatrixPointPointFSizeSizeFRectRectFColorEffectBlurBrightnessContrastColorBalanceColorCurveColorLUTColorMatrixEffectHueSaturat

10、ionLightnessLevelsRedEyeCorrectionSharpenTintImageItemDataBitmapDataMetafileHeaderPropertyItemEncoderParameterEncoderParametersImageCodecInfoPathDataCharacterRange独立类绘图类效果类图14-3 GDI+类的层次结构2全局函数GDI+命名空间中的全局函数有12个,常用的有如下两个(其余的大多数与图像相关):l 关闭GDI+:GdiplusShutdown(清除GDI+所使用的资源)。l 启动GDI+:GdiplusStartup(初始化

11、GDI+)。3常量、枚举和结构GDI+中有6类共计226个图像常量(都被定义在头文件GdiplusImaging.h中),包括图像文件格式常量11个(如ImageFormatBMP、ImageFormatGIF、ImageFormatJPEG、ImageFormatPNG、ImageFormatTIFF等)、图像帧维常量2个、图像编码器常量13个、图像像素格式常量14个、图像特性标志类型9个、图像特性标志217个。GDI+定义了55种枚举类型,它们都是相关常数的集合。例如:PenType、BrushType、DashStyle、ImageType、LineCap、FillMode、ImageF

12、lags等。GDI+ API中还定义了19种结构,用于GDI+的各种方法调用中。例如:ColorMap、ColorMatrix、ColorPalette、GdiplusAbort、GdiplusStartupInput、GdiplusStartupOutput等。14.2 GDI+的特色本节介绍GDI+的几个主要新增特性与功能,说明GDI+在编程模式上的改变。14.2.1 GDI+新增特性与GDI相比,GDI+新增的特性主要有渐变画刷、样条和贝塞尔曲线、持久路径、矩阵变换、伸缩区域、混色和对多种图像格式的支持。1渐变画刷GDI+中新增加的渐变画刷(gradient brush,梯度刷),通过提

13、供用于填充图形、路径和区域的颜色线性渐变和路径渐变的画刷,扩展了GDI的功能。渐变画刷可用于绘制直线、曲线和路径,参见图14-4。a)(水平)线性渐变 b)(贝塞尔)路径渐变图14-4 渐变画刷图14-5 基样条曲线与折线2曲线方法GDI+支持基样条(cardinal splines)和贝塞尔(Bezier)方法,可以由若干控制点生成光滑的曲线,参见图14-5。3持久路径对象GDI中的路径(path)属于设备上下文,并且会在绘制时被毁坏。而GDI+则可以创建并维护多个与Graphics对象分开的持久(persistent)路径对象GraphicsPath对象,在绘图操作时也不会破坏,因此可多次

14、使用同一个GraphicsPath对象来绘制路径。4变换和矩阵对象GDI+提供了Matrix(矩阵)对象,它是一种可以使(缩放、旋转和平移等)变换(transformation)简易灵活的强大工具,矩阵对象一般与变换对象联合使用。例如,GraphicsPath对象具有Transform方法,此方法接收Matrix对象作为参数。参见图14-6。5可伸缩区域GDI+通过对可伸缩区域(scalable region)的支持极大地扩展了GDI。在GDI中,区域被存储在设备坐标中,而且,可应用于区域的惟一变换是平移。而GDI+在全局坐标中存储区域,并且允许区域发生任何可存储在变换矩阵中的变换(如缩放和旋

15、转)。图14-7显示一个区域在执行三种变换(缩放、旋转和平移)前后的情况。图14-6 路径变换图14-7 区域变换图14-8 不同透明度6混色在图14-7中,可以在变换区域(用蓝色阴影画笔填充)中看到未变换区域(用红色填充),这是由GDI+支持的混色(alpha blending,透明混合)实现的。使用混色,可以指定填充颜色的透明度。透明色与背景色相混合填充色越透明,透出的背景色就越多。图14-8显示四个用相同颜色(红色)填充、但透明层次不同的椭圆。7丰富的图像格式支持GDI+提供Image、Bitmap和Metafile类,可以用不同的格式加载、保存和操作图像。GDI+支持BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF共9种常见的图像格式。这些已经被ATL/MFC中的基于GDI+的CImage类所体现。8GDI+的不足虽然,相对于GDI来说,GDI+确实增加了许多新特性,而且功能更强大,使用也更方便。但是,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 工业自动化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号