《毕业设计(论文)-基于C 的图片浏览器设计(1)》_第1页
《毕业设计(论文)-基于C 的图片浏览器设计(1)》_第2页
《毕业设计(论文)-基于C 的图片浏览器设计(1)》_第3页
《毕业设计(论文)-基于C 的图片浏览器设计(1)》_第4页
《毕业设计(论文)-基于C 的图片浏览器设计(1)》_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

********学院信息工程系毕业设计(论文)第21页共21页******学院信息工程系毕业设计(论文)第PAGEI页共21页摘要图片浏览器是日常应用中必可少的应用软件之一,本次毕业设计中,运用C#来设计图片浏览器。文中详细叙述了浏览器的详细制作过程。采用C#提供的控件数组来实现,并对可视区内的图形进行局部更新方法进行了详述。系统功能主要有图片的浏览、预览、图片拷贝、删除、粘贴等功能。并增加了各种键盘控制功能。实现了对多种格式图形的浏览,包括gif、JPG、BMP、ICO等图片格式。本图片浏览程序具有实用性、稳定性、易用性,和可维护性的特点,系统留了扩展接口,用户可以根据实际需要对其功能进行扩充、完善与修改,使其符合自己的要求。总之,本系统是一个逐步完善的系统。关键词:图片浏览器;控件数组;局部更新目录摘要 III目录 IV第一章开发环境的介绍 11.1C#的由来 11.2C#的特点 11.3.NET开发平台 3第二章问题的定义及可行性研究 52.1问题的定义 52.2可行性研究 5第三章需求分析 63.1需求分析阶段的任务 63.2系统功能的详细分析 6第四章总体设计 74.1总体设计阶段的任务 74.2图片浏览软件功能的具体分析 8第五章详细设计 95.1系统功能的详细设计与实现 95.1.1MainForm窗体: 95.1.2FrmCreateFolder窗体 105.1.3FrmLoadPic窗体 105.1.4PicInfo.cs窗体 115.1.5Folder.cs窗体 115.1.6FrmCreateFolder.cs窗体 125.1.7FrmLoadPic.cs窗体 135.1.8MainForm.cs窗体 145.2关键技术介绍 15第6章测试 176.1软件测试的目的和方法 176.2软件测试的步骤 17第7章总结与展望 18致谢 19附录1 20******学院信息工程系毕业设计(论文)*******学院信息工程系毕业设计(论文)第1页共22页第一章开发环境的介绍1.1C#的由来在过去的一段时间中,C和C++一直是商业软件的开发领域中最具生命力的语言。虽然他们为程序员提供了丰富的功能。高度的灵活性和强大的底层控制力,但是利用C、C++语言开发的Windows应用程序显然复杂了很多,同时也牺牲了一定的效率与VB相比,同等级的C、C++完成一个程序往往需要更多的时间来完成开发,因此各层人士都试图寻找一种新的语言,希望能在功能和功率之间找到一种更为理想的平衡点。针对这一问题,微软公司与2000年6月26日正式发布C#。C#是一种最新的、面向对象的编程语言,C#使得程序员可以在Miscrsoft开发的最新的.NET平台上快速的编写应用程序。C#是一种简单、现代、面向对象且类型安全的编程语言,C#语言从C和C++语言演化而来,同时C#具备了应用程序快速开发(RapidApplicationDevelopment,RAD)语言的高效率和C++固有的强大能力,并吸收了Java和Delphi等语言的特点和精华,是.NET开发的首选语言。1.2C#的特点1.简洁易用的语法C#主要从C和C++继承而来,同时吸收Java和Delphi的优点,摒弃了C和C++中一些比较复杂而且不常用的语法元素比如父类继承。使用C和C++时最令程序员生畏的语法是什么?大多数程序员会说:指针!C和C++中的指针虽然功能强大,但极不安全,稍不小心就会导致程序出错,甚至导致系统奔溃。C#取消了指针,不允许直接对内存进行操作,让代码运行在安全的环境中。此外,C#语法的很多变化无不体现了C#的简洁之美。2.自动的资源回收机制C#与.NET的完美集成,使得C#完全拥有.NET的自动回收机制。在windows中,提供给程序使用的一切软、硬件统称为资源。比如程序中需要在窗口上画图的笔就是一种资源,在早期的windows版本中,程序使用完资源后应该及时解放,否则会导致系统资源不足而运行变慢。在.NET框架中,由于资源使用完后由系统自动清理,所以,编写C#程序,不必小心翼翼地保证及时释放资源,从而可以把更多的精力放在程序编写的逻辑上。3.与WEB的紧密结合网上办公和电子商务在各行各业中的到越来越广泛的的应用,B/S模式程序的市场需求越来越多。在微软的.NET开发套件中,C#与ASP.NET是相互融合的。ASP.NET的应用程序可以使用VB.NET语法,也可以使用C#语法。使用C#语法编写的ASP.NET结构更严谨,运行更高效。由于有了WEB服务框架的帮助,对程序员来说,网络服务看起来就像是C#的本地对象。程序员们能够利用他们已有的面对对象的只是和技巧开发WEB服务。仅需要使用简单的C#语言结构,C#组件就能够方便地为WEB服务,并允许它们通过Internet被运行在任何操作系统上的任何语言所调用。4.完整的安全性与错误处理语言的安全性与错误处理能力,是衡量一种语言是否优秀的重要依据。任何人都会犯错,即使是最熟练的程序员也不例外,如忘记变量的初始化,对不属于自己管理范围内存的空间进行修改等。这些错误常常产生难以预计的后果。一旦这样的软件被投入使用,寻找与改正这些简单错误的代价是让人无法估计的。C#的先进设计思想可以消除软件开发中的许多常见错误,并提供了包括类型安全在内的完整的安全性能。为减少开发中的错误,C#帮助开发者通过更少的代码完成相同的功能,这部大减轻了编程人员的工作量同时更有效的避免了从错误的产生。5.版本处理技术升级软件系统中的组件(模块)是一件容易产生错误的工作,在代码的修改中可能对现存的软件产生影响,很有可能导致程序的奔溃。为了帮助开发人员处理这些问题C#在语言中内置了版本控制功能。C#提供内置的版本支持来开发费用,使用C#将会使开发人员更轻易地开发和维护各种商业软件。6.灵活性和兼容性在简化语法的同时,C#并没有失去灵活性。尽管C#不是一种无限制语言,比如:他不能用来开发硬件驱动程序,在默认的状态下没有指针等,但是学习过程中你将发现,它仍然是那样的灵巧。7.快速应用开发(RAD)功能支持快速开发(Rapidapplicationdevelopment)可以说是目前开发语言最为重要的一大功能,也正是C/C++的致命伤。网络时代应用系统的开发必须按照网络时代的速度来进行,支持快速开发可以使得开发人员的开发效率倍增,从而使得他们可以从繁重的重复性劳动中解放出来。c#的RAD功能主要表现在例如垃圾收集、指代等众多特性上。垃圾收集机制将减轻开发人员对内存的管理负担,而指代功能更是可以让开发者不经过内部类就调用函数。利用c#的这些功能,可以使开发者通过较少的代码来实现更强大的应用程序,并且能够更好地避免错误发生,从而缩短了应用系统的开发周期。8.语言的自由性用C#编写的程序能最大程度地和任何支持.NET的语言互相交换信息。能够继承和使用任何语言所编写的程序可以称得上是知识的继承,这样做的好处是节省了大量的工作,你不必把COBOL等语言强行改成另一种语言,.NET让各种语言真正地互相交流了。9.强大的Web服务端组件在c#的Web编程中,最让人兴奋的是Web服务端的组件,它们不仅包括传统组件,还包括那些能够自动连接五花八门服务的可编程组件,你可以用c#编写自己的服务器端组件,服务器端组件和标准的HTML提供的服务自然是不一样的,使用它们可以更自由、更容易地进行数据绑定。不久,那些视频服务器组件也很快会出现,有了这些强大的组件,我们可以设计出功能更加强劲的企业级分布式应用系统。10.支持跨平台随着互联网应用程序的应用越来越广,人们逐渐意识到由于网络系统错综复杂,使用的硬件设备和软件系统各不相同,开发人员所设计的应用程序必须具有强大的跨平台性。C#编写的应用程序就具有强大的跨平台性,这种跨平台性也包括了c#程序的客户端可以运行在不同类型的客户端上,比如PDA、手机等非PC装置。11.与XML的融合由于XML技术真正融入到了.NET和c#之中,c#的编程变成了真正意义的网络编程,甚至可以说.NET和c#是专为XML而设计,使用C#的程序员可以轻松用c#内含的类来使用XML技术。就这方面而言,目前c#提供给了程序员更多的自由和更好的性能来使用XML。12.对C++的继承C#继承并保留了C++强大的功能,例如,c#保留了类型安全的检测和重载功能,c#还提供了一些新功能取代了一些原来的ANSIC预处理程序的功能,提高了语言的类型安全等安全性1.3.NET开发平台.NET是一个用于建立应用程序的平台,它在内部封装了大量的功能强大的应用程序接口函数(API),利用这些函数可以开发各类Windows应用软件。.NET还是一个开发平台,它向广大的程序员提供了功能强大的集成开发环境(IDE)———VisualStudio.NET。在未来,.NET还是一个运行、发布应用程序的平台,它可以将应用程序作为一种服务,通过Internet提供给分布在世界各个角落的网络用户。.NET平台对早期的开发平台作了重大改进。.NET提供了一种新的软件开发模型,它允许用不同程序设计语言创建的应用程序能相互通信。这个平台也允许开发者创建基于Web的应用程序,这些应用程序能够发布到多种不同的设备(甚至是无线电话)和台式机上。Microsoft的.NET计划为利用Internet和Web进行软件的开发、设计和使用开辟了广阔的新前景。.NET策略的一个主要方面是它与具体的语言或平台无关。它不需求程序员使用惟一的一种程序设计语言。程序员可以将多种与.NET兼容的语言(图1-1)结合起来开发.NET应用程序。多个程序员可以共同参与同一个软件项目,每个人可以使用自己最精通的.NET语言(如VisualC++.NET、C#、VisualBasic®和其他许多语言)来编写代码。第5页共16页第二章问题的定义及可行性研究2.1问题的定义开发的图片浏览器要具备良好的人机交互界面、对图片实现分目录管理用户可以自行创建并删除存放图片的目录、对目录下的图片以缩略图的方式进行浏览、以实际大小或适合窗体大小浏览、对同目录下的图片以自动播放形式进行浏览并可以调整播放时间。图片浏览器难点在于缩略图的显示,如果一个目录中有很多图片,而每张图片的尺寸都比较大,把每张图片都缩小并显示出来需要花费很长的时间,这样会导致应用程序的假死现象(在没有完成某项工作之前,应用程序无法进行其他操作)。2.2可行性研究处理这个问题可以采取多线程的方法,把显示缩略图的过程放在一个线程内,这样在显示缩略图的过程中可以进行其他操作。另外一种解决方法是给每张图片生成一张缩略图,并存放于数据库中,在浏览缩略图时,直接从数据库中读取缩略图并显示。由于缩略图非常小,并且是未经压缩的格式,读取速度非常快,这样就能以很快的速度显示完所有图片的缩略图。本次设计另辟蹊径,以达到类似效果。在导入图片的同时,为图片生成100*100像素的bmp格式的缩略图(如果原图的长和宽都小于100像素,则按原图尺寸生成缩略图),把原图和缩略图分别存放于两个目录内,并一一对应。通过原图的文件名可以找到相对应的缩略图,如果缩略图不存在,则即时生成相应的缩略图。实践证明这样做的效果令人满意,能比较顺畅的现实多张图片的缩略图。第三章需求分析3.1需求分析阶段的任务1.分析该设计要实现哪些功能(1)可以对目录下的图片以缩略的方式进行浏览,并在浏览过程中可以删除一张或多张图片。(2)可以以实际大小或适合窗体尺寸的方式对单张图片进行浏览,并可以切换到同目录下的上一张图片或下一张图片浏览。也可以对同目录下的图片以自动播放的形式进行浏览,并可以调整自动播放的时间间隔。(3)可以在浏览某张图片时将其删除。(4)可以以全屏幕的方式浏览图片。2.分析该设计功能实现的步骤及过程(1)主窗体,可以用于浏览和查看图片。(2)目录窗体,用于创建图片的管理目录。(3)导入图片窗体,用于向目录中导入图片。3.2系统功能的详细分析具有良好的人机交互界面,有一定的计算机操作经验的用户可以不经任何培训就可以直接使用该软件。对图片实现分目录管理,用户可以自行创建并删除存放图片的目录,并可以方便地将各种图片存放于相应的目录之中。可以对目录下的图片以缩略图的方式进行浏览,以方便用户从众多图片中查找出自己想要的图片,并在浏览过程中可以删除一张或多张图片。可以以实现大小或适合窗体尺寸的方式对单张图片进行浏览,并可以切换到同目录下的上一张图片或下一张图片进行浏览。也可以对同目录下的图片以自动播放的形式进行浏览,并可以调整播放的时间间隔。可以为创建的目录导入或删除图片。可以手动的进行图片的浏览。该图片浏览器应该具有新增目录,删除目录,导入图像,删除图像,退出等功能,还有的功能可以在设计中不断完善。第四章总体设计4.1总体设计阶段的任务1.界面设计:程序包括三个窗体。(1)MainForm窗体:程序的主窗体,可以用于浏览和查看图片,并对图片进行管理。如图4—1图4—1。(2)FrmCreateFolder窗体:创建目录窗体,用于创建图片的管理目录。如图4—2图4—2(3)FrmLoadPic窗体:导入图片窗体,用于向目录中导入图片。如图4—3图4—32.代码编写:代码包括5个文件。(1)MainForm.cs:主窗体MainForm的代码文件。(2)FrmCreateFolde.cs:创建目录窗体FrmCreateFolder的代码文件。(3)FrmLoadPic.cs:导入图片窗体FrmLoadPic的代码文件。(4)PicInfo.cs:PicInfo类代码文件。(5)Folder.cs:Folder类代码文件。4.2图片浏览软件功能的具体分析1.目录:自己手动创建一个图片存储目录。2.目录:把已经创建的一个图片存储目录删除。3.图像:导入一张图片到创建的目录中去。4.图像:删除一张在已经创建的目录中的图片。5.和后退按钮:手动控制图片的前后浏览。第五章详细设计5.1系统功能的详细设计与实现5.1.1MainForm窗体:(1).创建一个新项目“图片管理器”。把窗体改名为MainForm,并设置它的属性。(2).在窗体中放置一个ToolStrip控件,再添加5个工具按钮并进行改名和设置属性。(3).在工具栏中添加2个Separator。再在窗体中放2个ToolStrip控件并进行命名和属性的设置,再添加6个工具按钮,1个组合框,2个分隔条,并进行相应的属性改写。(4).在窗体上放置1个StatusStrip控件,它自动放置在窗体的最底部,在状态栏中添加1个ProgressBar和1个StatusLabel。(5).在窗体上放置1个ListBox控件并进行属性设置。(6).在LstFolder控件右边放置一个Splitter控件,它会自动贴向LstFolder的右边界靠齐,这个控件的作用是可以再程序运行时改变它左边和右边控件的宽度。(7).在Splitter控件的右侧放置1个Panel控件,并设置它的属性。(8).在panel1上放置1个ListView控件,它用于显示一个目录下所有图片的缩略图。把它的OwnerDraw属性设置为true,设置这个属性后就可以手动绘制ListView内各个项的图标。并把View属性设置为LargeIcon,这样ListView就会以大图标的方式显示里面的每个项。在窗体上放置1个ImageList控件,并进行相关属性设置。在这里,ImageSize控件的作用并不是存放图片,而是控制ListView各个项的绘图区域的大小。(9).在panel1上放置1个PictureBox控件,命名为pbPic,用于显示单张图片。(10).在窗体上放置1个OpenFileDialog控件。(11).在窗体上放置1个Tinner控件,把它的Interval书信设置为2000。至此,主窗体界面制作完毕。如图5—1所示5.1.2FrmCreateFolder窗体(1).新建一窗体,命名为FrmCteateFolder。(2).在窗体中放置1个TextBox控件,命名为txtFolderName。(3).在窗体中放置2个Button控件,分别命名为btnOK和btnCancel。并把它们的Text属性设置为“确定”和“取消”。5.1.3FrmLoadPic窗体(1).新建一窗体,命名为FrmLoadPic。(2).在窗体上放置1个ComboBox控件,命名为cbFolder。DropDownStyle属性设置为:DropDownList(3).在窗体上放置1个CheckedListBox控件,命名为chklsPic。HorizontalScrollbar属性设置为true。(4).在窗体上放置1个TextBox控件,命名为txtPicName。(5).在窗体上放置4个Button控件。(6).在窗体上放置1个OpenFileDialog控件,命名为openFileDialogSelPic,并把它的Multiselect属性设置为true。代码编写MainForm.cs:主窗体MainForm的代码文件。FrmCreateFolder.cs:创建目录窗体FrmCreateFolder的代码文件。FrmLoadPic.cs:导入图片窗体FrmLoadPic的代码文件。PicInfo.cs:PicInfo类代码文件。Folder.cs:Folder类代码文件。5.1.4PicInfo.cs窗体在解决方案资源管理器中的图片管理器项目上右击鼠标,在弹出菜单中选择添加新建项。在添加新项窗口中选择类,在名称编辑框内输入“PicInfo.cs”。最后单击添加按钮添加一个新的类。PicInfo是一个自定义的类,什么是类?可以这样去理解:类可以存放某些信息,并能实现特定功能。类里有属性和方法,就好比银行的提款机,通过使用提款机,可以查询账户里还有还剩多少钱,也可以通过提款机取钱。在编程中定义类是为了把一些相关的功能包装起来,放在一起,以方便在程序中使用。Privatestring_fullName;Privatestring_nameNoExtension;这两行代码声明了两个私有成员变量,这两个成员变量供类内部使用,类的外部不可以直接访问它们,但可以通过属性来访问和设置它们的值。PublicoverridestringToString(){Return_fullName;}这几行代码,重载了ToString()方法,由于PicInfo类的作用是把类实例作为项存放于复选列表框内。而每个项显示的文字正是通过访问ToString()方法而获得,重载这个方法,正是为了在复选列表框内显示指定的文字。5.1.5Folder.cs窗体在(解决方案资源管理器)中的(图片管理器)项目上右击鼠标,在弹出菜单中选择(添加)(新建项)。在(添加新项)窗口中选择(类),在(名称)编辑框内输入“Folder.cs”。最后单击(添加)按钮添加一个新的类。在第一次浏览一个目录时,需要从硬盘读取这个目录下的所有缩略图并显示,此时所有缩略图被载入内存。如果切换到其他目录时就从内存中释放这些数据,再次浏览这个目录时就导致程序重新从硬盘读取数据,这样会使得缩略图的显示速度变慢(内存的速度远胜于硬盘)。本案例中,只要浏览了某个目录,就让这个目录下的所有缩略图常驻于内存,以供下次浏览时调用,直到应用程序关闭为止。这样做可能导致程序的内存使用加大,但在一定程度上弥补了没有使用多线程技术的遗憾。Folder类正是用于实现这个功能的,它封装了缩略图的生成、读取、删除、计算边界的功能。Foreach(stringsourceFileinDirectory.GetFiles(_sourcePath))这一行的Directory.GetFiles(_sourcePath)方法访问指定文件夹(_sourcePath)中的所有文件,并将它们的文件名存放于字符串数组中返回。PublicoverridestringToString(){Return_name;}这几行代码重载了ToString()方法,这样做是为了在ListBox内显示指定的字符串,即目录名称。5.1.6FrmCreateFolder.cs窗体打开FrmCreateFolder的设计窗体,分别双击(确定)和(取消)按钮,为它们生成按钮的单机事件。FrmCreateFolder窗体的作用是创建一个新的图片管理目录,所有图片都存放于可执行文件所在目录下的(图片目录)文件夹之下,新建一个管理目录会在(图片目录)文件夹下创建一个以管理目录命名的文件夹。由于FrmCreateFolder窗体需要操作主窗体的列表框控件,这就会涉及在不同窗体间传递参数的问题。在不同窗体间传递参数有很多种方法,本案例只使用其中的一种,就是在窗体构造方法中传递参数,这就需要重载窗体的构造方法。PublicFrmCreateFolder(){InitializeComponent();}这几行代码是VisualStudio2005自动问窗体生成的构造方法。PublicFrmCreateFolder(ListBoxlst){InitializeComponent();lstFolder=lst;}这几行代码则是手动编写的重载的构造方法。它使用了一个ListBox类型的参数,由于ListBox是一个引用的类型,这样当主窗体把一个ListBox类型当做参数传递给FrmCreateFolder窗体的构造方法后,就可以在FrmCreateFolder窗体中控制这个ListBox。PrivateListBoxlstFolder;这行代码声明了一个ListBox类型的成员变量,用于存放从构造方法传递进来的ListBox引用,以方便在整个窗体范围内进行调用。Stringpath=Application.StartupPath+\\图片目录\\这行代码中的Application.StartupPath属性返回当前程序可执行文件所在路径。5.1.7FrmLoadPic.cs窗体打开FrmLoadPic窗口,双击窗口空白处,为窗口生成一个load事件,FrmLoadPic窗体用于将图片导入程序目录中,它需要控制主窗体中的列表框和状态栏两个控件,所以在这几行代码的重载构造方法中使用了两个参数,以传递对这两个控件的引用。OpenFileDialogSelPic.Filter=“图像文件(*.BMP;*.JPG;*.GIF;“+”*.jpeg;*.ico)*.BMP;*.JPG;*.GIF;*.jpeg;*.ico”;这行代码设置打开文件对话框的文件筛选器,这样在使用打开文件对话框时,就只能选择指定的文件类型。双击(浏览)按钮,生成一个按钮的单击事件。为复选列表框chklsPics生成一个SelectedIndexChange事件。双击(修改)按钮,生成一个按钮的单击事件。PicInfopicInfo=newPicInfo(s);这行代码使用了前面所编写的PicInfo类,编写它的主要原因是如果给图像改名,需要有地方存放修改后的名字。chklsPics.Items.Add(picInfo,true);这行代码直接将上一行代码所创建的PicInfo对象作为元素添加进复选列表框内。复选列表框的项所显示的文字将是PicInfo对象的ToString()方法所返回的字符串。分别双击(确定)和(取消)按钮,为它们生成按钮单击事件,载入图像时,需要考虑一下几个因素。1.由于可以从多个路径选择图片,有可能出现图片文件名相同但路径不同的情况,把它复制到同一文件夹时会由于文件名相同而导致出错。2.在把图片复制到某文件夹时,文件夹有可能本身已有同名的文件,这样同样会导致出错。常见的解决方案如看图软件ACDSee,在复制过程中如出现同名文件,将弹出提示窗口,供用户进行改名或放弃复制操作。本案例使用了不同的方法,出现同名文件时并不提示用户,而直接给图片改名。给图片重命名的算法如下所述:1.给取目的文件夹(所有图片将被复制到这个文件夹)下的所有已存在的图片名称,并放入Arraylist内。2.将ArrayList内的图片名称从小到大进行排序。3.在图片被复制到目的文件夹之前,首先跟ArrayList内的图片名称一一对比,如果发现同名文件,则在文件名后加“-”号和数字“1”。把更改后的名称继续跟ArrayList内的下一个图片名称进行对比,如果重名,则把数字“1”变为“2”。直到在ArrayList内找到比它大的名称,则把它插入到这个位置。4.将图片复制到目的文件夹,对下一张图片重复第③步操作,直到所有图片被复制到目的文件夹为止。5.1.8MainForm.cs窗体双击(新增目录)工具按钮,生成按钮的单击事件,这里使用模式窗体的方式打开前面所创建的FrmCreateFolder窗体。双击(删除目录)工具按钮,生成按钮的单击事件双击(导入图像)工具按钮,生成按钮的单击事件选中lvView控件,在事件窗口中双击DrawItem事件,生成一个绘制项的事件,当ListView的OwnerDraw属性为true时,可以通过DrawItem事件手动绘制ListView中的每一个项。在DrawItem事件方法中,参数e的Bounds属性返回这个项所占用的矩形,可以在这个矩形里绘制图形和文字。选中列表框lstFolder,为它生成一个SelectedIndexChanged事件为(删除图像)和(退出)工具按钮分别生成单击(Click)事件选中lvView控件,在事件窗口中双击DoubleClick事件,生成一个事件分别双击窗体下方工具栏的(返回目录)、(上一幅图像)(tsbtnPeriod)、(下一幅图像)(tsBtnNext)工具按钮,为它们生成相应的单击事件显示图像有两种模式:1.按原图尺寸显示:当图像尺寸大于装载它的容器(panell)时,则显示图像的中间部分。2.显示全图:当图像尺寸大于装载它的容器时,则按比例对原图进行缩放,以适合容器大小。当图像尺寸小于装载它的容器时,则在容器中央显示原图。自定义方法MatchImage()正是用于计算图像的显示尺寸,以对PictureBox控件尺寸进行调整并正确地显示图像。双击(自动播放)(tsbtnAutoPlay)按钮,生成一个按钮的单击事件。双击timerl控件,生成一个定时器事件。选中工具栏上的组合框(tscbInterval)控件,并为它生成一个SelectedIndexChanged事件同时选中(实际大小)(tsbtnNormal)和(合适大小)(tsbtnMatch)两个工具按钮控件,打开事件窗口,在Click事件内输入“tsbtnShowMode_Click”后按Enter键,为两个按钮生成一个共同的单击事件选中pbPic控件,并分别为它生成MouseDown、MouseMove、MorseUp三个事件。当图像处于实际大小状态时,如果原图尺寸大于装载它的容器的尺寸时,图像无法显示完全,这时应该允许用鼠标拖动图像以浏览图像的任何部分。实现图像拖动功能需要使用三个事件。1.按下鼠标左键时,设置一个标志(isDraging),表明允许图像被拖动,并记录但是鼠标和PictureBox所处的位置,以方便后面拖动图像时计算图像位置。2.松开鼠标左键时,设置标志(isDraging),表明图像不允许被拖动。3.移动鼠标时,判断标志(isDraging),如果标志的值为真,表明鼠标左键还处于被按下状态,这时可以拖动图像。如果标志的值为假,则表明鼠标左键已经不处于被按下状态,这时不能拖动图像。拖动图像的功能通过改变PictureBox的位置来实现,需要注意一下几点问题。1.如果装载图像的容器大于图像尺寸,则不允许拖动图像;2.当图像的宽小于容器的宽,而图像的高大于容器的高时,只允许垂直拖动图像。3.当图像的高小于容器的高,而图像的宽大于容器的宽时,只允许水平拖动图像。4.当图像左边界到达容器左边界时,不允许再向右拖动图像。5.当图像右边界到达容器右边界时,不允许再向左拖动图像。6.当图像上边界到达容器上边界时,不允许再向下拖动图像。7.当图像下边界到达容器下边界时,不允许再向上拖动图像。5.2关键技术介绍图片浏览器难点在于缩略图的显示,如果一个目录中有很多图片,而每张图片的尺寸都比较大,把每张图片都缩小并显示出来需要花费很长的时间,这样会导致应用程序的假死现象(在没有完成某项工作之前,应用程序无法进行其他操作)。处理这个问题可以采取多线程的方法,把显示缩略图的过程放在一个线程内,这样在显示缩略图的过程中可以进行其他操作。另外一种解决方法是给每张图片生成一张缩略图,并存放于数据库中,在浏览缩略图时,直接从数据库中读取缩略图并显示。由于缩略图非常小,并且是未经压缩的格式,读取速度非常快,这样就能以很快的速度显示完所有图片的缩略图。本次设计另辟蹊径,以达到类似效果。在导入图片的同时,为图片生成100*100像素的bmp格式的缩略图(如果原图的长和宽都小于100像素,则按原图尺寸生成缩略图),把原图和缩略图分别存放于两个目录内,并一一对应。通过原图的文件名可以找到相对应的缩略图,如果缩略图不存在,则即时生成相应的缩略图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论