学士学位论文--mfc图像变换系统的设计与实现.doc

上传人:可****阿 文档编号:93370037 上传时间:2023-07-03 格式:DOC 页数:38 大小:368.50KB
返回 下载 相关 举报
学士学位论文--mfc图像变换系统的设计与实现.doc_第1页
第1页 / 共38页
学士学位论文--mfc图像变换系统的设计与实现.doc_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《学士学位论文--mfc图像变换系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《学士学位论文--mfc图像变换系统的设计与实现.doc(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、MFC图像变换软件的设计与实现南 阳 理 工 学 院 本科生毕业设计(论文)学院(系): 软件学院 专 业: 软件工程 学 生: 指导教师: 完成日期 201 年 月31南阳理工学院本科生毕业设计(论文)MFC图像变换系统的设计与实现Design and Implementation of The Image Transform Software on MFC System总计:毕业设计(论文)40 页插 图 : 30 幅南 阳 理 工 学 院 本 科 毕 业 设 计(论文) MFC图像变换软件的设计与实现Design and Implementation of The Image Trans

2、form Software on MFC System学 院(系): 软件学院 专 业: 学 生 姓 名: 学 号: 指 导 教 师(职称): 评 阅 教 师: 完 成 日 期: 南阳理工学院 Nanyang Institute of TechnologyMFC图像变换软件的设计与实现软件工程 摘 要 随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的提高,对图像的要求也越来越高。本软件实现图像的图像底片化、图片灰度化、水平翻转、垂直翻转、负像等。图像的变换是很常见的处理方式,通过对图像的显示方式或者图像数据进行处理来实现不同的图像特效。本系统主要是面向BMP格式的24位图

3、像,本程序利用MFC编程技术,首先建立一个基于单文档的应用程序,添加子菜单按钮,分别实现各个特效功能。程序运行后,首先打开一个24位的BMP格式图像,选择实现不同的功能按钮。关键词 BMP图像 MFC Visual C+ 水平翻转 垂直翻转 灰度化 放大 缩小 底片化Design and Implementation of The Image Transform Software on MFC SystemThe major of software engineering Li YuanyuanAbstract: With the development of science and tech

4、nology, update speed computer continues to improve, peoples ideological and cultural qualities, the image are increasingly high requirements. The software implementation of the image, the picture negatives of gray, flip horizontal flip vertical, negative, etc.Image transform approach is very common,

5、 through or image data processing to achieve image effects to different display of the image. The system is mainly to 24 bit image based on BMP format, the program uses the MFC programming technology, first build an application based on a single document, Ka Ko the menu button, implementation of eac

6、h specific function. After the program is running, first open a BMP format image 24, choice of different functional buttons.Key words: BMP Image MFC Visual C+ Flip Horizontal Flip vertical Gray Amplification Negative目 录1 绪论111 研究的背景112国内外现状113研究的意义11.4 论文结构22 关键技术321 Visual C+3211 Visual C+简述3212 MF

7、C的简介3213 将Visual C+应用于数字图像的几何变换422 BMP图形和BMP文件结构4221 BMP文件结构4222 BMP图像的读写72.3图像变化的基本形式8231 图像的平移8232 图像的旋转9233 图像的缩放93 需求分析1131系统设计目标1132需求分析结果1133可行性分析12331经济可行性12332操作可行性124 概要设计1341 功能模块概述1342图像显示模块1443图像翻转模块1444图像浏览模块1445图像特效处理模块155 详细设计与系统实现1651图像显示模块的设计1652图像翻转模块17521水平翻转17522垂直翻转1953图像浏览模块215

8、31图像放大21532图像缩小2254图像特效处理22541图像灰度化处理23542图像负像246系统运行与总结2761图像打开2762水平翻转2763垂直翻转2864图像放大2865图像缩小2966图像灰度2967图像负像307结束语31参考文献32致谢33 1 绪论11 研究的背景 图像时现代信息社会中最基本的信息。数字图像处理的研究对象是图像处理技术,这是计算机技术的重要分支和发展方向。数字图像处理时信息科学、工程学、医学、生理学、甚至社会科学等许多学科的重要基础,同时也是一种具有巨大的经济和社会效益的使用技术,广泛应用于军事、气象、交通、探矿、水利、农业甚至娱乐等领域。随着信息高速公路

9、和数字地球等概念的提出和发展,数字图像处理技术已得到更加充分的发展,并在现代信息社会中占据了非常重要的低位。随着图像处理技术的广泛应用,学习和掌握这门科学显得格外重要,图像处理已经成为信息技术相关领域的核心课程。12国内外现状随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的提高,对图像的要求也越来越高。因此把原始图像与计算机结合起来,从而创作出许多更加完美的图像,满足人们的需求。计算机图像处理,是指利用计算机对图像进行一系列加工,以便获得人所们需要的效果。图像是人类获取和交换信息的主要来源,人类感知外界信息,80%以上是通过视觉得到的。因此,图像处理的应用领域必然涉及到人

10、类生活和工作的方方面面。图像处理或图像分析方法的应用越来越广泛,其主要理论基础是形态数学,立体学,集合论等。图像处理虽然也可以用光学方法或模拟技术来实现,但目前主要是利用计算机来实现,称为数字图像处理。因此,图像处理一般是指数字图像处理。常见的图像处理有图像数字化、图像编码、图像增强、图像复原、图像分割与图像分析等。经过处理后的图像,一定能够更好的被用于工业或者个人目的。为此开发这个数字图像处理软件,能够处理一些图像,并对图像处理技术此方面进行深入的研究。13研究的意义图像处理学是一门综合性边缘学科。从研究范围来看,它与计算机图形学、模式识别、计算机视觉等既有联系又有区别。图形学原本指用图形、

11、图表、绘图等形式表达数据信息的科学。而计算机图形学研究的是如何利用计算机技术来产生这些形式。和图像分析对比,两者的处理对象和输出结果正好相反。计算机图形学试图从非图像形式的数据描述来生成图像。另一方面,模式识别与图像分析则比较相似,只是前者试图把图像抽象成符号描述的类别,它们有相同的输入,而不同的输出结果之间可较方便的进行转换。至于计算机视觉主要强调用计算机去实现人的视觉功能,其中涉及图像处理的许多技术,但目前的研究内容主要与图像理解相结合。由此看来,以上学科相互联系,相互交叉,它们之间并没有绝对的界限。虽各有侧重但又相互补充。另外以上各学科都得到了人工智能、神经网络、遗传算法、模糊逻辑等新理

12、论、新工具、新技术的支持,所以它们又都在近年得到了长足发展。在计算机出现之前,模拟图像处理占主导地位。随着计算机的发展,数字图像处理发展速度越来越快。与人类对视觉机能着迷的历史相比,它是一门相对年轻的学科。尽管目前一般采用顺序处理的计算机,对大数据量的图像处理速度不如光学方法快,但是其处理的精度高,实现多种功能的、高度复杂的运算求解非常灵活方便。在其短短的历史中,它却成功的应用于几乎所有与成像有关的领域,并正发挥相当重要的作用。 1.4 论文结构本文共分为6章,各章主要内容介绍如下:第一章首先简单介绍课题研究的背景,国内外的发展状况、本系统研究的主要意义以及本论文的组织结构。第二章主要介绍系统

13、开发的平台,以及主要关键技术如:Visual C+、BMP图形和BMP文件结构、图像变化的基本形式等。第三章主要介绍本系统的系统设计目标、需求分析结果、可行性分析。第四章主要介绍课题的功能模块设计以及详细设计过程。先做出整体功能模块图,再对各功能模块进行概述,最后介绍个模块的流程图。第五章主要介绍系统主要编码与实现过程。第六章主要介绍系统运行与总结。2 关键技术21 Visual C+211 Visual C+简述Visual C+(简称VC)是微软公司提供的基于C/C+的应用程序集成开发工具。VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Web应用程序。

14、VC的优越性主要表现在以下几个方面: 开发分布式应用。 开发的应用程序运行效率高、具有健壮性。 能缩短软件升级周期。 能够生成多线程应用,而多线程应用对于增加并发响应有实际意义。VC除了提供高效的C/C+编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具。Visual C+6.0是功能最为强大的可视化开发工具之一,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。因此Visual C+6.0又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。Visual C+

15、具有多种优点:它提供了面向对象的应用程序框架MFC(Microsoft Foundation Class),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、Class Wizard、Visual Studio、Wizard Bar等,实现了直观、可视的程序设计风格,方便地编辑和管理各种类,维护程序的源代码;封装了Windows的API函数、USER、KERNEL、GDI函数,简化了编程时创建、维护窗口的许多复杂的工作。212 MFC的简介MFC的英文全称是Microsoft Foundation Class Library

16、,MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;Class Wizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。213 将Visual C+应

17、用于数字图像的几何变换VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具。在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用。22 BMP图形和BMP文件结构221 BMP文件结构BMP图像文件被分成4个部分:位图文件头(Bitmap File Header)、位图信息头(Bitmap Info Header)、颜色表(Color Map)和位图数据(即图像数据,Data Bi

18、ts或Data Body)。第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。其定义如下: typedef struct tagBITMAPFILEHEADERWORD bfType;DWORD bfSize;WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;BITMAPFILEHEADER结构的各个域详细说明如下:bfType:位图文件类型,必须是0x424

19、D,即字符串“BM”,也就是说,所有的“*.bmp”文件的头两个字节都是“BM”。bfSize:位图文件大小,包括这14个字节。bfReserved1, bfReserved2:Windows保留字,暂不用。bfOffBits:从文件头到实际的位图数据的偏移字节数,图2-1中前3个部分的长度之和。图2-1 BMP文件结构示意图第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。其定义如下: typedef struct tagBITMAPINF

20、OHEADERDWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCountDWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed;DWORD biClrImportant; BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;BITMAPINFOHEADER结构的各个域的详细说明如下:biSize

21、:本结构的长度,为40个字节。biWidth:位图的宽度,以像素为单位。biHeight:位图的高度,以像素为单位。biPlanes:目标设备的级别,必须是1。biBitCount:每个像素所占的位数(bit),其值必须为1(黑白图像)、4(16色图)、8(256色)、24(真彩色图),新的BMP格式支持32位色。biCompresssion:位图压缩类型,有效的值为BI_RGB(未经压缩)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均为Windows定义常量)。这里只讨论未经压缩的情况,即biCompression=BI_RGB。biSizeImage:实际的位图数据占用的字

