基于gdi的基本位图绘制软件设计实现论文内容摘要:

File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。 Windows系统内部各图像绘制操作都是以BMP为基础的。 Windows ,因此把这种BMP图像文件格式称为设备相关位图DDB(devicedependent bitmap)文件格式。 Windows ,因此把这种BMP图像文件格式称为设备无关位图DIB(deviceindependent bitmap)格式,目的是为了让Windows能够在任何类型的显示设备上显示所存储的图像。 BMP位图文件默认的文件扩展名是BMP或者bmp()。 位图文件可看成由4个部分组成:位图文件头(bitmapfile header)、位图信息头(bitmapinformation header)、彩色表(color table)和定义位图的字节阵列。 位图的头文件组成部分位图文件的组成结构名称符号位图文件头(bitmapfile header)BITMAPFILEHEADERbmfh位图信息头(bitmapinformation header)BITMAPINFOHEADERbmih彩色表(color table)RGBQUADaColors[]图象数据阵列字节BYTEaBitmapBits[] GDI简介 GDI原理Windows 98和Microsoft Windows。 在Windows 98中。 在Windows NT中,[5]。 这些动态链接库调用安装的视讯显示器和任何打印机调用驱动程序中的例程。 视讯驱动程序存取视讯显示器的硬件,打印机驱动程序将GDI命令转换为各种打印机能够理解的代码或者命令。 显然,不同的显示卡和打印机要求不同的设备驱动程序[5]。 因为PC兼容机种上可以连接许多种不同的视讯设备,所以,GDI的主要目的之一是支持与设备无关的图形。 Windows程序应该能够毫无困难地在Windows支持的任意一种图形输出设备上执行,GDI通过将您的程序和不同输出设备的特性隔离开来的方法来达到这一目的[5]。 图形输出设备分为两大类:位映像设备和向量设备。 大多数PC的输出设备是位映像设备,这意味着它们以图点构成的数组来表示图像,这类设备包括显示卡、点阵打印机和激光打印机。 向量设备使用线来绘制图像,通常局限于绘图机。 许多传统的计算机图形程序设计方式都是完全以向量为主的,这意味着使用向量图形系统的程序与硬件有着一定层次的隔离。 输出设备用图素表示图形,但是程序与程序接口之间并不是用图素进行沟通的。 当然我们可以使用Windows GDI作为一个高阶的向量绘制系统,同时也可以将它用于比较低阶的图素操作。 从这方面来看,Windows GDI和传统的图形接口语言之间的关系,就如同C和其它程序设计语言之间的关系一样。 C以它在不同操作系统和环境之间的高度可移植性而闻名,然而C也以允许程序写作者进行低阶系统呼叫而闻名,这些呼叫在其它高级语言中通常是不可能的。 正如C有时被认为是一种“高级汇编语言”一样,您可以认为GDI是图形设备硬件之间的一种高阶界面。 GDI基本图形能够在屏幕或打印机上显示的图形形态本身可以被分为几类,通常被称为“基本图形”,它们是:直线和曲线线条是所有向量图形绘制系统的基础。 GDI支持直线、矩形、椭圆(包括椭圆的子集,也就是“圆”)、椭圆圆周上的部分曲线即所谓的“弧”,以及贝塞尔曲线(Bezier spline),本文程序中将实现这些基本图形的绘制。 所有更复杂的曲线可由折线(polyline)代替,折线通过一组非常短的直线来定义一条曲线。 填入区域,当一系列直线或者曲线封闭了一个区域时,该区域可以使用目前GDI画刷对象进行填图。 这个画刷可以是实心色彩、图案(可以是一系列的水平、垂直或者对角标记)或者是在区域内垂直或者水平重复的位图图像。 位图是一系列位的矩形数组,这些位对应于显示设备上的图素,它们是位映像图形的基础工具。 位图通常用于在显示器或者打印机上显示复杂(一般都是真实的)图像。 位图还可以用于显示必须快速绘制的小图像(诸如图标、鼠标光标以及在应用工具条中出现的按钮等)。 GDI支持两种型态的位图:一种是旧式的但还非常有用的“设备相关”位图,这种是GDI对象;另一种是新的(如Windows )“设备无关”位图(或者DIB),可以储存在磁盘文件中。 文字不仅是所有的计算机图形系统中最复杂的部分,也是其中最重要的部分。 用于定义GDI字体对象和取得字体信息的数据结构是Windows中最庞大的部分之一。 从Windows ,GDI开始支持TrueType字体,该字体是在填入轮廓线基础上建立的,这样的填入轮廓线可由其它GDI函数处理。 依据兼容性和储存大小的考虑,Windows 98继续支持旧式的点阵字体。 3. 绘图软件设计 绘图软件功能模块作为一个小型绘图系统应该能完成绘图的一些基本功能,如绘制直线、矩形、椭圆、Bezier曲线。 考虑到小型绘图系统的实际应用,在这里不设置图层,所有图元都是直接覆盖。 为了绘图的方便,需要设置一个钢笔工具,使用户能直接在画板上用鼠标绘制任意图形。 此外还提供橡皮擦功能,能擦除当前画板上的任意位置的图元。 在绘制直线、曲线或钢笔绘图时可以改变线条的粗细,在绘制椭圆、矩形这类封闭图形是可以改变不同的图形填充方式。 对于任何图元时除了使用黑色还能选择红、黄、蓝三种基本颜色。 该软件能够以类似Windows附件中的绘图工具的操作方式,用户在绘图时能够实现撤销和重做,最后能将当前画板上的所有的图形以BMP文件格式保存在用户所选的任意文件路径下。 : 软件各功能模块描述下面将对上图所示的各个功能模块的设计一一做简要概述。 钢笔绘图若操作者选择钢笔绘图模式,当鼠标移至画板上时,鼠标图标会改变成钢笔样式,当使用者按下鼠标时会在画板上根据当前绘图模式按找鼠标的轨迹画图,就如同使用钢笔在纸上画画一样方便。 绘制直线若操作者选择直线绘图模式,当鼠标移至画板上时,鼠标图标会改变成钢笔样式,当按下鼠标时,将以此时鼠标的坐标为起点画直线,此时操作者可以拖动鼠标到画板上的任何位置,当松开鼠标时,将在画板上留下以此时鼠标坐标为终点的一条直线。 : 绘制曲线若操作者选择曲线绘图模式时,程序将按三个步骤完成曲线的绘制。 第一步:雷同上面画直线的方式在画板上画一条直线。 第二步:鼠标点击画板上任意位置,以此时鼠标所在的坐标作为曲线的第一个控制点。 用户可以拖动鼠标,选择合适的曲线。 第三步:在完成以上两步后,用鼠标点击画板上任意位置,以此时鼠标所在的坐标作为曲线的第二个控制点。 用户也可以拖动鼠标,选择合适的曲线。 : 绘制封闭图形在本软件中椭圆和矩形被作为封闭图形,在本程序中他们的画法是相同的,但在GDI中对这类封闭图形的绘制与前面所说的线条类图元有很大的区别。 若操作者选择绘制封闭图形时,当鼠标移至画板上时,鼠标图标会改变成钢笔样式,当按下鼠标时,将以此时鼠标的坐标为基点画图,同样可以拖动鼠标至画板中的任意位置,当松开鼠标时将以此时鼠标的坐标为偏移量在画板上画出图像。 画圆的流程图 选择绘图样式所谓绘图样式是指线条的粗细、颜色、封闭图形的填充方式、填充颜色等。 在使用钢笔或者是选择直线和曲线这类线条样式画图时使用者可以改变线条的粗细、颜色。 其中粗细分三个等级分别是1个像素、2个像素、3个像素。 颜色有红、黄、蓝、黑四种颜色。 若使用者选择圆或者矩形这类封闭样式画图时,由于他们被认为是一块填充区域,在绘制的时候GDI会使用当前设备内容中的画笔对象画图形的边界线,此外还会用设备内容中的画刷对象填充图形的内部区域。 所以除了选择以上的四种颜色外还可以选择三种不同的填充方式。 橡皮擦若使用者选择了橡皮擦,当鼠移至画板上时,鼠标图标会变成橡皮样式,橡皮是一个2*2的一块小矩形区域,当使用者点击或者在画板上拖动鼠标时会将所经过的路径的颜色变成画板的背景颜色。 编辑 使用者可以对像编辑Word文档一样对画板上的图形选择撤销和重做。 编辑的动作包含了任何一种使用前面所给绘图工具所画的图形的画图动作,以及使用橡皮擦的擦除动作。 文件操作 在文件操作中使用者可以将当前画板上所有的图形以位图文件格式(BMP格式)保存至所选择的文件路径下。 也可以选择退出终止整个程序的运行。 系统数据结构及类的设计 主要类的层次结构Drawing2BitmapDlg类是MFC框架自带图形用界面CDialog对话框类的子类,创建用户界面、绘图板。 并且通过继承这个类Drawing2BitmapDlg对象可以实现Windows程序中的消息机制,接受并处理操作系统给程序对话框发送的消息。 该类的两个成员变量CPath和COperation分别为当前正在画板上绘制的图形,和程序正在执行的动作(如编辑、文件操作、改变绘图样式等)。 CPath是所有图形的基类,包含颜色和图元状态两个属性。 实现了绘图的Draw()方法。 它的所有子类都必须重写这个方法以实现不同图形的绘制。 : 图形处理类类图 程序设计的小技巧——多态技术应用。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。