收藏 分销(赏)

基于vc--的图像特效显示研究(设计).doc

上传人:胜**** 文档编号:2479002 上传时间:2024-05-30 格式:DOC 页数:49 大小:1.55MB
下载 相关 举报
基于vc--的图像特效显示研究(设计).doc_第1页
第1页 / 共49页
基于vc--的图像特效显示研究(设计).doc_第2页
第2页 / 共49页
基于vc--的图像特效显示研究(设计).doc_第3页
第3页 / 共49页
基于vc--的图像特效显示研究(设计).doc_第4页
第4页 / 共49页
基于vc--的图像特效显示研究(设计).doc_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、基于VC+的图像特效显示研究 基于VC+的图像特效显示研究作者姓名:XXX专业名称:电子信息科学与技术指导教师:XXX讲师IV摘要图像的特效显示在计算机技术领域应用广泛,Windows的屏幕保护程序就采用了各种各样的图像特效显示,使人感到耳目一新。本论文阐述了基于VC+设计图像特效显示的基本原理和方法,研究了现有的扫描特效显示、栅条特效显示、马赛克特效显示,并分析了这些显示的相关算法,通过研究创新设计出两个特效显示渐变百叶窗特效和泡泡腐蚀特效,介绍了这两个特效显示的算法实现及软件界面的设计实现过程。界面是基于MicrosoftVisualC+6.0MFC多文档编程的图像处理界面,实现.bmp格

2、式图像的浏览与编辑,导入和导出,图像特效显示,边缘检测,旋转和翻转图片,图片增强优化,以及打印输出图片。是一款功能较简洁的数字图像管理界面,实现对.bmp格式图像的操作。该界面包含两部分:启动界面和主界面。BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,一般来说BMP文件分成4个部分:位图头文件,位图信息头,颜色表,位图数据.同时BMP文件文件可以分为DIB格式和DDB格式,其中DIB格式是与设备无关的BMP文件,通用性很强.Windows支持一些重要的DIB访问函数,但都没有封装到MFC中,这里我们封装了一个DI

3、B类,其包含DIB文图处理所需要的基本成员变量和成员函数,进而以该类为基类派生其他类,实现程序的维护和移植,从而利用面向对象的方式实现图像的可视化编程。 关键词:特效显示;扫描;栅条;马赛克;VC+;数字图像处理 1Abstract Special effects show for images is applied in the field of computer technology widely. The Windows screen savers use a variety of image special effects which feel refresh. This paper

4、describes the basic principles and methods of image special effects show based on VC+. The algorithm of the effect shows including scanning special effect show, bar special effect show and mosaic special effect show are studied. This paper also designes two special effectsGradually changing blinds a

5、nd corroding bubble. The implementation of the display algorithm and software interface designment are realized in this paper.ThedigitalimageprocessinginterfaceisbasedonMicrosoftVisualC+6.0MFCmulti-documentimageprocessingprogramminginterface,toachieve.Bmpformatforimagebrowsingandediting,importandexp

6、ort,imageeffectsshowedthatedgedetection,rotateandflipimages,picturesenhancetheoptimization,aswellasprintoutputpicture.Isafunctionofthedigitalimagethanthesimplemanagementinterface,toachieve.Bmpformatimagesoftheoperation.Theinterfacecontainstwoparts:interfaceandthemaininterfacetostart.BMPfileisaWindow

7、soperatingsystemandsupporttherecommendedimagefileformat,isamemoryordisplaythecompressedimagedataisnotdirectlybasedondigitalarchivingoffileformats,BMPfilesaregenerallydividedintofourparts:thefirstbitmapdocuments,BITMAPINFOHEADER,colortable,thebitmapdata.Atthesametime,BMPfileformatsandcanbedividedinto

8、DIBformatDDB,DIBformatwhichhasnothingtodowiththeequipmentoftheBMPfiles,astrongGM.WindowsinsupportoftheDIBtovisitanumberofimportantfunction,butarenotpackagedintheMFC,wherewehaveapackagetypeDIB,theDIBincludesVenturaneededtodealwithmembersofthebasicvariablesandmemberfunctions,andsuchabaseclassforothert