22、节数,该值的大小在第4部分位图数据中有具体解释。biXPelsPerMeter:指定目标设备的水平分辨率,单位是像素/米。biYPelsPerMeter:指定目标设备的垂直分辨率,单位是像素/米。biClrUsed:位图实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次幂。biClrImportant:位图显示过程中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。第3部分为颜色表。颜色表实际上是一个RGBQUAD结构的数组,数组的长度由biClrUsed指定(如果该值为零,则由biBitCount指定,即2的biBitCount次幂个元素)。RGBQUAD结构是

23、一个结构体类型,占4个字节,其定义如下:typedef struct tagRGBQUADBYTE rgbBlue;BYTE rgbGreen;BYTE rgbRed;BYTE rgbReserved;RGBQUAD;RGBQUAD结构的各个域的详细说明如下:rgbBlue:该颜色的蓝色分量;rgbGreen:该颜色的绿色分量;rgbRed:该颜色的红色分量;rgbReserved:保留字节,暂不用。第4部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色图

24、,位图数据就是实际的R、G、B值(三个分量的存储顺序是B、G、R)。下面就2色、16色、256色位图和真彩色位图分别介绍。对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个像素。对于16色位图,用4位可以表示一个像素的颜色,所以1个字节可以表示2个像素。对于256色位图,1个字节刚好可以表示1个像素。对于真彩色图,3个字节才能表示1个像素。222 BMP图像的读写 2221 BMP图像的读:(1)首先定义BMP文件头和信息头变量BITMAPFILEHEADER bf; /BMP文件头结构体BITMAPINFOHEADER bi; /BMP信息头结构体

