




免费预览已结束,剩余34页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)学 院: 专 业: 班 级: 姓 名: 毕业设计题目简单的图形编辑程序指导教师 20XX 年3 月21 日摘要该文以计算机图形学及图像处理的理论为基础,提出了图像分析与处理的一些基本功能;文中给出了大量图形生成函数,有Windows封装的,有自定义的,突出了图形处理的编程实现。本文还较深入的研究了WINDOWS下绘图,算法,图形的保存方法,bmp文件的转换。利用visualc+6.0开发工具实现了绘制直线,圆弧,圆,矩形,图形的自定义文件格式保存,通过对图形算法的研究,实现了矢量图形的保存。关键词:图形学;算法, vc+目 录摘要2第一章 绪论31.1 项目背景31.2目的和意义41.3系统设计思想4第二章 系统原理和开发工具52.1 VC+概述52.1.1 编辑器方面的新特性52.1.2、编译器、连接器和调试器方面的改进52.2 windows绘图概述6第三章 系统算法设计83.1 软件结构设计83.2 基本图元算法93.2.1 直线类93.2.2 方形类93.2.3 圆形类103.2.4 B曲线类113.2.5 多边形类11第四章 系统详细设计124.1 界面设计124.2 存储结构设计12第五章 系统测试135.1 测试原则135.1.1 8020原则135.1.2全程测试145.1.3测试具有免疫性145.2 模块测试结果145.2.1画图测试145.2.2缩放选择测试15第六章 结论15参考文献16致 谢16第一章 绪论1.1 项目背景1950年,第一台图形 示器作为美国麻省理工学院旋风l号)计算机的附件诞生了。在整个50年代,只有电子管计算机,用机器语言编程,主要应用于科学计算,为这些计算机配置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期,开称之为:“被动式”图形学。到50年代朱期,MIT的林肯实验室在“旋风”计算机上开发SAGE空中防御体系,操作者可以用笔在屏幕上指出被确定的目标。它预示着文瓦式计算机图形学的诞生。l962年,MIT林肯实验室的IvailE Sutherland发表了1篇题为“Sketchpad:一个人机交 通信的图形系统”的博士论文,他在论文中首次使用了计算机图形学“Computer Graphics”这个术语,证明交互计算机图形学是一个可行的、有用的研究领域,从而确定交互计算机图形学作为一个崭新的科学分支的独 地位。同在60年代早期,法国雷诺汽车公司的工程师Pierre Bezier发展了1套傲后人称为Bezier曲线、曲面的理论,成功地用于几何外形设计,并开发了用于汽车外形设计的UNISUI F系统。2O世纪7O年代,计算机图形学另外两个重要进展是真实感图形学和实体造型技术的产生。另外,从1973年开始,相继出现了英国剑桥大学CAD小组的Build系统、美国罗彻斯特大学的PADI T系统等实体造 系统。1980年Whitted提出了一个光透视模型whitted模型,并第一次给出光线跟踪算法的范例,实现whjtted模型;1984年,美国Corne大学和日本广 岛大学的学者分别将热辐射工程中的辐射度的方法引入到计算机图形学中,用辐射度方法成功地模拟,理想漫反射表面问的多重漫反射效果;光线跟踪算法和辐射度算法的提出,标志着真实感图形的显示算法已逐渐成熟。从20世纪80年代中期以来,超大规模集成电路的发展,为图形学的飞速发展奠定了物质基础。计算机的运算能力的提高,图形处理速度的加快,使得图形学的各个研究方向得到充分发展,图形学已广泛应用于动画、科学计算可视化、CADCAM、影视娱乐等各个领域。 1.2目的和意义本系统设计的目的就是要设计一个系统软件,实现基本的图形作图,并且实现对图元函数的操作主要是选择和缩放功能。通过本系统的实现,力求使得做出比画图程序功能更加强大。1.3系统设计思想一个方便用户使用的软件应该具备软件体积小,操作界面友好,基本功能稳定,运行速度较快,通过计算机技术及网络技术结合开发出客户端与服务器端,以便方便快捷清晰的进行数据传输,和简易通讯功能。实用性:系统以用户需求为目标,以方便用户为原则。根据用户实际的需求情况,度身订造一套先进的局域网数据传输,从用户角度出发尽可能的方便用户使用,满足基本的用户需要,成为公司学校等通用的软件。先进性:本设计将充分应用现有成熟的计算机技术、网络技术、软件开发技术。以VC6.0为主要开发环境,其优秀的编码体制和强大的编译器是此系统的强力支柱。高可靠性:一个实用的系统同时必须是可靠的,本设计通过合理而先进的网络设计以及软、硬件的优化选型,可保证系统数据传输的正确性。高安全性:在设计中,将充分利用网络软、硬件提供的各种安全措施,既可以保证用户共享资源,同时也可保证关键数据的安全性。采用标准技术:本系统的所有设计遵循国际上现行的标准进行,以提高系统的开放性。可维护性:系统的设计要求方便维护,包括硬件的维护,软件的维护(更改,升级等)和网络的维护。可扩展性及灵活性:系统的设计以方便未来业务的扩展和系统扩充为目标,系统要求能够方便的升级,充分保护系统的投资。第二章 系统原理和开发工具2.1 VC+概述Visual C+是当今最被广泛使用的可视化编程环境,为我们提供了一种方便、快捷的Windows 应用程序开发工具。它使用了Microsoft Windows 图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。Visual C+ 6.0 是Visual C+系列的最新版本,是为Windows 98 或Windows 2000 等32 位操作系统开发应用程序用的编程工具,功能强大,界面友好,操作方便。与Visual C+系列以前的版本相比而言,VC6.0 提供了许多新的特性,大致可以分为以下几方面。2.1.1 编辑器方面的新特性VC6.0 在集成开发环境的编辑器做了一些改进,以方便用户快速准确地编辑代码和资源,这些新特性主要包括:1)自动完成语句功能:在用户编辑代码时,编辑器根据光标当前位置判断作用的类或对象,在一个下拉列表中显示相应的内容,如类的成员、函数原型、标识符定义等等。自动完成语句功能减轻了用户在输入长的类名或成员对象名时的繁琐工作,方便了用户的使用。2)快速宏录制:用户可以将集成开发环境中特定的连续操作定义为宏,在需要再次使用类似操作的时候只需调用已录制好的宏即可。3)支持IE5 新控件的资源编辑器:新版本的资源编辑器支持IE5 提供的四种新控件,在资源编辑器中可以方便地将这些新控件添加到工具栏或者对话框中。2.1.2、编译器、连接器和调试器方面的改进VC6.0 在集成开发环境的编译器、连接器和调试器方面也做了大的改进,其目的就是使得用户的应用程序运行起来更快、更稳定,调试起来更方便。1) 编译器方面的改进:包括新添加的“_assume”关键字、增强对内联函数的控制、新增并更新了警告、加强了运行时刻的错误检测等内容。2)连接器方面的改进:包括延迟加载外部支持、增添了新的连接选项和修正了外部函数的接口以减小文件尺寸等内容。3)调试器方面的改进:包括改善了反汇编输出、改善了指针对象的显示、支持进程中的远程过程调用等内容。2.2 windows绘图概述Windows应用程序绘制图形时使用的是一种逻辑单位,每个逻辑单位的大小由映射模式决定, 这个逻辑单位既可以与设备单位(屏幕或打印机上的一个像素点)相同,也可以是一种物理单 位(如毫米),还可以是用户自定义的一种单位。在Windows应用程序中,只要与输出有关系,都 要使用映射模式。当Windows应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用x和y 两个坐标表示,x表示横坐标,y表示纵坐标。在所有的GDI绘制函数中,这些坐标使用的是一 种逻辑单位。当GDI函数将输出送到某个物理设备上时,Windows将逻辑坐标 转换成设备坐标(如屏幕或打印机的像素点)。逻辑坐标和设备坐标的转换是由映射模式决 定的。映射模式被储存在设备环境中。GetMapMode函数用于从设备环境得到当前的映射模 式,SetMapMode函数用于设置设备环境的映射模式。 1.逻辑坐标 逻辑坐标是独立于设备的,它与设备点的大小无关。使用逻辑单位,是实现所见即所得的基础。当程序员在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸) 长的线时,他并不需要考虑输出的是何种设备。若设备是VGA显示器,Windows自动将其转化为96个像素点;若设备是一个300dpi的激光打印机,Windows自动将其转化为300个像素点。 2.设备坐标 Windows将GDI函数中指定的逻辑坐标映射为设备坐标,在所有的设备坐标系统中,单位以像素点为准,水平值从左到右增大,垂直值从上到下增大。Windows中包括以下3种设备坐标,以满足各种不同需要:(1)客户区域坐标,包括应用程序的客户区域,客户区域的左上角为(0,0)。(2)屏幕坐标,包括整个屏幕,屏幕的左上角为(0,0)。屏幕坐标用在WM_MOVE消息中(对于非子窗口)以及下面的Windows函数中:CreateWindow和MoveWindow(都对于非子窗口)、GetMessage、GetCursorPos、GetWindowRect、WindowFromPoint和SetBrushOrg中。用函数ClientToScreen和ScreenToClient可以将客户区域坐标转换成屏幕区域坐标,或反之。 (3)全窗口坐标,包括一个程序的整个窗口,包括标题条、菜单、滚动条和窗口框,窗口的左上角为(0,0)。使用GetWindowDC得到的窗口设备环境,可以将逻辑单位转换成窗口坐标。3.逻辑坐标与设备坐标的转换方式 映射方式定义了Windows如何将GDI函数中指定的逻辑坐标映射为设备坐标。要继续讨论映射方式我们要介绍Windows有关映射模式的一些术语:我们将逻辑坐标所在的坐标系称为窗口,将设备坐标所在的坐标系称为视口。窗口依赖于逻辑坐标,可以是像素点、毫米或程序员想要的其他尺度。 视口依赖于设备坐标(像素点)。通常,视口和客户区域等同。但是,如果程序员用GetWindowDC或CreateDC获取了一个设备环境,则视口也可以指全窗口坐标或屏幕坐标。点(0,0)是客户区域的左上角。x的值向右增加,y的值向上增加。对于所有映射模式,Windows都用下面两个公式将窗口坐标转换成视口坐标:xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrgyViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+yViewOrg其中,(xWindow,yWindows)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备点。如果设备坐标是客户区域坐标或全窗口坐标,则Windows在画一个对象前,还必须将这些坐标转换成屏幕坐标。这两个公式使用了分别指定窗口和视口原点的点:(xWinOrg,yWinOrg)是逻辑坐标的窗口原点;(xViewOrg,yViewOrg)是设备坐标的视口原点。在缺省的设备环境中,这两个点均设置为(0,0),但它们可以改变。此公式意味着,逻辑点(xWinOrg,yWinOrg)总被映射为设备点(xViewOrg,yViewOrg)。Windows还能将视口(设备)坐标转换为窗口(逻辑)坐标:xWindow=(xViewport-xViewOrg)*(xWinExt/xViewExt)+xWinOrgyWindow=(yViewport-yViewOrg)*(yWinExt/yViewExt)+yWinOrg可以使用Windows提供的两个函数DPtoLP和LPtoDP在设备坐标及逻辑坐标之间互相转换。实际应用中,遇到一些与显示模式有关的问题。例如OLEServer中映射模式 的设置、如何减少逻辑坐标与设备坐标间相互转换的误差等。下面,笔者就讨论一下这两个 问题的解决方法。1.映射模式的设置方法开发应用程序时,如果直接调用SetMapMode函数将映射模式设置成度量映射方式中的一种后,在Windows95/98上程序会正常运行,但在WindowsNT上对象显示的大小比边框小。经过研究后,发现WindowsNT上使用基于逻辑英寸的映射方式。在讨论如何设置基于逻辑英寸的映射方式前,我们先介绍一下逻辑英寸的概念。Windows在显示时以逻辑英寸为单位,逻辑英寸比实际的英寸要大。如果Windows程序使用实际英寸,则普通的10磅文本在显示器上就会小到几乎难以辨认,因此Windows使用放大了的逻辑英寸来表示文本。逻辑英寸只影响显示,而不影响打印。使用GetDeviceCaps函数可得到当前设备的各种能力,其第一个参数nIndex指示要获取信息的类型。当nIndex为HORZSIZE和VERTSIZE时,可得到显示区域的宽度和高度;当nIndex 为HORZRES和VERTRES时,可得到每个水平和垂直方向的像素数即分辨率;当nIndex的值为LOGPIXELSX 和LOGPIXELSY时,可得到水平和垂直方向每逻辑英寸所含像素数。在介绍了逻辑英寸的知识以后,很容易将OLEServer设置为基于逻辑英寸的映射模式。如果程序员仅仅调用SetMapMode(hdc,MM_LOENGLISH)来设置映射模式,当前的映射模式为物理英寸,而不是逻辑英寸。设置逻辑英寸必须自定义窗口和视口的范围,使xViewExt/xWinExt =0.01逻辑英寸中水平像素的点数,当xViewExt=LOGPIXELSX,xWinExt=100时,其比值正好满足上述要求。以下是设置映射模式的代码。intxLogPixPerInch=GetDeviceCaps(hdc,LOGPIXELSX);intyLogPixPerInch=GetDeviceCaps(hdc,LOGPIXELSY);SetMapMode(MM_ANISOTROPIC);SetWindowExt(100,100);SetViewportExt(xLogPixPerInch,yLogPixPerInch); 上述代码中调用SetMapMode函数将映射模式设置为自定义的,该调用必须位于SetWindowExt 和SetViewportExt调用之前,否则设置将会无效。 上述代码实际上将映射模式设置成逻辑MM_LOENGLISH,若程序员需要设置逻辑MM_LOMETRIC、MM_HIMETRIC、MM_HIENGLISH 或MM_TWIPS,只需修改上述代码中的SetWindowExt的参数,该参数实际上是每英寸所包含的各种映射模式下的单位数。根据表中各映射模式的参数,可得到表中每英寸所对应的各逻辑单位的个数。例如,要设置逻辑MM_TWIPS,函数SetWindowExt中的参数为应1440。 当我们将映射模式设置成基于逻辑英寸的MM_LOMETRIC时,窗口的范围设为256,视口的范围设为96(在VGA显示器下LOGPIXELSX的值),约2.6个逻辑单位对应1个像素,这显然会造成不小的误差,它会表现在应用程序的各个方面:客户区的一个部分没有被刷新;对象之间本来没有间距,却显示出有间距;对象在屏幕的不同位置上会缩小或增大一个像素等问题。可以采取以下两个步骤避免转换误差。(1)尽量选择窗口范围和视口范围比可以整除的映射方式,例如基于逻辑英寸的MM_TWIPS其窗口范围和视口范围比1440/96,可简化为15/1,从设备坐标转化为逻辑坐标时没有误差,从消除误差角度看,MM_TWIPS比其他几个映射模式都要好。(2)窗口范围和视口范围比不能整除时,也尽量将其简化,例如,当采用0.3900mm 中的将1个逻辑单位映射成1/64英寸的映射方式时,其窗口范围和视口范围比值为64/96,可简化为2/3。如果我们将逻辑单位的值都取为2的倍数,设备单位的值都取为3的倍数,转换后就没有精度的丢失了。综上所述,如果我们能够根据映射模式值的特点,逻辑坐标和设备坐标都取经简化的窗口和视口范围值的倍数,则逻辑坐标和设备坐标间的转化将没有误差第三章 系统算法设计3.1 软件结构设计MFC 框架中最容易被程序员和用户两者都见到的部分就是文档和视图。你在利用应用框架编写程序时的大部分工作是编写你的视图类和文档类。因此,我们有必要详细了解文档/视图结构。文档/视图结构是基于MFC 库的应用的一个重要特性。它将的实质就是将数据本身与用户对数据的观察和操作分离开来。所有的数据变化都在文档类中进行管理,同时它为视图对它的访问提供一个接口。视图调用两者间的接口来响应用户的操作,进行数据的修改,并且不断更新对文档的显示。这样就允许对同一数据可以有多个视图。 本软件使用文档视图结构,采用多文档的结构方式。3.2 基本图元算法 3.2.1 直线类直线类的继承结构如图:CObject-CUnit-CDline,直线类名为:CDline,主要结构如下:class CDLine:public CUnitpublic:virtual void OnMouseMove(CDC*pDC,CEastDrawView*pView,CPoint point);virtual void OnLButtonDown(CDC *pDC, CEastDrawView *pView, CPoint point);virtual void DrawActive(CDC *pDC,CPoint point);virtual BOOL IsInRgn(CPoint point);virtual void ShowSelectPoint(CDC*pDC);virtual void Circumrotate(CPoint first,CPoint second);virtual int IsOnMarginPoint(CPoint point); virtual void Initial();virtual CRgn* GetRgn();CDLine(); virtual void DrawStatic(CDC*pDC); DECLARE_SERIAL(CDLine);主要画图的算法如下:CPen m_pen; m_pen.CreatePen(m_PenStyle,m_PenWidth,m_PenColor); CPen* pen=(CPen*)pDC-SelectObject(&m_pen); COLORREF OldColor=pDC-SetBkColor(m_BackgroundColor); int OldBkMode=pDC-SetBkMode(m_BkMode); pDC-MoveTo(m_FirstPoint); pDC-LineTo(m_SecondPoint); pDC-SelectObject(pen); pDC-SetBkMode(m_BkMode); 3.2.2 方形类class CRectangle:public CUnitpublic:virtual void OnMouseMove(CDC*pDC,CEastDrawView*pView,CPoint point);virtual void OnLButtonDown(CDC *pDC, CEastDrawView *pView, CPoint point);virtual void DrawActive(CDC *pDC,CPoint point);virtual void ShowSelectPoint(CDC *pDC);virtual BOOL IsInRgn(CPoint point);virtual int IsOnMarginPoint(CPoint point);CRectangle();virtual void Serialize(CArchive &ar); virtual void DrawStatic(CDC*pDC);DECLARE_SERIAL(CRectangle);画图算法如下:CPen m_pen; CBrush m_brush; m_pen.CreatePen(m_PenStyle,m_PenWidth,m_PenColor); CPen* pen=(CPen*)pDC-SelectObject(&m_pen); LOGBRUSH brushlog; brushlog.lbColor=m_BrushColor; brushlog.lbHatch=m_BrushHatch; brushlog.lbStyle=m_BrushStyle; m_brush.CreateBrushIndirect(&brushlog); SetBrushOrg(pDC,&m_brush); CBrush*brush=(CBrush*)pDC-SelectObject(&m_brush); int OldBkMode=pDC-SetBkMode(m_BkMode); COLORREF OldColor=pDC-SetBkColor(m_BackgroundColor); pDC-Rectangle(CRect(m_FirstPoint,m_SecondPoint); pDC-SelectObject(brush); pDC-SelectObject(pen); pDC-SetBkMode(OldBkMode); pDC-SetBkColor(OldColor); 3.2.3 圆形类class CRound:public CUnit DECLARE_SERIAL(CRound)public:void OnMouseMove(CDC*pDC,CEastDrawView*pView,CPoint point);virtual void OnLButtonDown(CDC *pDC, CEastDrawView *pView, CPoint point);virtual void DrawActive(CDC *pDC,CPoint point);virtual void ShowSelectPoint(CDC *pDC);virtual void Serialize(CArchive &ar);virtual int IsOnMarginPoint(CPoint point);virtual BOOL IsInRgn(CPoint point);virtual int ComputRadious(CPoint centerPoint, CPoint movingPoint);virtual void DrawStatic(CDC*pDC);CRound(); 3.2.4 B曲线类class CPolyBezier:public CUnit DECLARE_SERIAL(CPolyBezier)public:virtual void OnContextMenu(CWnd *pWnd, CPoint point);virtual void Serialize(CArchive& ar);virtual void OnMenuitemOk(CDC *pDC, CEastDrawView *pView);virtual BOOL IsInRgn(CPoint point);virtual int IsOnMarginPoint(CPoint point);void DrawMaskPoint(CDC*pDC);virtual void ShowSelectPoint(CDC*pDC);virtual void DrawStatic(CDC*pDC);virtual void OnMouseMove(CDC*pDC,CEastDrawView*pView,CPoint point);virtual void OnLButtonDown(CDC*pDC,CEastDrawView*pView,CPoint point);virtual void DrawActive(CDC *pDC,CPoint point);CPolyBezier();CPoint*m_PointList;BOOL m_HaveDrawFirst; 3.2.5 多边形类class CPolygon:public CUnit DECLARE_SERIAL(CPolygon) public: virtual void OnMouseMove(CDC*pDC,CEastDrawView*pView,CPoint point); virtual void OnLButtonDown(CDC *pDC, CEastDrawView *pView, CPoint point); virtual void DrawActive(CDC *pDC,CPoint point); virtual void ShowSelectPoint(CDC *pDC); virtual void ExchangeDraw(CDC *pDC, CPoint point); virtual BOOL IsInRgn(CPoint point); virtual int IsOnMarginPoint(CPoint point); virtual void DrawEnd(CDC*pDC,CPoint point); CPolygon(); virtual void DrawMask(CDC*pDC,CPoint point); virtual void DrawStatic(CDC*pDC); virtual void Initial();void Serialize(CArchive &ar);第四章 系统详细设计4.1 界面设计4.2 存储结构设计存储格式包括两种,一种是位图结构,一种是矢量图结构。位图结构的保存代码设计为:CEastDrawView*pView;POSITION pos=GetFirstViewPosition();pView=(CEastDrawView*)GetNextView(pos); returnpView-SaveDIB(NULL,file);矢量图格式存储代码设计为:if (ar.IsStoring() arm_TotalSize; arthis-m_TotalSize;arm_CenterPoint;/ TODO: add loading code herem_DLineArray.Serialize(ar);m_CurveArray.Serialize(ar);m_RectangleArray.Serialize(ar); m_PolygonArray.Serialize(ar);m_RoundRectangleArray.Serialize(ar);m_RoundArray.Serialize(ar);m_EllipseArray.Serialize(ar); m_LiEllipseArray.Serialize(ar);m_RoundArcArray.Serialize(ar);m_PolyBezierArray.Serialize(ar);m_TextArray.Serialize(ar);m_EllipseArcArray.Serialize(ar);第五章 系统测试5.1 测试原则5.1.1 8020原则80的软件缺陷常常生存在软件20的控件里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其“高危多发”地段 。在那里发现软件缺陷的可能性会大的多。这一原则对软件测试人员提高测试效率及缺陷发现串有着重大的意义。5.1.2全程测试如果单纯的将程序设计阶段后的阶段称之为软件测试的话,需求阶段和设计阶段的缺陷产生的放大效应会加大。这非常不利于保址软件质最。需求缺陷、设计缺陷也是软件缺陷,记住“软件缺陷具有生育能力”。软件测试跨越整个软件开发流程。需求验证(自检)和设计验证(白检)也可以算作软件测试的一种。软件测试应该是一个泛型概念,涵盖整个软什生命周期,这样才能确保周期的每个阶段禁得起考验软件测试是提高软件产品质量的必要条件而非充分条件,软件测试是提高产品质量最直接、最快捷的手段,但决不是一个根本于段。5.1.3测试具有免疫性软件缺陷与病毒一样具有可怕的”免疫性” ,测试人员对 采用的测试越多,其免疫能力就越强,寻找更多软什缺陷就更加困难。在软件测试中采用单一的方法不能高效和完全的针对所有软件缺陷, 此软件测试应该尽可能的多采用多种途径进行测试。5.2 模块测试结果5.2.1画图测试5.2.2缩放选择测试第六章 结论通过实际使用,我们感觉这套系统的优势是:1具备一定的绘图功能使我们可以很好的作图,在很大程度上掌握了工作的主动性,提高了效率;2方便的图形保存,使用起来方便快捷;3界面设计合理,使用美观,方便。 通过毕业设计我收获不少主要是以下几个方面:一是对软件工程知识进行了系统的学习,在实践中丰富了自己,提高了自己。通过模块分析设计,系统的选择与设计,进一步加深了所学习的知识。二是对于VC编程有了一点的实践能力。通过对数据库系统的设计,提高了自己的编程能力。在VC编程有了很大的提高。三是学会了自主学习。通过不断的学习查找资料,我深深体会到学习的重要性。 同时我也感到了自身的不足,一是知识有限,需要不断的加强学习,在新技术不断涌现的今天要不断提高自身的知识水平。二是理论和实践还有一定的差距,需要在今后的工作中不断提高理论和实践的水平。 参考文献1 胡晓军,邓波,高宏伟等Visual C+高级开发范例解析,电子工业出版社,20022 David J.Kruglinski,潘爱民 译Visual C+技术内幕,人民邮电出版社,20043 吴文奎 最流行图像格式实用参考手册,电子工业出版社,19984徐慧,Visual C+数字图像实用工程案例精选,人民邮电出版社,20045 胡峪Visual C+编程技巧与示例,西安电子科技大学出版,20026袁峰Windows图形编程,人民邮电出版社,2004致 谢当这篇论文最终完成的时候,我要向给予过我热情帮助和悉心指导的老师和师兄们致以真诚的谢意。首先,我要感谢我的导师,感谢他带给我来学习的机会,感谢他对我学术上的悉心指导,感谢他对我生活上的关怀和体贴。老师是不仅是我学业上的导师,更是生活中让我敬佩的学者、长者。给我留下深刻印象的,是他知识的渊博、治学态度的严谨、诲人不倦的学者风范,是他谦逊待人、处处关心别人的长者风度,是他勤奋忘我的工作态度、精益求精的治学作风。特别是老师做大事的风范和气度,尤其让我钦佩。毕业设计(论文)学 院: 专 业: 班 级: 姓 名: 毕业设计题目简单的图形编辑程序指导教师 20XX 年3 月21 日摘要该文以计算机图形学及图像处理的理论为基础,提出了图像分析与处理的一些基本功能;文中给出了大量图形生成函数,有Windows封装的,有自定义的,突出了图形处理的编程实现。本文还较深入的研究了WINDOWS下绘图,算法,图形的保存方法,bmp文件的转换。利用visualc+6.0开发工具实现了绘制直线,圆弧,圆,矩形,图形的自定义文件格式保存,通过对图形算法的研究,实现了矢量图形的保存。关键词:图形学;算法, vc+目 录摘要2第一章 绪论31.1 项目背景31.2目的和意义41.3系统设计思想4第二章 系统原理和开发工具52.1 VC+概述52.1.1 编辑器方面的新特性52.1.2、编译器、连接器和调试器方面的改进52.2 windows绘图概述6第三章 系统算法设计83.1 软件结构设计83.2 基本图元算法93.2.1 直线类93.2.2 方形类93.2.3 圆形类103.2.4 B曲线类113.2.5 多边形类11第四章 系统详细设计124.1 界面设计124.2 存储结构设计12第五章 系统测试135.1 测试原则135.1.1 8020原则135.1.2全程测试145.1.3测试具有免疫性145.2 模块测试结果145.2.1画图测试145.2.2缩放选择测试15第六章 结论15参考文献16致 谢16第一章 绪论1.1 项目背景1950年,第一台图形 示器作为美国麻省理工学院旋风l号)计算机的附件诞生了。在整个50年代,只有电子管计算机,用机器语言编程,主要应用于科学计算,为这些计算机配置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期,开称之为:“被动式”图形学。到50年代朱期,MIT的林肯实验室在“旋风”计算机上开发SAGE空中防御体系,操作者可以用笔在屏幕上指出被确定的目标。它预示着文瓦式计算机图形学的诞生。l962年,MIT林肯实验室的IvailE Sutherland发表了1篇题为“Sketchpad:一个人机交 通信的图形系统”的博士论文,他在论文中首次使用了计算机图形学“Computer Graphics”这个术语,证明交互计算机图形学是一个可行的、有用的研究领域,从而确定交互计算机图形学作为一个崭新的科学分支的独 地位。同在60年代早期,法国雷诺汽车公司的工程师Pierre Bezier发展了1套傲后人称为Bezier曲线、曲面的理论,成功地用于几何外形设计,并开发了用于汽车外形设计的UNISUI F系统。2O世纪7O年代,计算机图形学另外两个重要进展是真实感图形学和实体造型技术的产生。另外,从1973年开始,相继出现了英国剑桥大学CAD小组的Build系统、美国罗彻斯特大学的PADI T系统等实体造 系统。1980年Whitted提出了一个光透视模型whitted模型,并第一次给出光线跟踪算法的范例,实现whjtted模型;1984年,美国Corne大学和日本广 岛大学的学者分别将热辐射工程中的辐射度的方法引入到计算机图形学中,用辐射度方法成功地模拟,理想漫反射表面问的多重漫反射效果;光线跟踪算法和辐射度算法的提出,标志着真实感图形的显示算法已逐渐成熟。从20世纪80年代中期以来,超大规模集成电路的发展,为图形学的飞速发展奠定了物质基础。计算机的运算能力的提高,图形处理速度的加快,使得图形学的各个研究方向得到充分发展,图形学已广泛应用于动画、科学计算可视化、CADCAM、影视娱乐等各个领域。 1.2目的和意义本系统设计的目的就是要设计一个系统软件,实现基本的图形作图,并且实现对图元函数的操作主要是选择和缩放功能。通过本系统的实现,力求使得做出比画图程序功能更加强大。1.3系统设计思想一个方便用户使用的软件应该具备软件体积小,操作界面友好,基本功能稳定,运行速度较快,通过计算机技术及网络技术结合开发出客户端与服务器端,以便方便快捷清晰的进行数据传输,和简易通讯功能。实用性:系统以用户需求为目标,以方便用户为原则。根据用户实际的需求情况,度身订造一套先进的局域网数据传输,从用户角度出发尽可能的方便用户使用,满足基本的用户需要,成为公司学校等通用的软件。先进性:本设计将充分应用现有成熟的计算机技术、网络技术、软件开发技术。以VC6.0为主要开发环境,其优秀的编码体制和强大的编译器是此系统的强力支柱。高可靠性:一个实用的系统同时必须是可靠的,本设计通过合理而先进的网络设计以及软、硬件的优化选型,可保证系统数据传输的正确性。高安全性:在设计中,将充分利用网络软、硬件提供的各种安全措施,既可以保证用户共享资源,同时也可保证关键数据的安全性。采用标准技术:本系统的所有设计遵循国际上现行的标准进行,以提高系统的开放性。可维护性:系统的设计要求方便维护,包括硬件的维护,软件的维护(更改,升级等)和网络的维护。可扩展性及灵活性:系统的设计以方便未来业务的扩展和系统扩充为目标,系统要求能够方便的升级,充分保护系统的投资。第二章 系统原理和开发工具2.1 VC+概述Visual C+是当今最被广泛使用的可视化编程环境,为我们提供了一种方便、快捷的Windows 应用程序开发工具。它使用了Microsoft Windows 图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。Visual C+ 6.0 是Visual C+系列的最新版本,是为Windows 98 或Windows 2000 等32 位操作系统开发应用程序用的编程工具,功能强大,界面友好,操作方便。与Visual C+系列以前的版本相比而言,VC6.0 提供了许多新的特性,大致可以分为以下几方面。2.1.1 编辑器方面的新特性VC6.0 在集成开发环境的编辑器做了一些改进,以方便用户快速准确地编辑代码和资源,这些新特性主要包括:1)自动完成语句功能:在用户编辑代码时,编辑器根据光标当前位置判断作用的类或对象,在一个下拉列表中显示相应的内容,如类的成员、函数原型、标识符定义等等。自动完成语句功能减轻了用户在输入长的类名或成员对象名时的繁琐工作,方便了用户的使用。2)快速宏录制:用户可以将集成开发环境中特定的连续操作定义为宏,在需要再次使用类似操作的时候只需调用已录制好的宏即可。3)支持IE5 新控件的资源编辑器:新版本的资源编辑器支持IE5 提供的四种新控件,在资源编辑器中可以方便地将这些新控件添加到工具栏或者对话框中。2.1.2、编译器、连接器和调试器方面的改进VC6.0 在集成开发环境的编译器、连接器和调试器方面也做了大的改进,其目的就是使得用户的应用程序运行起来更快、更稳定,调试起来更方便。1) 编译器方面的改进:包括新添加的“_assume”关键字、增强对内联函数的控制、新增并更新了警告、加强了运行时刻的错误检测等内容。2)连接器方面的改进:包括延迟加载外部支持、增添了新的连接选项和修正了外部函数的接口以减小文件尺寸等内容。3)调试器方面的改进:包括改善了反汇编输出、改善了指针对象的显示、支持进程中的远程过程调用等内容。2.2 windows绘图概述Windows应用程序绘制图形时使用的是一种逻辑单位,每个逻辑单位的大小由映射模式决定, 这个逻辑单位既可以与设备单位(屏幕或打印机上的一个像素点)相同,也可以是一种物理单 位(如毫米),还可以是用户自定义的一种单位。在Windows应用程序中,只要与输出有关系,都 要使用映射模式。当Windows应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用x和y 两个坐标表示,x表示横坐标,y表示纵坐标。在所有的GDI绘制函数中,这些坐标使用的是一 种逻辑单位。当GDI函数将输出送到某个物理设备上时,Windows将逻辑坐标 转换成设备坐标(如屏幕或打印机的像素点)。逻辑坐标和设备坐标的转换是由映射模式决 定的。映射模式被储存在设备环境中。GetMapMode函数用于从设备环境得到当前的映射模 式,SetMapMode函数用于设置设备环境的映射模式。 1.逻辑坐标 逻辑坐标是独立于设备的,它与设备点的大小无关。使用逻辑单位,是实现所见即所得的基础。当程序员在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸) 长的线时,他并不需要考虑输出的是何种设备。若设备是VGA显示器,Windows自动将其转化为96个像素点;若设备是一个300dpi的激光打印机,Win
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 踇外翻手术治疗
- 幕墙技术案例分享
- 外研社综合教程2讲解
- 人工智能科学解构与前沿发展
- 协和药物研究所
- 女性发型知识讲解
- 现代谋略布局方法论
- 绳子魔术教学讲解
- 小红帽故事讲解
- 农业环保技术项目
- 2025年纪委遴选笔试题及答案
- 小学英语教师教学工作总结(模板稿)
- 工行分类分级管理办法
- 送配电线路工(送电)-初级工模拟题含答案(附解析)
- 供应商物流管理办法规定
- 高级健康评估在护理个案中的应用
- 采购成本管理培训课件
- 2025年青岛水务集团招聘笔试冲刺题2025
- 湖北武汉江岸区2024~2025学年高一下册期末质量检测数学试题学生卷
- 2025届甘肃平凉中考真题试卷数学试题【含答案】
- 装饰装修施工应急响应措施
评论
0/150
提交评论