9、ypesofderivatives,therealizationoftheproceduremaintenanceandtransplantation,andthustheuseofobject-orientedwayofprogrammingthevisualimage.Key words: Special effects show,scanning, bar; mosaic,VC + +目 录摘 要IAbstractII目 录III1 数字图像发展概述11.1 数字图像引言11.2 数字图像简史21.3 数字图像现状31.4 数字图像未来方向32 基于VC+图像显示的理论基础52.1 Mi

10、crosoft Visual C+编程概述52.1.1 Windows程序特点52.1.2 C+语言62.1.3 Microsoft Visual C+ 6.0环境62.1.4 MFC简介72.1.5 图形设备接口、GDI对象72.2 OpenCV的简介82.2.1 OpenCV概述82.2.2 OpenCV的特点93 常见的图像特效显示103.1显示特效方法理论概述103.1.1特效显示基础103.1.2显示特效过程103.1.3显示特效类113.2 栅条显示123.2.1栅条显示特效的特效预览123.2.2 基本原理和实现方法123.3 马赛克显示特效143.3.1 马赛克显示特效的特效预

11、览143.3.2基本原理和实现方法153.3.3 编程实现163.4 移动显示特效183.4.1 移动显示特效显示预览183.4.2基本原理和实现方法向右移动183.4.3 编程实现203.5 百叶窗显示特效213.5.1 基本原理和实现方法213.5.2 基本原理和实现方法223.5.3 编程实现233.6 对于常见特效显示算法的改进254 设计一个图像浏览工具GraphShower264.1 两个特效显示及其算法264.1.1 渐变百叶窗显示264.1.2 泡泡腐蚀显示304.2 VC+程序界面设计354.2.1 CDC类的派生类设计354.2.2 CDialog类的派生类的成员函数设计3

12、64.2.3 基本窗口设计374.3 测试分析及总结38结 语40致 谢42参考文献43IV 基于VC+的图像特效显示研究21 数字图像发展概述1.1 数字图像引言数字图像处理就是用计算机对图像进行分析和处理,它是一门跨学科的技术。视觉是人类从大自然中获取信息的最主要的手段,而图像正是人类获取视觉信息的主要途径,图像处理,就是对图像信息进行加工以满足人的视觉心理或应用需求的行为。随着电子技术和计算机技术的不断提高和普及,图像处理学逐渐进入到数字图像处理阶段,计算机的运算速度大大提高,这大大促进数字图像处理技术的发展,数字图像处理也称之为计算机图像处理。目前数字图像处理的应用越来越广泛,已经渗透

13、到工业、医疗保健、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用,其中最典型的应用是在通信工每个图像的像素通常对应于二维空间中一个特定的位置,并且有一个或者多个与那个点相关的采样值组成数值。根据这些采样数目及特性的不同数字图像可以划分为:二值图像(Binary Image): 图像中每个像素的亮度值(Intensity)仅可以取自0到1的图像。 灰度图像 (Gray Scale Image),也称为灰阶图像: 图像中每个像素可以由0(黑)到255(白)的亮度值表示。0-255之间表示不同的灰度级。 彩色图像 (Color Image):每幅彩色图像是由三幅不同颜色的灰度图像组合而成,

14、一个为红色,一个为绿色,另一个为蓝色。 伪彩色图像(false-color) multi-spectral thematic立体图像(Stereo Image):立体图像是一物体由不同角度拍摄的一对图像,通常情况下我们可以用立体像计算出图像的深度信息。 三维图像 (3D Image):三维图像是由一组堆栈的二位图像组成。每一幅图像表示该物体的一个横截面。数字图像也用于表示在一个三维空间分布点的数据,例如计算机断层扫描(:en:tomographic,CT)设备生成的图像,在这种情况下,每个数据都称作一个体素。1.2 数字图像简史数字图像处理始于20世纪50年代,之后便迅速发展,尤其是在1964

15、年,美国喷射推进实验室(NASA JPL)使对“徘徊者7号”探测器发来的几千张月球照片进行几何校正、灰度变换、去除噪声等处理,得到了清晰逼真的图像,使这门技术受到了广泛的关注,它成为这门技术发展的重要里程碑,此后数字图像处理技术在空间研究方面得到了广泛的应用。1972年英国EMI公司工程师Housfield发明了用于头颅诊断的X射线计算机断层摄影装置,也就是我们通常所说的CT(Computer Tomograph)。CT的基该方法是根据人的头部截面的投影,经计算机处理来重建截面图像,称为图像重建。目前,数字图像处理在生物医学、通信、流通领域,产业界、文件处理领域,军事、遥感,宇宙探险及日常生活