25、 (2)创建文件输入流 fp fp=fopen(fileName,rb); /fileName为BMP图像文件名(3)读取信息头、文件头fread(&bf,sizeof(BITMAPFILEHEADER),1,fp); fread(&bi,sizeof(BITMAPINFOHEADER),1,fp);经过这两条程序把BMP图像的信息头、文件头赋给bf和bi变量,可以根据bf和bi得到图像的各种属性。(4) 读取BMP调色板fread(ipRGB2,sizeof(RGBQUAD),256,fp); (5)读取BMP位图数据定义一个二维数组Imgdata来存取BMP位图数据unsigned cha

26、r * * Imgdata; Imgdata=new unsigned char*bi.biHeight; /声明一个指针数组for ( i=0;ibi.biHeight;i+) Imgdatai=new unsigned char(bi.biWidth*3+3)/4*4; /每个数组元素也是一个指针数组 for ( i=0;ibi.biHeight;i+ ) for(j=0;j=0;i-) for (j=0 ;j(bi.biWidth*3+3)/4*4;j+) fwrite(&Imgdataij,1,1,fp); 2.3图像变化的基本形式图像的基本变换形式,通常包括图像的平移、图像的镜像变换

27、、图像的转置、图像的缩放和图像的旋转等。231 图像的平移图像平移就是将图像中所有的点都按照指定的平移量水平、垂直移动。设(x0,y0)为原图像上的一点,图像水平平移量为tx,垂直平移量为ty,则平移后点(x0,y0)坐标将变为(x1,y1)。显然(x0,y0)和(x1,y1)的关系如下:用矩阵表示如下:对该矩阵求逆,可以得到逆变换: 即这样,平移后的图像上的每一点都可以在原图像中找到对应的点。例如,对于新图中的(0,0)像素,代入上面的方程组,可以求出对应原图中的像素(-tx,-ty)。如果tx或ty大于0,则(- tx,- ty)不在原图中。对于不在原图中的点,可以直接将它的像素值统一设置

