- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分享(C高级编程版doc):使用GDI绘图
第33章使用GDI+绘图
在本书中,有8章内容介绍用户交互和.NET Framework,第31章主要介绍了如何显示对话框或SDI、MDI窗口,以及如何把各种控件放在这些窗口上,如按钮、文本框和列表框。第32章介绍在Windows窗体中使用许多Windows窗体控件处理各种数据源中的数据。
这些标准控件的功能非常强大,使用它们就可以获得许多应用程序的完整用户界面。但是,有时还需要在用户界面上有更大的灵活性。例如,要在窗口的确定位置以给定的字体绘制文本,或者显示图像,但不使用图像框控件,只使用形状和图形。这些都不能使用第31章介绍的控件来完成。要显示这种类型的输出,应用程序必须直接告诉操作系统需要在其窗口的什么地方显示什么内容。
本章主要介绍如何绘制以下内容:
●?绘图规则
●?直线、简单图形
●?.BMP图像和其他图像文件
●?文本
●?处理打印
在这个过程中,还需要使用各种帮助对象,包括钢笔(用于定义直线的特性)、画笔(用于定义区域的填充方式)和字体(用于定义文本字符的图形)。我们还将介绍设备如何解释和显示不同的颜色。
下面首先讨论GDI+技术。GDI+由.NET基类集组成,这些基类可用于在屏幕上完成定制绘图,能把合适的指令发送到图形设备的驱动程序上,确保在监视器屏幕上显示正确的输出(或打印到硬拷贝中)。
33.1? 理解绘图规则
本节讨论一些基本规则,只有理解了它们,才能开始在屏幕上绘图。首先概述GDI,GDI+技术就建立在GDI上,然后说明它与GDI+的关系。接着介绍几个简单的例子。
33.1.1? GDI和GDI+
一般来说,Windows的一个优点 (实际上是现代操作系统的优点) 是它可以让开发人员不考虑特定设备的细节。例如,不需要理解硬盘设备驱动程序,只需在相关的.NET类中调用合适的方法(在.NET推出之前,使用等价的Windows API函数),就可以编程读写磁盘上的文件。这个规则也适用于绘图。计算机在屏幕上绘图时,把指令发送给视频卡。问题是市面上有几百种不同的视频卡,大多数有不同的指令集和功能。如果把这个考虑在内,在应用程序中为每个视频卡驱动程序编写在屏幕上绘图的特定代码,这样的应用程序就根本不可能编写出来。这就是为什么在Windows最早期的版本中就有Windows Graphical Device Interface (GDI)的原因。
GDI+提供了一个抽象层,隐藏了不同视频卡之间的区别,这样就可以调用Windows API函数完成指定的任务了,GDI会在内部指出在运行特定的代码时,如何让客户机的视频卡完成要绘制的图形。GDI还可以完成其他任务。大多数计算机都有多个显示设备-- 例如,监视器和打印机。GDI成功地使应用程序所使用的打印机看起来与屏幕一样。如果要打印某些东西,而不是显示它们,只需告诉系统输出的设备是打印机,再用相同的方式调用相同的Windows API函数即可。
可以看出,DC(设备环境)是一个功能非常强大的对象,在GDI下,所有的绘图工作都必须通过设备环境来完成。DC甚至可用于不涉及在屏幕或其他硬件设备上绘图的其他操作,例如在内存中修改图像。
GDI给开发人员提供了一个相当高级的API,但它仍是一个基于旧的Windows API并且有C语言风格函数的API,所以使用起来不是很方便。GDI+在很大程度上是GDI和应用程序之间的一层,提供了更直观、基于继承性的对象模型。尽管GDI+基本上是GDI的一个包装器,但Microsoft已经能通过GDI+提供新功能了,它还有一些性能方面的改进。
.NET基类库的GDI+部分非常大,本章不解释其特性。这是因为只要解释其中的几个类、方法和属性,就会把本章变成一个仅列出GDI+类和方法的参考指南。而理解绘图的基本规则更重要;这样您应可以自己研究这些类。当然,关于GDI+中类和方法的完整列表,可以参阅SDK文档说明。
注意:
有VB6背景的开发人员会发现,自己并不熟悉绘图过程涉及的概念,因为VB6的重点是处理绘图的控件。有C++/MFC背景的开发人员则比较熟悉这个领域,因为MFC要求开发人员使用GDI更多地控制绘图过程。但是,即使您具备很好的GDI背景知识,也会发现本章有许多新东西。
1. GDI +命名空间
表33-1列出了GDI+基类的主要命名空间。
本章使用的几乎所有的类、结构等都包含在System.Drawing命名空间中。
表? 33-1
说 明 System.Drawing 包含与基本绘图功能有关
?的大多数类、结构、枚举和委托 System.Drawing.Drawing2D 为大多数高级2D和矢量绘图操作提供了支持,包括消除锯齿、几何转换和图形路径 (续表)
命 名 空 间 说 明 System.Drawing.I
文档评论(0)