16、中被广泛应用,已经成为当代不可缺少的一门技术。1975年EMI公司又成功研制出全身用的CT装置,获得了人体各个部位鲜明清晰的断层图像。1979年,这项无损伤诊断技术获得了诺贝尔奖,说明它对人类作出了划时代的贡献。与此同时,图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就,属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等,使图像处理成为一门引人注目、前景远大的新型学科。随着图像处理技术的深入发展,从70年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,数字图像处理向更高、更深层次发展。人们已开始研究如何用计算机系统解释图像,

17、实现类似人类视觉系统理解外部世界,这被称为图像理解或计算机视觉。很多国家,特别是发达国家投入更多的人力、物力到这项研究,取得了不少重要的研究成果。其中代表性的成果是70年代末MIT的Marr提出的视觉计算理论,这个理论成为计算机视觉领域其后十多年的主导思想。图像理解虽然在理论方法研究上已取得不小的进展,但它本身是一个比较难的研究领域,存在不少困难,因人类本身对自己的视觉过程还了解甚少,因此计算机视觉是一个有待人们进一步探索的新领域。1.3 数字图像现状Mallat在1988年有效地将小波分析应用于图像分解和重构小波分析被认为是信号与图像分析在数学方法上的重大突破。随后数字图像处理技术迅猛发展,

18、到目前为止,图像处理在图像通讯、办公自动化系统、地理信息系统、医疗设备、卫星照片传输及分析和工业自动化领域的应用越来越多。当今社会数字图像应用相当广泛,包括应用于生物医学、通信、流通领域、军事和公安、遥感等方面,并且有着不可替代的作用!进入21世纪,随着计算机技术的迅猛发展和相关理论的不断完善,数字图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就。属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等。该技术成为一门引人注目、前景远大的新型学科。1.4 数字图像未来方向图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类

19、生活和工作的方面。MFC,微软基础类(MicrosoftFoundationClasses),同VCL类似,是一种ApplicationFramework,随微软VisualC+开发工具发布。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject直接或间接派生,只有少部分类例外。数字图像的优点体现在:再现性好:数字图像处理与模拟图像处理的根本不同在于,它不会因图像的存储、传输或复制等一系列变换操作而导致图像质量的退化。只要图像在数字化时准确地表现了原稿,则数字图像处理过程始终能保持图像的真实再现。处理精度高:按目前的技术,几乎可将一幅模拟图像数字化为任意大小的二维数组,这主

20、要取决于图像数字化设备的能力。现代扫描仪可以把每个像素的灰度等级量化为位甚至更高,这意味着图像的数字化精度可以满足任一应用需求。从原理上讲不论图像的精度有多高,处理总是能实现的,只要在处理时改变程序中的数组参数就可以了。适用面宽:图像可以来自多种信息源。从图像反映的客观实体尺度看,可以小到电子显微镜图像,大到航空照片、遥感图像甚至天文望远镜图像。这些来自不同信息源的图像只要被变换为数字编码形式后,均是用二维数组表示的灰度图像组合而成,因而均可用计算机来处理。灵活性高:由于图像的光学处理从原理上讲只能进行线性运算,极大地限制了光学图像处理能实现的目标;而数字图像处理不仅能完成线性运算,且能实现非

21、线性处理,即凡是可以用数学公式或逻辑关系来表达的一切运算均可用数字图像处理实现。信息压缩的潜力大:数字图像中各个像素是不独立的,其相关性大。在图像画面上,经常有很多像素有相同或接近的灰度。就电视画面而言,同一行中相邻两个像素或相邻两行间的像素,其相关系数可达以上,而相邻两帧之间的相关性比帧内相关性一般说还要大些。因此,图像处理中信息压缩的潜力很大。随着科学技术的发展,数字图像处理技术的应用领域也将随之不断扩大。数字图像处理技术未来应用领域主要有航天航空技术方面、生物医学工程方面、通信工程方面、工业工程方面、军事公安方面、文化艺术方面的应用、其它方面的应用。 2 基于VC+图像显示的理论基础2.

