基于gdi2d图形软件开发方法初探-2d几何画板毕业论文(编辑修改稿)内容摘要:

设计越来越以来于自包含和自描述功能包形式的软件组件。 这种组件的关键在于它们提供了使用属性、方法、和事件的程序设计模型:它们具有提供关于组件的声明信息的特性;同时,它们还加入了自己的文档。 C提供了语言构件来直接支持这 些概念,从而使C在创建和使用软件组件方面非常自然。 C的一些特性有助与创建健壮和稳定的应用程序:垃圾回收可以自动回收无用对象所占用的内存;异常处理提供了一种结构化和可扩展的错误检测及恢复方式;语言的类型安全设计可以防止引用末初始化变量、数组下标越界,以及执行未检查的类型转换等情形的发生。 8 C具有一个统一的类型系统。 所有的 C类型都继承自单个根类型 object。 因此,所有类型都共有一组通用操作,并且任何类型的值都能够以一致的方式进行存储、传递和操作。 此外, C还支持用户自定义的引用类型和值类型,既允许对 象的动态分配,也允许轻量结构的内联存储。 为了保证 C程序和类库总能以兼容的方式升级,在 C的设计中十分强调版本控制。 许多程序设计语言不太重视这个问题,这导致了使用那些语言编写的程序常常因为其所依赖的类库的更新而无法工作。 对版本控制的考虑直接影响了 C的设计,受影响的方面包括分开的 virtual 和 override 修饰符、方法重载的规则,以及对显示接口成员声明的支持等。 C的特点 简单 C语言设计的首要目标就是简单,这也正是 C++的致命缺点。 通过舍弃一小部分处理控制能力,增加诸如类型安全、 自动垃圾收集等新特点,来最大限度地使语言最简单。 面向对象 C是一种完全面向对象的编程语言,所有的元素都要被封装在类中,它支持所有面向对象语言的关键概念,包括封装、继承和多态,但它不再支持类的多继承,只允许但继承,即一个类只能有一个父亲。 这是因为在多数情况下,只需要从一个类的多继承,从多个基类派生的会带来很多的问题。 整个 C的类模型是建立在 .NET 虚拟对象系统基础上的,其对象模型是 .NET 框架的一个组成部分,而不再是语言本身的组成部分。 因此,用 C编写的程序能够最大程度的与 .NET 支持的其他语言相互操 作,能够实现跨语言的继承。 类型安全 类型对于编程语言是非常重要的, C实施了最严格类型安全机制,有效地增强了程序的可靠性。 C借鉴了很多 Visual Basic 语言中增强代码执行可靠性的特点,其中包括:所有动态分配的对象和数组都被初始化为 0;虽然局部变量不会被自动初始化,但如果在程序中不初始化就使用,编译器会发出警告;对数组的访问,会自动进行边界检查;不能够写未分配的内存。 版本控制 C提供了内置的版本支持,开发者可以使用它来确保开发的组件升级时,会与已有2 开发背景 9 的系统保持二进制的兼容。 灵活与兼容 尽管 C代码在默认时类型安全的,不能使用指针类型,但是在非安全代码中,仍可以使用指针,并且调用这些非安全的代码不会带来任何问题。 C不是一个封闭的语言,它允许通过遵守 .NET 公用语言规范 CLS 访问不同的 API。 C的语言特性 类 C中所有代码和数据都必须包含在类中。 不能在类的外部定义变量,而且在类的外部不能编写任何代码。 类可以拥有构造函数( constructor)和 (destructor),前者在创建类的某个对象时执行,后者在撤消类的某个对象时执行。 类支持单一继承性,所有类最终都继承自 称为 object 的基类。 C支持版本技术,这有助于在维护与类前期版本代码的可兼容性的同时改进类的代码。 C允许类组合到称为名字空间的类的集合中。 名字空间有它们各自的名称。 并且有助于将类的集合组合到逻辑分组中。 数据类型 C有两种数据类型:值类型和引用类型。 值类型的数据包含真正的值。 引用类型的数据包含对存储在内存中其他地方的值的引用。 基本类型都属于值类型,比如字符类型( char)、整数类型( int)、浮点类型( float)、枚举类型和结构类型。 引用类型包含处理对象和数组的变量。 C有预定义的引用类型(对 象 object 和字符串 string),也有预定义的值类型。 还可以在代码中定义自己的值类型和引用类型。 最终,所有值类型和引用类型都从称为 object 的基类型派生而来。 C允许将一种类型的值转换成另一种类型的值。 既可以采用隐式转换又可以采用显示转换。 通常,隐式转换会成功并且不会丢失任何信息,显示转换可能会导致丢失数据。 要进行显示转换时,必须在代码中写出类型转换运算符。 函数 函数是可调用的代码段,它可能返回也可能不返回值给最初调用它的代码。 通常,函数的代码段会返回信息,而方法则不返回信息。 C和 CLR 结合 使用可以提供自动内存管理。 C提供了各种运算符用于编写数学表达式和逐位操作表达式。 C支持很多语句,这些语句允许在代码中定义各种执行分支。 变量 10 变量可以被定义为常量。 常量的值在整个代码执行过程中不可以修改。 C为定义和处理事件提供了一种内置的机制。 如果编写了一个执行一长串操作的类,可能会希望在操作完成时启动某个事件。 这时,客户可以预约该事件并在代码中捕获该事件,这样当完成很长的操作时,该事件会通知客户。 C中的事件处理机制使用了委托,它们是引用某个函数的变量。 接口 C支 持接口( interface) ,接口是指一套功能的属性、方法和事件的组合。 C类可以实现接口,从而告诉用户类支持接口中指定的功能,可以在不与任何现有代码抵触的情况下开发接口的实现,这样将最低限度地减小可兼容性的问题。 属性 属性向 CLR 声明有关类的其他信息,它允许开发人员在类上绑定信息 —— 任何信息。 例如,可以使用某个属性在类中嵌入文档编制信息。 属性还可以用于来中绑定运行时信息,定义使用时应该如何采取动作。 GDI+简介 什么是 GDI+ GDI+是 Windows XP 中的一个子系统,它主要负责在显示屏幕和打印设备 输出有关信息,它是一组通过 C++类实现的应用程序编程接口( API,Application Programming Interface) ,通过这些 API, GDI+让程序员在设计程序时不必考虑到具体的显示器或打印机,直接使用由 GDI+提供的类的方法便可以在显示器或打印机等输出设备上进行图形或文本的输出,真正做到与设备无关。 顾名思义 , GDI+是以前版本 GDI 的继承者,出于兼容性考虑, Windows XP 仍然支持以前版本的 GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用 GDI+,因为 GDI+对以前的 Windows 版本中 GDI 进行了优化,并添加了许多新的功能。 作为图形设备接口的 GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节 ,他们只需调用 GDI+库输出的类的一些方法即可完成图形操作 ,真正的绘图工作由这些方法交给特定的设备驱动程序来完成。 GDI+使得图形硬件和应用程序相互隔离,从而使开发人员编写设备无关的应用程序变得非常容易。 2 开发背景 11 GDI+的体系结构图 GDI+与 GDI、 Directx 一样,都是开发图形应用程序的一种方式。 GDI+实际就是GDI 的高 层次的一种封装类,二着主要用来服务于图形、图象和文本的输出。 惟一不同的是, GDI+在功能上要强大些。 另外,二者在编程应用上的本质区别是, GDI+用一个“无状态模型”取代了 GDI 中把选中项目放到设备环境( DC, Device Context)对象上的“状态模型”,在 GDI+中每一个绘图操作都是相互独立的。 图形对象( Graphics object)是绘图操作中惟一保留的对象。 如图 所示: 图 GDI+体系结构 GDI+的构成 从 GDI+所包含的内容来看,它主要由以下几方面构成: 二维 几何图形的处理 矢量图形由图元(如直线、曲线和轮廓等)组成,图元由坐标中的一组点来指定。 例如,一条直线可用两个点来指定,一个矩形可用一个给出其左上角位置的点和一对给出其宽度、高度的数字来指定。 一条简单路径可用由直线或曲线连接起来的一组点来指定。 GDI+的 RECT(矩形)类用与存储矩形的位置和尺寸; PEN 类存储线条颜色、线宽和线条风格的信息; Graphics 类用于绘制直线、矩形及其他图形;还有几个 Brush 类存储用颜色图案来填充闭合图形和路径的方法。 显示图象 某些图象难以或不可能使用矢量图形技术来 表示。 例如,工具栏中的按扭图标就 12 很难使用直线和曲线的集合来表示。 一幅包含一个拥挤的棒球场的高分辨率数字图象更难用矢量技术来创建。 这种类型的图象一般都存储为位图,位图是代表屏幕上单个点的颜色的数字阵列。 用于存储位图信息的数据结构比用于存储矢量图形的数据结构更为复杂。 所以在 GDI+中就有几个类用于处理这些复杂的位图信息, CachedBitmap(缓存位图 )类就是一个例子,该类用于在内存中存储位图以便快速访问与显示位图。 排版 排版与使用各种各样的字体、尺寸和风格显示的文本有关。 GDI+为这一复杂任务提供了大 量的函数来完成各种不同风格的文本输出。 GDI+对文本的一个重要支持,就是文本的反锯齿输出,这也是 GDI+的一个新特色,该特色使得在 LCD 屏幕上绘制文本时文本的外观更加光滑。 GDI+的新特色 与传统的 GDI 相比, GDI+归纳起来有以下几方面的新特色。 渐变的画刷 (Gradient Brushes) 画刷是用来填充控件、窗口和区域的一个 GDI 对象。 原有的 GDI 仅支持单色的画刷,如果想画一个在阳光照耀下的矩形物体,通过 GDI 的画刷则不能实现光线强弱的立体效果。 GDI+画刷改变了这一点, GDI+允许用户创建一个沿路径或直线渐变的画刷 ,来填充外形 (shapes),路径 (paths),区域 (regions),渐变画刷同样也可以画直线、曲线、路径,当你用一个线形画刷填充一个外形 (shapes)时,颜色就能够沿外形逐渐变化。 基数样条函数( Cardinal Splines) GDI+ 支持基数样条函数,而 GDI 不支持。 基数样条是一组单个曲线按照一定的顺序连接而成的一条较大曲线。 样条由一系列点指定,并通过每一个指定的点。 由于基数样条平滑地穿过组中的每一个点(不出现尖角),因而它比用直线连接创建的路径更 精确。 独立的路径对象( Path Objects) 在 GDI 中,路径属于设备描述表( DC),在 BeginPath 函数和 EndPath 后便被新的路径信息覆盖,也就是说 GDI 的路径信息是唯一并且不断改变的。 在 GDI+中,绘图工作由图形对象( Graphics)来完成,并且可以创建多个图形对象进行绘图,多个图形对象产生的路径信息是相对独立的,而且不会被新的绘图操作所覆盖。 你可以创建几个与Graphics 分开的路径对象,绘图操作时路径对象不被破环,这样你就可以多次使用同一2 开发背景 13 个路径对象画路径了。 变形和矩阵对象 ( Transformations & Matrix Object) GDI+提供了矩阵对象来使图形在变形(旋转及平移等)时做到简单且效果平滑。 矩形对象存储了图形在变化过程中的位置信息。 使用矩形除了可以对坐标位置信息进行变换以外,还可以对色彩空间信息进行变换。 在 GDI+中通过矩阵运算,可以完成包含投射变换在内的所有仿射变换。 一个矩阵对象总是和一个图形变换对相联系起来,比方说,路径对象( PATH)有一个 Transform 方法,它的一个参数能够接受矩阵对象的地址,每次路径绘制时,它能够根据变换矩阵绘制。 Alpha 通道合成运算( Alpha Blending) Alpha Blendings 是图形处理中最常见的一种运算方法。 在 GDI+中, Alpha Blending不仅运用在图片的合成方面,也体现在画笔、画刷与目标图形区域之间的合成运算中,可以在两幅图片重叠显示时,设置显示图片的透明度来合成图片,真正做到透明。 多种图像格式支持 图像在图形界面程序中占有举足轻重的地位, GDI+ 除了支持 BMP 等 GDI 支持的图形格式外,还支持 JPEG( Joint Photographic Experts Group)、 GIF( Graphics Interchange Format)、 PNG( Exchangeable Image File)、 TIFF( Tag Image File Format) 等图像格式,你可以直接在程序中使用这些图片文件,而无需考虑它们所用压缩算法。 GDI+的所有新特色给程序员提供了一种简洁的方法来完成在 GDI 中需要经过繁琐的过程才能完成的编程工作。 从某种意义上来说, GDI+是对使用 GDI 编程的程序员的一种解脱。 14 3 系统总体设计 15 3 系统总体设计 系统总体结构 《基于 GDI+》 2D 图形软件开发方法初探 — 2D 几 何画板,主要模块包括基本图形绘制、自定义图形绘制、测量、 2D 函数图形绘制、序列化及系统功能模块。 绘制的主要图形对象包括:点、线段、曲线、圆、矩形、正方形、菱形、任意三角。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。