28、为0或则255(对于灰度图就是黑色或白色)。同样,若有点不在原图中,也就说明原图中有点被移出显示区域。如果不想丢失被移出的部分图像,可以将新生成的图像宽度扩大|tx |,高度扩大| ty |。232 图像的旋转一般图像的旋转是以图像的中心为原点,旋转一定的角度。旋转后,图像的大小一般会改变。和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。可以推导一下旋转运算的变换公式。如下图所示,点(x0,y0)经过旋转度后坐标变成(x1,y1)。在旋转前:旋转后: 写成矩阵表达式为:233 图像的缩放图像的缩放操作将会改变图像的大小,产生的图像中的像素可能在原图中找不到相

29、应的像素点,这样就必须进行近似处理。一般的方法是直接赋值为和它最相近的像素值,也可以通过一些插值算法来计算。假设图像x轴方向缩放比率为fx,y轴方向缩放比率为fy,那么原图中点(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为:其逆运算如下: 即例如,当fx=fy=0.5时,图像被缩放到一半大小,此时缩小后图像中的(0,0)像素对应于原图中的(0,0)像素;(0,1)像素对应于原图中的(0,2)像素;(1,0)像素对应于原图中的(2,0)像素,以此类推。在原图基础上,每行隔一个像素取一点,每隔一行进行操作。其实是将原图每行中的像素重复取值一遍,然后每行重复一次。3 需求分析31系统设计目

30、标需求分析简单地说就是分析用户的需求。需求分析是设计系统的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。调查的重点是“数据”和“处理”,通过调查、收集与分析,获得用户对数据的要求如下:(1)图像的打开、关闭及保存:打开并显示图像,并在处理过图像后关闭或保存图像的修改。(2)处理要求。指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是

31、其他处理方式,能够完成图像一般的编辑处理。(3)处理效果与效率。图像处理中一个很重要的问题就是如何表示有关的知识并以恰当的方式引入图像处理。由于图像处理任务的复杂性,目前要找出一个通用的方法适应各种情况是几乎不可能的。另一方面,在建立普适的图像处理方法时,往往会忽略某类图像具有的特定属性。相反,针对某类特定问题,则可能找到有效的方法。为此,有研究者提出基于对象图像处理的概念:限定图像处理的对象为一类特殊的图像BMP,考察对象的共有属性(称为先验),并将其结合到图像处理的任务中以提供更多的信息,从而提升图像处理的性能、提高处理效果。由于图像的处理是通过对一个个像素点进行处理,要想提高处理速度就需

32、要寻找一个快速的处理方法。 本系统是Windows应用程序,可以进行图像的导入和导出,处理后的图片进行保存,图像的特效处理以及打印输出图片。32需求分析结果本系统的主要功能有:1. 图像文件的打开和保存,实现了对24位BMP格式图像的操作。2. 图像的复制,实现将位图像复制到其他的工具中。3. 图像的放大,实现图像按照原比例放大显示,呈现放大效果。4. 图像的缩小,实现图像按照原比例缩小显示,呈现缩小效果。5. 图像的水平翻转,实现对图像数据的左右水平方向的相互转换。6. 图像的垂直翻转,实现对图像数据的垂直上学方向的相互转换。7. 图像的负像处理,实现对图像的底片化效果显示。8. 图像的灰度

33、化处理,实现对彩色图像的黑白化处理33可行性分析331经济可行性 即考虑到成本问题,人力管理消耗大量的时间和物资而该系统只需极少部分人的管理且提高效益,这样就需要在管理中提供一个简单易操作可行性高的系统,也就是本项目所要开发的管理系统。并且开发一个小型的管理系统的成本也不高,是完全可以承受的。从这一方面来看,经济上是可行的。 332操作可行性 该软件主要是用Visual C+6.0作为系统的开发工具,软件开发高速发展的今天,技术发达,用来实现网络软件开发的工具很多,我们可以利用这些工具来进行研究。在windows操作系统下利用MFC实现界面化操作,建立基于单文档的应用程序。在添加子菜单完成各项

34、功能。MFC开发环境成熟,有庞大的库函数,有一系列的的规范,只需学习后恰当的调用,再需简单掌握MFC相关库函数就可获得图像位图阵列。从操作技术上是可行的。4 概要设计41 功能模块概述图像简单特效及加密处理系统是一个典型的图像处理软件,它由图像显示、图像翻转、图像翻转、图像浏览、图像特效等模块组成。1. 图像显示模块该模块主要是可以打开一个位图文件即BMP格式的图像,并能将BMP格式的图像进行复制到剪贴板上,载将位图复制在其他工具中的模块。2. 图像翻转模式该模块主要是将位图图像进行旋转包括将水平方向翻转,垂直方向翻转及顺时针90旋转的模块。3. 图像浏览模块该模块主要是可以对位图进行缩放显示

35、包括对图像的按照多大的比例放大和缩小或按照原来大小显示位图。4. 图像特效模块该模块主要是对位图进行一些特效功能处理包括图像负像、图片灰度化二个部分。负像就是将图像转换成底片形式,图像灰度化就是将彩色转变为灰度图像时图像失去色彩。5. 帮助模块该模块主要包括软件的版本、开发单位等信息。本系统的功能模块图设计如下4.1所示图4.1 功能模块图42图像显示模块图像复制打开一张24位的BMP格式图像,就能显示一个BMP格式的图像,并运行复制功能后,本图像可以复制在其他的工具中。 如打开一个BMP格式位图后,在编辑中,点击“复制”,再打开一个别的工具如文档,鼠标右击后选择“粘贴”,那么这个BMP格式的

36、图像就显示在文档中。43图像翻转模块(1)水平翻转打开一张24位的BMP格式的图像,运行水平翻转功能,点击垂直翻转子菜单,程序开始处理图像,处理后的图像左右两边的像素转换过来显示。(2)垂直翻转打开一张24位的BMP格式的图像,运行图像垂直翻转功能,点击垂直翻转子菜单,程序开始处理图像,处理好的图像上下两边的像素转换过来显示。44图像浏览模块(1)图像放大打开一张24位的BMP格式的图像,运行图像放大功能,点击图像放大子菜单,程序开始处理图像,处理后的图像按照原来的比例扩大来显示。(2)图像缩小打开一张24位的BMP格式的图像,运行图像缩小功能,点击图像缩小子菜单,程序开始处理图像,处理后的图

37、像按照原来的比例缩小来显示。45图像特效处理模块(1)图像底片化处理打开一张24位的BMP格式的图像,运行图像底片化处理功能,程序就开始反相图像,把图片变成像底片一样的效果。(2)图像灰度化处理彩色图像被灰度化位黑白图像。在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有以下四种方法对彩色图像进行灰度化: 将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。 f1(i,j)=R(i,j) f2(i,j)=G(i,j) f3(i,j)

38、=B(i,j) 其中fk(i,j)(k=1,2,3)为转换后的灰度图像在(i,j)处的灰度值。5 详细设计与系统实现在每个功能模块中都用到了函数,void Invalidate( BOOL bErase = TRUE ),该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为 窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了

39、 OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。51图像显示模块的设计图像显示模块是能够读取位图文件以及图像的复制功能。图像复制图像复制就是图像可以复制在其他的工具中。本功能是将位图数据转化为DIB格式数据在复制在剪贴板上。流程见图5.15-1复制功能流程图关键代码:BOOL CDIB:Copy()if (m_lpBits = 0) return FALSE;if (!OpenClipboard(NULL) return FALSE;EmptyClipboard();HGLOBAL hMem;BYTE *lp

40、Dib;int nLen = sizeof(BITMAPINFOHEADER)+ BYTE_PER_LINE(m_nWidth, m_nBitCount)*m_nHeight;hMem = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, nLen);lpDib = (BYTE *)GlobalLock(hMem);SaveToDib(lpDib);GlobalUnlock(hMem);SetClipboardData(CF_DIB, hMem);CloseClipboard();return TRUE;52图像翻转模块521水平翻转水平翻转将图像水平方向的像素

41、点沿着中间线进行翻转,处理过程为:获得当前设备指针,指向当前设备, 定义三个无符号的的指针,为翻转图像申请一段内存空间,大小为图像内存大小。内层循环将每一行的像素点进行翻转,左侧的像素移到右侧,右侧的像素点移到左侧外层循环将所有行的像素进行翻转将左侧的像素点移到右侧,讲右侧的像素点移到左侧。invalidate()函数进行窗体的重绘。实现过程见图5.25-2图像水平翻转流程图关键代码:BOOL CDIB:VFlip()if (!m_lpBits) return FALSE;int y, nByteWidth;BYTE *p1, *p2, *pm;nByteWidth = BYTE_PER_LI

42、NE(m_nWidth, m_nBitCount);pm = new BYTEnByteWidth;for (y=0; ym_nHeight/2; y+)p1 = m_lpBits+y*nByteWidth;p2 = m_lpBits+(m_nHeight-y-1)*nByteWidth;memcpy(pm, p1, nByteWidth); memcpy(p1, p2, nByteWidth); memcpy(p2, pm, nByteWidth);delete pm;return TRUE;522垂直翻转垂直翻转实现图像垂直方向的像素对称翻转,处理过程为:获得当前设备指针,指向当前设备, 定义三个无符号的的指针,为翻转图像申请一段内存空间,大小为图像内存大小。内层循环将每一行的像素点进行翻转,左侧的像素移到右侧,右侧的像素点移到左侧外层循环将所有行的像素进行翻转将左侧的像素点移到右侧

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