22、1 Microsoft Visual C+编程概述Microsoft VisualC+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliSense(自动完成功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文

23、件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著。2.1.1 Windows程序特点Windows下的应用程序使用图形设备接口(GDI)来进行图形输出。GDI屏蔽了不同设备的差异,提供了设备无关的图形输出能力,Windows应用程序只要发出设备无关的GDI请求(如调用Rectangle画一个矩形),由GDI去完成实际的图形输出操作。对于一台具有打印矩形功能的PostScript打印机来说,GDI可能只需要将矩形数据传给驱动程序就可以了,然后由驱动程序产生PostScript命令绘制出相应的矩形;而对于一台没有矩形输出功能的点阵打印机来说,

24、GDI可能需要将矩形转化为四条线,然后向驱动程序发出画线的指令,在打印机上输出矩形。2.1.2 C+语言C+语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。C+以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C+完美地体现了面向对象的各种特性。图2.1体现了C+语言的运行过程:图2.1 C+程序运行过程2.1.3 Microsoft Visual C+ 6.0环境Visual C+ 6.0,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“

25、机器语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用有很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。2.1.4 MFC简介微软基础类(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,

26、随微软Visual C+开发工具发布。目前最新版本为10.0(截止2011年3月),并且发布了中文版。该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject 直接或间接派生,只有少部分类例外。MFC实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎。VC+是Windows下开发人员使用的专业C+ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包。MFC作为与VC+血肉相连的部分(注意C+和VC+的区别:C+是一种程序设计语言,是一种大家都承认的软件编制的通用规范;而VC+只

27、是一个编译器,或者说是一种编译器+源程序编辑器的IDE( IDE的英文全称为“Integrated Development Environment”,即“集成开发环境”。),WSPlatForm,这跟Pascal和Delphi的关系一个道理。Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系。Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言)。MFC同VC+

28、集成的VCL一样是一个非外挂式的软件包类库,只不过MFC类是微软为VC+专配的。2.1.5 图形设备接口、GDI对象 以往许多MSDOS程序采用直接向视频存储区或打印机端口输送数据,这种做法不利之处是需要各种显示卡(低分辨率彩色图形显示卡、加强图形显示卡、图像图形阵列以及VGA)或打印机驱动程序,支持所有这些设备意味着要用大量的编程来包含这些驱动程序(为每一个设备编定不同的代码)。为了减轻开发程序的难度,Windows提供了一个抽象的接口,图形设备接口Graphics Device Interface(GDI)。另外Windows还提供了各种显示卡及打印机的驱动程序,这样在写程序时就可以不必关

29、心显示卡和打印机的类型,简化了程序开发的难度。GDI是个抽象的概念,GDI接口是微软公司提供的一组绘图函数,通常称之为GDI函数,使用这些函数可以绘制各种图形。MFC类库对GDI函数进行封装,将其封装为不同的GDI对象,采用GDI对象进一步简化了图形、图像处理程序的开发难度。常用到的GDI对象有: 1.CPen:笔是一种用来画线及绘制有形边框的工具,可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线; 2.CBrush:刷子定义了一种位图形式的像素,利用它可对区域内部填充颜色; 3.CBitmap:位图是一种位矩阵,每一个显示像素都对应于其中的一个或多个位。可以利用位图来表示图像,也可以

30、利用它来创建刷子; 4.CRgn:区域是由多边形、椭圆或二者组合形成的一种范围,可以利用它来填充、裁剪以及鼠标点中测试; 5.CFont:字体是一种具有某种风格和尺寸的所有字符的完整集合,它常常被当作资源存于磁盘中,其中有一些还依赖于某种设备; 6.CPalette:调色板是一种颜色映射接口,它允许应用程序在不干扰其他应用程序的前提下,充分利用输出设备的颜色描绘能力。2.2 OpenCV的简介2.2.1 OpenCV概述penCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和

31、Mac OS操作系统上。它轻量级而且高效由一系列 C 函数和少量 C+ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库尽管也可以使用某些外部库。OpenCV 为Intel Integrated Performance Primitives (IPP) 提供了透明接口。 这意味着如果有为特定处理器优化的的 IPP 库, OpenCV 将在运行时自动加载这些库。2.2.2 OpenCV的特点计算机视觉市场巨大而且持续增长,且这方面没有标准A

32、PI,如今的计算机视觉软件大概有以下三种:1.研究代码(慢,不稳定,独立并与其他库不兼容)2.耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)3.依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备),这是如今的现状。而标准的API将简化计算机视觉程序和解决方案的开发。OpenCV致力于成为这样的标准API。OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。右图为OpenCV

