电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

gdi+编程指南

211页
  • 卖家[上传人]:小**
  • 文档编号:89124224
  • 上传时间:2019-05-18
  • 文档格式:DOC
  • 文档大小:7.29MB
  • / 211 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第6章 GDI+/ 陈宝楷_Saturday, September 15, 2007GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。顾名思义,GDI+是Windows早期版本所提供的图形设备接口GDI的后续版本。GDI+是一种应用程序编程接口(API),通过一套部署为托管代码的类来展现。这套类被称为GDI+的“托管类接口”。GDI+最早是于2001年随Windows XP一起推出的一种API,后来又被包装进.NET框架的托管类库之中,成为.NET中窗体绘图的主要工具。GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows图形图像程序开发的首选。本章将介绍GDI+的特点和新增功能,以及GDI+ API的具体使用方法,包括二维矢量图形的绘制、图像处理的应用、以及文字的显示。6.1 概述GDI+与GDI一样,都具有设备无关性。应用程序的程序员可利用GDI+这

      2、样的图形设备接口在屏幕或打印机上显示信息,而不需要考虑特定显示设备的具体情况。应用程序的程序员调用GDI+类提供的方法,而这些方法又反过来相应地调用特定的设备驱动程序。GDI+将应用程序与图形硬件隔离,而正是这种隔离允许开发人员创建设备无关的应用程序。设备驱动程序计算机硬件GDI+ 引擎GDI二维矢量图形图像文字.NET框架Win32/64 (C+)GDI+的体系结构本节首先介绍GDI+的几个主要新增的特性及其功能,然后说明它给Windows图形图像程序的开发模式带来的变化,最后给出一个代码实例,介绍如何在VC+中使用GDI+进行程序开发。1GDI+的功能GDI+主要提供了以下三种功能:1)二维矢量图形矢量图形包括坐标系统中的系列点指定的绘图基元(如直线、曲线和图形)。例如,直线可通过它的两个端点来指定,而矩形可通过确定其左上角位置的点并给出其宽度和高度的一对数字来指定。简单路径可由通过直线连接的点的数组来指定。贝塞尔样条是由四个控制点指定的复杂曲线。GDI+提供了存储基元自身相关信息的类(结构)、存储基元绘制方式相关信息的类,以及实际进行绘制的类。例如,Rectangle结构存储矩形

      3、的位置和尺寸;Pen类存储有关线条颜色、线条粗细和线型的信息;而Graphics类具有用于绘制直线、矩形、路径和其它图形的方法(类似于GDI中的CDC类)。还有几种Brush类,它们存储有关如何使用颜色或图案来填充封闭图形和路径的信息。用户可以在图元文件中记录矢量图像(图形命令的序列)。GDI+提供了Metafile类,可用于记录、显示和保存图元文件。MetafileHeader和MetaHeader类允许您检查图元文件头中存储的数据。2)图像处理某些种类的图片很难或者根本无法用矢量图形技术来显示。例如,工具栏按钮上的图片和显示为图标的图片就难以指定为直线和曲线的集合。拥挤的棒球运动场的高分辨率数字照片会更难以使用矢量技术来制作。这种类型的图像可存储为位图,即代表屏幕上单个点颜色的数字数组。GDI+提供了Image、Bitmap和Metafile类,可用于显示、操作和保存位图。它们支持众多的图像文件格式,还可以进行多种图像处理的操作。3)文字显示版式就是使用各种字体、字号和样式来显示文本。GDI +为这种复杂任务提供了大量的支持。GDI+中的新功能之一是子像素消除锯齿,它可以使文本在L

      4、CD 屏幕上呈现时显得比较平滑。4)功能汇总GDI+的C+封装包含54个类、12个函数、6类(226个)图像常量、55种枚举和19种结构。GDI+的托管类接口则包含大约60个类、50个枚举和8个结构。这两种封装中的Graphics类都是GDI+的核心功能,它是实际绘制直线、曲线、图形、图像和文本的类。通过这些类和接口可以实现:l 使用笔绘制线条和形状l 使用刷填充形状l 使用图像、位图和图元文件l 混合线条和填充l 字体和文本l 构造并绘制曲线l 用颜色渐变的梯度刷填充形状l 构造并绘制轨迹l 变换l 图形容器l 区域l 重新着色l 读取元数据等非常丰富强大的功能。2GDI+新增特性1)渐变画刷渐变画刷(gradient brush梯度刷)通过提供用于填充图形、路径和区域的线性渐变画笔和路径渐变画笔,GDI+扩展了GDI 的功能。渐变画笔还可用于绘制直线、曲线和路径。线性渐变画笔可用于使用颜色来填充图形,画笔在图形中移动时,颜色会逐渐改变。例如,假定通过指定图形左边为蓝色、右边为绿色,创建了一个水平渐变画笔。当用水平渐变画笔填充该图形时,随着画笔从图形的左边移至右边,颜色就会由蓝色逐渐

      5、变为绿色。用类似方法定义的垂直渐变画笔填充的图形,颜色从上到下变化。图6-1显示了用水平渐变画笔填充的椭圆和用斜式渐变画笔填充的区域。图6-1 水平和斜式渐变画笔用路径渐变画笔填充图形时,可选择不同的方法来指定当从图形的一部分至另一部分移动画笔时颜色的变化方式。一种选择是指定中心颜色和边缘颜色,在从图形中间向外边缘移动画笔时,像素逐渐从一种颜色变化到另一种颜色。图6-2显示了用路径渐变画笔填充的路径(该路径是用一对贝塞尔样条创建的)。图6-2 路径渐变画笔2)基数样条函数GDI+支持在GDI 中不支持的基数样条(cardinal spines)。基数样条是一连串单独的曲线,这些曲线连接起来形成一条较长的光滑曲线。样条由点的数组指定,并通过该数组中的每一个点。基数样条平滑地(没有锐角)通过数组中的每一个点,因此,比通过连接直线创建的路径更光滑精准。图6-3显示了两个路径:一个以基数样条的形式创建;另一个通过连接直线创建。图6-3 基数样条路径和折线路径3)持久路径对象在GDI 中,路径属于设备上下文,并且会在绘制时被毁坏。利用GDI +,绘图由Graphics对象执行,可以创建并维护几个

      6、与Graphics对象分开的持久的路径对象(persistent path object)GraphicsPath对象。绘图操作不会破坏GraphicsPath 对象,因此可以多次使用同一个GraphicsPath 对象来绘制路径。4)变换和矩阵对象GDI+提供了Matrix(矩阵) 对象,它是一种可以使(缩放、旋转和平移等)变换(transformation)简易灵活的强大工具。矩阵对象一般与变换对象联合使用。例如,GraphicsPath 对象具有Transform 方法,此方法接收Matrix 对象作为参数。单一的33矩阵可存储一种变换或一个变换序列。图6-4显示了一个路径在执行两种变换前后的情况。图6-4 路径的变换5)可伸缩区域GDI+ 通过对可伸缩区域(Scalable Regions)的支持极大地扩展了GDI。在GDI 中,区域被存储在设备坐标中,而且,可应用于区域的惟一变换是平移。而GDI+在全局坐标中存储区域,并且允许区域发生任何可存储在变换矩阵中的变换(如缩放和旋转)。图6-5显示一个区域在执行三种变换(缩放、旋转和平移)前后的情况。图6-5 区域的三种变换(缩放、

      7、旋转和平移)6)混色在图6-5中,可以在变换区域(用蓝色阴影画笔填充)中看到未变换区域(用红色填充)。这是由GDI+支持的混色(Alpha Blending,透明混合)实现的。使用混色,可以指定填充颜色的透明度。透明色与背景色相混合填充色越透明,透出的背景色就越多。图6-6显示四个用相同颜色(红色)填充、但透明层次不同的椭圆。图6-6 不同透明度7)丰富的图像格式支持GDI+提供Image、Bitmap 和Metafile 类,可以用不同的格式加载、保存和操作图像。GDI+支持BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF共9种常见的图像格式。8)GDI+的不足虽然,相对于GDI来说,GDI+ 确实增加了许多新特性,而且功能更强大,使用也更方便。但是,这并不等于GDI+ 就能够完全代替GDI。因为GDI+实际上GDI+ 是GDI的封装和扩展,GDI+的执行效率一般要低于GDI的。另外,GDI+不支持图的位运算,那么就不能进行异或绘图等操作。而且在VC中,GDI+ 还不支持双缓存机制(如内存DC和显示DC),这将大大影响GDI+ 在高速图形、图像、动画和视

      8、频等方面的应用。3编程模式的改变GDI+的出现,也使基于GDI的编程模式产生了很大变化:GDI+用一个“无状态模式”,取代了GDI中(需要先将各种工具和项目选入DC对象后,才能进行绘图的)“状态模式”。主要体现在以下几个方面:1)DC句柄和图形对象设备上下文(DC = Device Context)是GDI中使用的一种结构,用于存储与特定显示设备的功能、以及指定如何在该设备上绘制项目之属性相关的信息。用于屏幕显示的DC还与特定窗口相关联。为了使用GDI API进行绘图,必须首先获得一个DC的句柄(HDC = Handle to a DC),然后将该句柄作为参数,传递给实际进行绘图的GDI 函数。还可以将此句柄作为参数,传递给获取和设置DC属性的GDI 函数。使用GDI+,不需要再(直接)使用句柄或设备上下文,而是只需(通过HDC)创建一个Graphics对象,然后用熟悉的面向对象方式来调用其中的各种绘图方法,例如:myGraphicsObject.DrawLine(&pen, x1, y1, x2, y2);正如DC是GDI 的核心,Graphics对象也位于GDI+的核心。DC和Gr

      9、aphics对象的作用相似,但在使用设备上下文(GDI)的基于句柄的编程模式和使用Graphics对象(GDI+)的面向对象的编程模型之间,存在一些基本的差异。Graphics对象(像DC一样)与屏幕上的特定窗口关联,并具有指定如何绘制项目的属性(如SmoothingMode和TextRenderingHint)。但是,Graphics对象不受笔、刷、路径、图像或字体的约束,这与设备上下文不同。例如,使用设备上下文绘制线条之前,必须先调用SelectObject 以使笔对象和DC关联,即将笔选入DC中。在设备上下文中绘制的所有线条均使用该笔,直到选择另一支不同的笔为止。在GDI+中,将Pen 对象作为参数传递给Graphics类的DrawLine 方法。可以在一系列的DrawLine调用的每个调用中,使用不同的Pen对象,而不必将给定的Pen对象与Graphics对象关联。2)绘制线条的两种方法下面每个示例都从点(20, 10)到点(200,100)绘制一条宽为3的红色线条。第一个示例调用GDI,第二个示例则通过托管类接口调用GDI+;它们都有分别使用API和MFC的两个版本。(1)用GDI 画线l API要使用GDI 绘制线条,需要两个对象:设备上下文和笔。在WM_PAINT的消息响应代码中,通过调用BeginPaint,可以获得设备上下文句柄;通过调用CreatePen,则可以获得笔句柄。再调用SelectObject 以将笔选入设备上下文。调用MoveToEx,将笔的当前位置设在(20,10),然后调用LineTo,在笔的当前位置与位置(200,100) 之间绘制一条线条。请注意,所有这些函数和类型,都是全局的。而且MoveToEx和LineTo 均将hdc(设备上下文的句柄)作为参数接收。WM_PAINT:HDC hdc; /

      《gdi+编程指南》由会员小**分享,可在线阅读,更多相关《gdi+编程指南》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.