33、与当前其他主流视觉函数库的性能比较。3 常见的图像特效显示本章主要研究了目前比较流行的图像特效显示中的栅条显示、马赛克显示、移动显示特效和百叶窗显示特效的效果,分析其实用性并对相关算法进行优化改进。3.1显示特效方法理论概述3.1.1特效显示基础扫描显示图像是最基本的特效显示方法,可以分为上下左右四个方向的扫描显示,对于向下的显示它表现为图像一行一行的从最顶端开始显示图像直到整个图像显示出来,效果有点像拉幕布的感觉。图像显示特效主要包括显示和擦出两大部分。显示特效就是利用特效将图像显示在屏幕上的过程,而擦出是显示的逆过程利用特效将图像还原为背景色。特效实现的原理是图像分块显示,简单说来,就是将

34、图像分成不同的小块,按照一定的方向、顺序先后显示在屏幕上。3.1.2显示特效过程其实现方法为:取图像最上面一行像素点显示出来,再加上时间延迟,再取剩下的图像部分中的最上面一行,如此循环,直至整个加载入设备内存中的图像显示完成。显示特效的整个过程如图3.1所示:图3.1 显示特效的过程3.1.3显示特效类 其关键实现代码如下:int SleepTime=20; int temp=10; for(UINT y=0;yStretchBlt(IncX, IncY+y, /显示在设备上的起点x,y坐标 bs.bmWidth,temp, /显示在设备上的宽度和高度 &dc, /源位图设备情境对象 0, y

35、, /提取源位图中显示区起点x,y坐标 bs.bmWidth,1,/提取源位图像素宽高 SRCCOPY);显示模式 Sleep(SleepTime);/时间延迟 SleepTime默认为20 3.2 栅条显示3.2.1栅条显示特效的特效预览栅条显示特效的特效如图3.2所示:图3.2 栅条显示运行效果图 3.2.2 基本原理和实现方法 栅条显示即交错显示。垂直交错效果表现为:设备上端下端各出现一幅由横向线条组成的图像相对移动,直至两图像刚好重叠成一幅完整清晰的图像。其实现方法为:分别取待显示位图的奇数行和偶数行做为向上和向下的两幅图,分别向上和向下移动,直至显示到待定的位置,此时两图刚好组合成一

36、幅完整的图像。栅条显示的基本原理如表3.1:表3.1 编程实现类别说明图像分块将图像按照一定宽度分成横向的图像块。图像块的编号从上到下分别为1、2、3.n显示顺序编号为奇数的图像块从左向右移动,编号为偶数的图像块从右向左移动显示方法 将编号为技术的图像块向左移动距离i,所有编号为偶数的图像块向右移动距离i。 延时 如果i不等于nWidth,则使i加1,重复步骤栅条实现代码如下: int i,j;int buf=1;/栅条的高度 取奇数跟偶数号行时用1int SleepTime=10;/时间延迟int low_height=(bs.bmHeight-bs.bmHeight/buf*buf); i

37、nt temp_height= bs.bmHeight-low_height-(bs.bmHeight/buf-bs.bmHeight/buf/2*2)*buf; /当buf!=1时 取偶数根buf高度像素条后剩下的最小高度 /用于放置在最下面到最后显示出来 使不影响整体效果if(low_height0) this-StretchBlt(IncX,IncY+bs.bmHeight-low_height,bs.bmWidth, low_height, &dc,0,0,bs.bmWidth,low_height,SRCCOPY), Sleep(speed*buf);/对上面提及的low_heigh

38、t高度像素条区域置图像for(i=1;i=1;j-) this-StretchBlt(IncX,IncY+(j-1)*2*buf,bs.bmWidth,buf, &dc,0,(bs.bmHeight/buf/2-i)*2*buf+(j-1)*2*buf,bs.bmWidth,buf,SRCCOPY);this-StretchBlt(IncX,IncY+temp_height-(2*j-1)*buf,bs.bmWidth,buf, &dc, 0,(i-j)*2*buf+buf,bs.bmWidth,buf,SRCCOPY); /对上下出现的栅条进行相对移动 this-StretchBlt(Inc

39、X,IncY+bs.bmHeight-low_height, bs.bmWidth,low_height, &dc, 0,i*2*buf,bs.bmWidth,low_height,SRCCOPY); /对由于buf!=1时产生的图像最后空隙进行填补 /填补的高度与上面的buf不同Sleep(SleepTime*buf);this-BitBlt(IncX,IncY,bs.bmWidth,bs.bmHeight,&dc,0,0,SRCCOPY);/对整个图像显示的最后一次产生的空隙进行填补3.3 马赛克显示特效3.3.1 马赛克显示特效的特效预览马赛克显示特效如图3.3所示:图3.3 马赛克特效

40、显示运行效果图3.3.2基本原理和实现方法就用RGB来举例子,R(red红色),G(green绿色),B(blue蓝色)。这三种颜色每种都有0255范围内的强度值,数字越高越亮,例如,亮红色使用 R 值 255、G 值 0 和 B 值 0,有色光可被无色光冲淡并变亮。如蓝色光与白光相遇,结果是产生更加明亮的浅蓝色光。所以R、G、B的值的不同来混合颜色。例如一张图片,他们当中是有很多不同颜色的小色块的,由于这些色块的像素非常非常的小而且密密麻麻的,而打马赛克就是圈出一个范围(小色块为整数的范围,所以一般都用长方形或正方形去圈),把在圈内的小色块的R值全加起来,求出平均数。然后再把G值全加起来,求

41、平均数。接着把B值全加起来,求平均。最后把上面总R值的平均数为R值,上面总G值的平均数为G值,上面总B值的平均数为B值,就形成了一种颜色,然后就把这种颜色涂满圈内,这样就形成了马赛克。马赛克显示特效原理如表3.2:表3.2 马赛克特效的基本原理类别说明图像分块将图像分成大小相同的小方块,每个小方块就是一个图像块显示顺序随即显示显示方法 对所有图像块编号 通过程序产生随机数,挑选需要显示的图像块并将其复制显示 将已显示的图像块从集合中剔除 延时 如果集合中还有图像块,重复步骤3.3.3 编程实现马赛克特效显示编程如下:*作用:马赛克特效*/void EffectDisplay:MosaicDis

42、play(CDC* pDC, CDC* pMemDC)int nTileSize = 24; / 马赛克小方块大小int nRw = 0;int nRh = 0;if (s_nPicWidth % nTileSize != 0)nRw = 1;if (s_nPicHeight % nTileSize != 0)nRh = 1;/ 计算小方块的个数int nTileCount = (s_nPicWidth / nTileSize + nRw) * (s_nPicHeight / nTileSize + nRh);CPtrArraypoints;/ 保存所有小方块的左上坐标longlx = 0;l

43、ongly = 0;for (int k = 0; k x = lx;point-y = ly;lx = lx + nTileSize;if (lx = s_nPicWidth)lx = 0;ly = ly + nTileSize;points.Add(point);int nDelayTime = 2;if (s_nPicHeight * s_nPicWidth 600 * 500)nDelayTime = 1;LARGE_INTEGER seed;QueryPerformanceFrequency(&seed);QueryPerformanceCounter(&seed);/初始化一个以微

44、秒为单位的时间种子srand(int)seed.QuadPart);for (int i = nTileCount - 1; i = 0; i-)int n = rand() % (i + 1);CPoint* point = (CPoint*)pointsn;lx = point-x;ly = point-y;pDC-BitBlt(lx + s_nOffsetX, ly + s_nOffsetY, nTileSize, nTileSize, pMemDC, lx + s_nOffsetX, ly + s_nOffsetY, SRCCOPY);SAFE_DELETE (point);points.RemoveAt(n);PDelayTime(nDelayTime);3.4 移动显示特效3.4.1 移动显示特效显示预览移动显示特效通过不断改变图像显示的大小和位置,使图像呈现水平

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服