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

下载本文档

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

文档简介

1、*学院 信息工程系毕业设计(论文)第 i 页 共 21 页摘 要图片浏览器是日常应用中必可少的应用软件之一,本次毕业设计中,运用 c#来设计图片浏览器。文中详细叙述了浏览器的详细制作过程。采用 c#提供的控件数组来实现,并对可视区内的图形进行局部更新方法进行了详述。系统功能主要有图片的浏览、预览、图片拷贝、删除、粘贴等功能。并增加了各种键盘控制功能。实现了对多种格式图形的浏览,包括 gif、jpg、bmp、ico 等图片格式。本图片浏览程序具有实用性、稳定性、易用性,和可维护性的特点,系统留了扩展接口,用户可以根据实际需要对其功能进行扩充、完善与修改,使其符合自己的要求。总之,本系统是一个逐步

2、完善的系统。关键词:图片浏览器;控件数组;局部更新*学院 信息工程系毕业设计(论文)第 ii 页 共 21 页目目 录录摘 要.iii目 录.iv第一章 开发环境的介绍.11.1 c#的由来.11.2 c#的特点.11.3 .net 开发平台.3第二章 问题的定义及可行性研究.52.1 问题的定义.52.2 可行性研究.5第三章 需求分析.63.1 需求分析阶段的任务.63.2 系统功能的详细分析.6第四章 总体设计.74.1 总体设计阶段的任务.74.2 图片浏览软件功能的具体分析.8第五章 详细设计.95.1 系统功能的详细设计与实现.95.1.1 mainform 窗体:.95.1.2

3、frmcreatefolder 窗体.105.1.3 frmloadpic 窗体.105.1.4 picinfo.cs 窗体.115.1.5 folder.cs 窗体.115.1.6 frmcreatefolder.cs 窗体.125.1.7 frmloadpic.cs 窗体 .135.1.8 mainform.cs 窗体 .145.2 关键技术介绍.15第 6 章 测 试.176.1 软件测试的目的和方法.176.2 软件测试的步骤.17第 7 章 总结与展望.18致 谢.19附录 1.20*学院 信息工程系毕业设计(论文)第 1 页 共 22 页第一章 开发环境的介绍1.1 c#的由来在过

4、去的一段时间中,c 和 c+一直是商业软件的开发领域中最具生命力的语言。虽然他们为程序员提供了丰富的功能。高度的灵活性和强大的底层控制力,但是利用 c、c+语言开发的 windows 应用程序显然复杂了很多,同时也牺牲了一定的效率与 vb 相比,同等级的 c、c+完成一个程序往往需要更多的时间来完成开发,因此各层人士都试图寻找一种新的语言,希望能在功能和功率之间找到一种更为理想的平衡点。针对这一问题,微软公司与 2000 年 6 月 26 日正式发布 c#。c#是一种最新的、面向对象的编程语言,c#使得程序员可以在 miscrsoft 开发的最新的.net 平台上快速的编写应用程序。c#是一种

5、简单、现代、面向对象且类型安全的编程语言,c#语言从 c 和 c+语言演化而来,同时 c#具备了应用程序快速开发(rapid application development,rad)语言的高效率和 c+固有的强大能力,并吸收了 java 和 delphi等语言的特点和精华,是.net 开发的首选语言。1.2 c#的特点1 .简洁易用的语法c#主要从 c 和 c+继承而来,同时吸收 java 和 delphi 的优点,摒弃了 c 和c+中一些比较复杂而且不常用的语法元素比如父类继承。使用 c 和 c+时最令程序员生畏的语法是什么?大多数程序员会说:指针!c 和 c+中的指针虽然功能强大,但极不安

6、全,稍不小心就会导致程序出错,甚至导致系统奔溃。c#取消了指针,不允许直接对内存进行操作,让代码运行在安全的环境中。此外,c#语法的很多变化无不体现了 c#的简洁之美。2 .自动的资源回收机制c#与.net 的完美集成,使得 c#完全拥有.net 的自动回收机制。在 windows 中,提供给程序使用的一切软、硬件统称为资源。比如程序中需要在窗口上画图的笔就是一种资源,在早期的 windows 版本中,程序使用完资源后应该及时解放,否则会导致系统资源不足而运行变慢。在.net 框架中,由于资源使用完后由系统自动清理,所以,编写 c#程序,不必小心翼翼地保证及时释放资源,从而可以把更多的精力放在

7、程序编写的逻辑上。3 .与 web 的紧密结合*学院 信息工程系毕业设计(论文) 第 2 页 共 21 页网上办公和电子商务在各行各业中的到越来越广泛的的应用,b/s 模式程序的市场需求越来越多。在微软的.net 开发套件中,c#与 asp.net 是相互融合的。asp.net 的应用程序可以使用 vb.net 语法,也可以使用 c#语法。使用 c#语法编写的 asp.net 结构更严谨,运行更高效。由于有了 web 服务框架的帮助,对程序员来说,网络服务看起来就像是 c#的本地对象。程序员们能够利用他们已有的面对对象的只是和技巧开发 web 服务。仅需要使用简单的 c#语言结构,c#组件就能

8、够方便地为 web 服务,并允许它们通过 internet 被运行在任何操作系统上的任何语言所调用。4 .完整的安全性与错误处理语言的安全性与错误处理能力,是衡量一种语言是否优秀的重要依据。任何人都会犯错,即使是最熟练的程序员也不例外,如忘记变量的初始化,对不属于自己管理范围内存的空间进行修改等。这些错误常常产生难以预计的后果。一旦这样的软件被投入使用,寻找与改正这些简单错误的代价是让人无法估计的。c#的先进设计思想可以消除软件开发中的许多常见错误,并提供了包括类型安全在内的完整的安全性能。为减少开发中的错误,c#帮助开发者通过更少的代码完成相同的功能,这部大减轻了编程人员的工作量同时更有效的

9、避免了从错误的产生。5 .版本处理技术升级软件系统中的组件(模块)是一件容易产生错误的工作,在代码的修改中可能对现存的软件产生影响,很有可能导致程序的奔溃。为了帮助开发人员处理这些问题 c#在语言中内置了版本控制功能。c#提供内置的版本支持来开发费用,使用c#将会使开发人员更轻易地开发和维护各种商业软件。6 .灵活性和兼容性在简化语法的同时,c#并没有失去灵活性。尽管 c#不是一种无限制语言,比如:他不能用来开发硬件驱动程序,在默认的状态下没有指针等,但是学习过程中你将发现,它仍然是那样的灵巧。7. 快速应用开发(rad)功能 支持快速开发(rapid application developm

10、ent)可以说是目前开发语言最为重要的一大功能,也正是 c/c+的致命伤。网络时代应用系统的开发必须按照网络时代的速度来进行,支持快速开发可以使得开发人员的开发效率倍增,从而使得他们可以从繁重的重复性劳动中解放出来。c#的 rad 功能主要表现在例如垃圾收集、指代等众多特性上。垃圾收集机制将减轻开发人员对内存的管理负担,而指代功能更是可以让开发者不经过内部类就调用函数。利用 c#的这些功能,可以使开发者通过较少的代码来实现更强大的应用程序,并且能够更好地避免错误发生,从而缩短了应用系统的开发周期。8. 语言的自由性用 c#编写的程序能最大程度地和任何支持.net 的语言互相交换信息。能够继*学

11、院 信息工程系毕业设计(论文) 第 3 页 共 21 页承和使用任何语言所编写的程序可以称得上是知识的继承,这样做的好处是节省了大量的工作,你不必把 cobol 等语言强行改成另一种语言,.net 让各种语言真正地互相交流了。9. 强大的 web 服务端组件在 c#的 web 编程中,最让人兴奋的是 web 服务端的组件,它们不仅包括传统组件,还包括那些能够自动连接五花八门服务的可编程组件,你可以用 c#编写自己的服务器端组件,服务器端组件和标准的 html 提供的服务自然是不一样的,使用它们可以更自由、更容易地进行数据绑定。不久,那些视频服务器组件也很快会出现,有了这些强大的组件,我们可以设

12、计出功能更加强劲的企业级分布式应用系统。10. 支持跨平台随着互联网应用程序的应用越来越广,人们逐渐意识到由于网络系统错综复杂,使用的硬件设备和软件系统各不相同,开发人员所设计的应用程序必须具有强大的跨平台性。c#编写的应用程序就具有强大的跨平台性,这种跨平台性也包括了 c#程序的客户端可以运行在不同类型的客户端上,比如 pda、手机等非 pc 装置。11. 与 xml 的融合由于 xml 技术真正融入到了.net 和 c#之中,c#的编程变成了真正意义的网络编程,甚至可以说.net 和 c#是专为 xml 而设计,使用 c#的程序员可以轻松用 c#内含的类来使用 xml 技术。就这方面而言,

13、目前 c#提供给了程序员更多的自由和更好的性能来使用 xml。12. 对 c+的继承c#继承并保留了 c+强大的功能,例如, c#保留了类型安全的检测和重载功能,c#还提供了一些新功能取代了一些原来的 ansi c 预处理程序的功能,提高了语言的类型安全等安全性1.3 .net 开发平台.net 是一个用于建立应用程序的平台,它在内部封装了大量的功能强大的应用程序接口函数(api) ,利用这些函数可以开发各类 windows 应用软件。.net 还是一个开发平台,它向广大的程序员提供了功能强大的集成开发环境(ide)visual studio .net。在未来,.net 还是一个运行、发布应用

14、程序的平台,它可以将应用程序作为一种服务,通过 internet 提供给分布在世界各个角落的网络用户。.net 平台对早期的开发平台作了重大改进。.net 提供了一种新的软件开发模型,它允许用不同程序设计语言创建的应用程序能相互通信。这个平台也允许开发*学院 信息工程系毕业设计(论文) 第 4 页 共 21 页者创建基于 web 的应用程序,这些应用程序能够发布到多种不同的设备(甚至是无线电话)和台式机上。microsoft 的.net 计划为利用 internet 和 web 进行软件的开发、设计和使用开辟了广阔的新前景。.net 策略的一个主要方面是它与具体的语言或平台无关。它不需求程序员

15、使用惟一的一种程序设计语言。程序员可以将多种与.net 兼容的语言(图 1-1)结合起来开发.net 应用程序。多个程序员可以共同参与同一个软件项目,每个人可以使用自己最精通的.net 语言(如 visual c+ .net、c#、visual basic和其他许多语言)来编写代码。*学院 信息工程系毕业设计(论文)第 5 页 共 16 页第二章 问题的定义及可行性研究2.1 问题的定义开发的图片浏览器要具备良好的人机交互界面、对图片实现分目录管理用户可以自行创建并删除存放图片的目录、对目录下的图片以缩略图的方式进行浏览、以实际大小或适合窗体大小浏览、对同目录下的图片以自动播放形式进行浏览并可

16、以调整播放时间。图片浏览器难点在于缩略图的显示,如果一个目录中有很多图片,而每张图片的尺寸都比较大,把每张图片都缩小并显示出来需要花费很长的时间,这样会导致应用程序的假死现象(在没有完成某项工作之前,应用程序无法进行其他操作) 。2.2 可行性研究处理这个问题可以采取多线程的方法,把显示缩略图的过程放在一个线程内,这样在显示缩略图的过程中可以进行其他操作。另外一种解决方法是给每张图片生成一张缩略图,并存放于数据库中,在浏览缩略图时,直接从数据库中读取缩略图并显示。由于缩略图非常小,并且是未经压缩的格式,读取速度非常快,这样就能以很快的速度显示完所有图片的缩略图。本次设计另辟蹊径,以达到类似效果

17、。在导入图片的同时,为图片生成100*100 像素的 bmp 格式的缩略图(如果原图的长和宽都小于 100 像素,则按原图尺寸生成缩略图) ,把原图和缩略图分别存放于两个目录内,并一一对应。通过原图的文件名可以找到相对应的缩略图,如果缩略图不存在,则即时生成相应的缩略图。实践证明这样做的效果令人满意,能比较顺畅的现实多张图片的缩略图。*学院 信息工程系毕业设计(论文) 第 6 页 共 21 页第三章 需求分析3.1 需求分析阶段的任务 1.分析该设计要实现哪些功能(1)可以对目录下的图片以缩略的方式进行浏览,并在浏览过程中可以删除一张或多张图片。(2)可以以实际大小或适合窗体尺寸的方式对单张图

18、片进行浏览,并可以切换到同目录下的上一张图片或下一张图片浏览。也可以对同目录下的图片以自动播放的形式进行浏览,并可以调整自动播放的时间间隔。(3)可以在浏览某张图片时将其删除。(4)可以以全屏幕的方式浏览图片。 2.分析该设计功能实现的步骤及过程 (1)主窗体,可以用于浏览和查看图片。 (2)目录窗体,用于创建图片的管理目录。 (3)导入图片窗体,用于向目录中导入图片。 3.2 系统功能的详细分析具有良好的人机交互界面,有一定的计算机操作经验的用户可以不经任何培训就可以直接使用该软件。 对图片实现分目录管理,用户可以自行创建并删除存放图片的目录,并可以方便地将各种图片存放于相应的目录之中。 可

19、以对目录下的图片以缩略图的方式进行浏览,以方便用户从众多图片中查找出自己想要的图片,并在浏览过程中可以删除一张或多张图片。 可以以实现大小或适合窗体尺寸的方式对单张图片进行浏览,并可以切换到同目录下的上一张图片或下一张图片进行浏览。也可以对同目录下的图片以自动播放的形式进行浏览,并可以调整播放的时间间隔。 可以为创建的目录导入或删除图片。 可以手动的进行图片的浏览。该图片浏览器应该具有新增目录,删除目录,导入图像,删除图像,退出等功能,还有的功能可以在设计中不断完善。 *学院 信息工程系毕业设计(论文) 第 7 页 共 21 页第四章 总体设计4.1 总体设计阶段的任务 1. 界面设计:程序包

20、括三个窗体。界面设计:程序包括三个窗体。(1)mainform 窗体:程序的主窗体,可以用于浏览和查看图片,并对图片进行管理。如图 41图 41 。 (2)frmcreatefolder 窗体:创建目录窗体,用于创建图片的管理目录。如图 42图 42 (3)frmloadpic 窗体:导入图片窗体,用于向目录中导入图片。如图 43*学院 信息工程系毕业设计(论文) 第 8 页 共 21 页图 43 2. 代码编写:代码包括代码编写:代码包括 5 个文件。个文件。 (1) mainform.cs:主窗体 mainform 的代码文件。 (2) frmcreatefolde.cs:创建目录窗体 f

21、rmcreatefolder 的代码文件。 (3) frmloadpic.cs:导入图片窗体 frmloadpic 的代码文件。 (4) picinfo.cs:picinfo 类代码文件。 (5) folder.cs:folder 类代码文件。4.2 图片浏览软件功能的具体分析 1.目录:自己手动创建一个图片存储目录。 2.目录:把已经创建的一个图片存储目录删除。 3.图像:导入一张图片到创建的目录中去。 4.图像:删除一张在已经创建的目录中的图片。5.和后退按钮:手动控制图片的前后浏览。*学院 信息工程系毕业设计(论文) 第 9 页 共 21 页第五章 详细设计 5.1 系统功能的详细设计与

22、实现5.1.1 mainform 窗体窗体:(1). 创建一个新项目“图片管理器” 。把窗体改名为 mainform,并设置它的属性。(2)在窗体中放置一个 toolstrip 控件,再添加 5 个工具按钮并进行改名和设置属性。(3)在工具栏中添加 2 个 separator。再在窗体中放 2 个 toolstrip 控件并进行命名和属性的设置,再添加 6 个工具按钮,1 个组合框,2 个分隔条,并进行相应的属性改写。(4)在窗体上放置 1 个 statusstrip 控件,它自动放置在窗体的最底部,在状态栏中添加 1 个 progressbar 和 1 个 statuslabel。(5)在窗

23、体上放置 1 个 listbox 控件并进行属性设置。(6)在 lstfolder 控件右边放置一个 splitter 控件,它会自动贴向 lstfolder 的右边界靠齐,这个控件的作用是可以再程序运行时改变它左边和右边控件的宽度。(7)在 splitter 控件的右侧放置 1 个 panel 控件,并设置它的属性。(8)在 panel1 上放置 1 个 listview 控件,它用于显示一个目录下所有图片的缩略图。把它的 ownerdraw 属性设置为 true,设置这个属性后就可以手动绘制listview 内各个项的图标。并把 view 属性设置为 largeicon,这样 listvi

24、ew 就会以大图标的方式显示里面的每个项。在窗体上放置 1 个 imagelist 控件,并进行相关属性设置。在这里,imagesize 控件的作用并不是存放图片,而是控制 listview 各个项的绘图区域的大小。(9)在 panel1 上放置 1 个 picturebox 控件,命名为 pbpic,用于显示单张图片。(10)在窗体上放置 1 个 openfiledialog 控件。(11)在窗体上放置 1 个 tinner 控件,把它的 interval 书信设置为 2000。至此,主窗体界面制作完毕。如图 51 所示*学院 信息工程系毕业设计(论文) 第 10 页 共 21 页5.1.2

25、 frmcreatefolder 窗体窗体(1)新建一窗体,命名为 frmcteatefolder。(2)在窗体中放置 1 个 textbox 控件,命名为 txtfoldername。 (3)在窗体中放置 2 个 button 控件,分别命名为 btnok 和 btncancel。并把它们的 text 属性设置为“确定”和“取消” 。 5.1.3 frmloadpic 窗体窗体(1)新建一窗体,命名为 frmloadpic。(2)在窗体上放置 1 个 combobox 控件,命名为 cbfolder。dropdownstyle 属性设置为:dropdownlist(3)在窗体上放置 1 个

26、checkedlistbox 控件,命名为chklspic。horizontalscrollbar 属性设置为 true。(4)在窗体上放置 1 个 textbox 控件,命名为 txtpicname。(5)在窗体上放置 4 个 button 控件。(6)在窗体上放置 1 个 openfiledialog 控件,命名为 openfiledialogselpic,并把它的 multiselect 属性设置为 true。*学院 信息工程系毕业设计(论文) 第 11 页 共 21 页 代码编写mainform.cs:主窗体 mainform 的代码文件。frmcreatefolder.cs:创建目录

27、窗体 frmcreatefolder 的代码文件。frmloadpic.cs:导入图片窗体 frmloadpic 的代码文件。picinfo.cs:picinfo 类代码文件。folder.cs:folder 类代码文件。5.1.4 picinfo.cs 窗体窗体在解决方案资源管理器中的图片管理器项目上右击鼠标,在弹出菜单中选择添加新建项。在添加新项窗口中选择类,在名称编辑框内输入“picinfo.cs” 。最后单击添加按钮添加一个新的类。picinfo 是一个自定义的类,什么是类?可以这样去理解:类可以存放某些信息,并能实现特定功能。类里有属性和方法,就好比银行的提款机,通过使用提款机,可以

28、查询账户里还有还剩多少钱,也可以通过提款机取钱。在编程中定义类是为了把一些相关的功能包装起来,放在一起,以方便在程序中使用。private string _fullname;private string _namenoextension;这两行代码声明了两个私有成员变量,这两个成员变量供类内部使用,类的外部不可以直接访问它们,但可以通过属性来访问和设置它们的值。public override string tostring ()return _fullname;这几行代码,重载了 tostring()方法,由于 picinfo 类的作用是把类实例作为项存放于复选列表框内。而每个项显示的文字正是

29、通过访问 tostring()方法而获得,重载这个方法,正是为了在复选列表框内显示指定的文字。5.1.5 folder.cs 窗体窗体 在(解决方案资源管理器)中的(图片管理器)项目上右击鼠标,在弹出菜单中选择(添加) (新建项) 。在(添加新项)窗口中选择(类) ,在(名称)编辑框内输入“folder.cs” 。最后单击(添加)按钮添加一个新的类。 在第一次浏览一个目录时,需要从硬盘读取这个目录下的所有缩略图并显示,此时所有缩略图被载入内存。如果切换到其他目录时就从内存中释放这些数据,再次浏览这个目录时就导致程序重新从硬盘读取数据,这样会使得缩略图的显示速度*学院 信息工程系毕业设计(论文)

30、 第 12 页 共 21 页变慢(内存的速度远胜于硬盘)。本案例中,只要浏览了某个目录,就让这个目录下的所有缩略图常驻于内存,以供下次浏览时调用,直到应用程序关闭为止。这样做可能导致程序的内存使用加大,但在一定程度上弥补了没有使用多线程技术的遗憾。folder 类正是用于实现这个功能的,它封装了缩略图的生成、读取、删除、计算边界的功能。 foreach (string sourcefile in directory.getfiles(_sourcepath) 这一行的 directory.getfiles(_sourcepath)方法访问指定文件夹(_sourcepath)中的所有文件,并将它

31、们的文件名存放于字符串数组中返回。 public override string tostring() return _name; 这几行代码重载了 tostring()方法,这样做是为了在 listbox 内显示指定的字符串,即目录名称。5.1.6 frmcreatefolder.cs 窗体窗体打开 frmcreatefolder 的设计窗体,分别双击(确定)和(取消)按钮,为它们生成按钮的单机事件。 frmcreatefolder 窗体的作用是创建一个新的图片管理目录,所有图片都存放于可执行文件所在目录下的(图片目录)文件夹之下,新建一个管理目录会在(图片目录)文件夹下创建一个以管理目录命

32、名的文件夹。由于 frmcreatefolder 窗体需要操作主窗体的列表框控件,这就会涉及在不同窗体间传递参数的问题。在不同窗体间传递参数有很多种方法,本案例只使用其中的一种,就是在窗体构造方法中传递参数,这就需要重载窗体的构造方法。public frmcreatefolder()initializecomponent();这几行代码是 visual studio 2005 自动问窗体生成的构造方法。public frmcreatefolder(listbox lst)initializecomponent();lstfolder=lst; *学院 信息工程系毕业设计(论文) 第 13 页

33、共 21 页这几行代码则是手动编写的重载的构造方法。它使用了一个 listbox 类型的参数,由于 listbox 是一个引用的类型,这样当主窗体把一个 listbox 类型当做参数传递给 frmcreatefolder 窗体的构造方法后,就可以在 frmcreatefolder 窗体中控制这个 listbox。private listbox lstfolder;这行代码声明了一个 listbox 类型的成员变量,用于存放从构造方法传递进来的 listbox 引用,以方便在整个窗体范围内进行调用。string path=application.startuppath+图片目录这行代码中的 ap

34、plication.startuppath 属性返回当前程序可执行文件所在路径。5.1.7 frmloadpic.cs 窗体窗体 打开 frmloadpic 窗口,双击窗口空白处,为窗口生成一个 load 事件,frmloadpic 窗体用于将图片导入程序目录中,它需要控制主窗体中的列表框和状态栏两个控件,所以在这几行代码的重载构造方法中使用了两个参数,以传递对这两个控件的引用。 openfiledialogselpic.filter=“图像文件(*.bmp;*.jpg;*.gif;“+”*.jpeg;*.ico) *.bmp;*.jpg;*.gif;*.jpeg;*.ico”;这行代码设置打

35、开文件对话框的文件筛选器,这样在使用打开文件对话框时,就只能选择指定的文件类型。 双击(浏览)按钮,生成一个按钮的单击事件。为复选列表框 chklspics 生成一个 selectedindexchange 事件。双击(修改)按钮,生成一个按钮的单击事件。 picinfo picinfo=new picinfo(s); 这行代码使用了前面所编写的 picinfo 类,编写它的主要原因是如果给图像改名,需要有地方存放修改后的名字。 chklspics.items.add(picinfo,true); 这行代码直接将上一行代码所创建的 picinfo 对象作为元素添加进复选列表框内。复选列表框的项

36、所显示的文字将是 picinfo 对象的 tostring()方法所返回的字符串。 分别双击(确定)和(取消)按钮,为它们生成按钮单击事件, 载入图像时,需要考虑一下几个因素。 1.由于可以从多个路径选择图片,有可能出现图片文件名相同但路径不同的情况,把它复制到同一文件夹时会由于文件名相同而导致出错。 2.在把图片复制到某文件夹时,文件夹有可能本身已有同名的文件,这样同样*学院 信息工程系毕业设计(论文) 第 14 页 共 21 页会导致出错。常见的解决方案如看图软件 acdsee,在复制过程中如出现同名文件,将弹出提示窗口,供用户进行改名或放弃复制操作。本案例使用了不同的方法,出现同名文件时

37、并不提示用户,而直接给图片改名。 给图片重命名的算法如下所述给图片重命名的算法如下所述: 1.给取目的文件夹(所有图片将被复制到这个文件夹)下的所有已存在的图片名称,并放入 arraylist 内。 2.将 arraylist 内的图片名称从小到大进行排序。3.在图片被复制到目的文件夹之前,首先跟 arraylist 内的图片名称一一对比,如果发现同名文件,则在文件名后加“-”号和数字“1” 。把更改后的名称继续跟arraylist 内的下一个图片名称进行对比,如果重名,则把数字“1”变为“2” 。直到在 arraylist 内找到比它大的名称,则把它插入到这个位置。4.将图片复制到目的文件夹

38、,对下一张图片重复第步操作,直到所有图片被复制到目的文件夹为止。5.1.8 mainform.cs 窗体窗体 双击(新增目录)工具按钮,生成按钮的单击事件,这里使用模式窗体的方式打开前面所创建的 frmcreatefolder 窗体。 双击(删除目录)工具按钮,生成按钮的单击事件 双击(导入图像)工具按钮,生成按钮的单击事件 选中 lvview 控件,在事件窗口中双击 drawitem 事件,生成一个绘制项的事件,当 listview 的 ownerdraw 属性为 true 时,可以通过 drawitem 事件手动绘制listview 中的每一个项。在 drawitem 事件方法中,参数 e

39、 的 bounds 属性返回这个项所占用的矩形,可以在这个矩形里绘制图形和文字。 选中列表框 lstfolder,为它生成一个 selectedindexchanged 事件 为(删除图像)和(退出)工具按钮分别生成单击(click)事件 选中 lvview 控件,在事件窗口中双击 doubleclick 事件,生成一个事件 分别双击窗体下方工具栏的(返回目录) 、 (上一幅图像)(tsbtnperiod)、 (下一幅图像)(tsbtnnext)工具按钮,为它们生成相应的单击事件显示图像有两种模式显示图像有两种模式: 1 .按原图尺寸显示:当图像尺寸大于装载它的容器(panell)时,则显示图

40、像的中间部分。2 .显示全图:当图像尺寸大于装载它的容器时,则按比例对原图进行缩放,以适合容器大小。当图像尺寸小于装载它的容器时,则在容器中央显示原图。*学院 信息工程系毕业设计(论文) 第 15 页 共 21 页自定义方法 matchimage()正是用于计算图像的显示尺寸,以对 picturebox 控件尺寸进行调整并正确地显示图像。双击(自动播放)(tsbtnautoplay)按钮,生成一个按钮的单击事件。双击 timerl控件,生成一个定时器事件。选中工具栏上的组合框(tscbinterval)控件,并为它生成一个 selectedindexchanged 事件同时选中(实际大小)(t

41、sbtnnormal)和(合适大小)(tsbtnmatch)两个工具按钮控件,打开事件窗口,在 click 事件内输入“tsbtnshowmode_click”后按 enter 键,为两个按钮生成一个共同的单击事件选中 pbpic 控件,并分别为它生成 mousedown、mousemove、morseup 三个事件。当图像处于实际大小状态时,如果原图尺寸大于装载它的容器的尺寸时,图像无法显示完全,这时应该允许用鼠标拖动图像以浏览图像的任何部分。实现图像拖动功能需要使用三个事件。1.按下鼠标左键时,设置一个标志(isdraging),表明允许图像被拖动,并记录但是鼠标和 picturebox

42、所处的位置,以方便后面拖动图像时计算图像位置。2.松开鼠标左键时,设置标志(isdraging),表明图像不允许被拖动。3.移动鼠标时,判断标志(isdraging),如果标志的值为真,表明鼠标左键还处于被按下状态,这时可以拖动图像。如果标志的值为假,则表明鼠标左键已经不处于被按下状态,这时不能拖动图像。拖动图像的功能通过改变 picturebox 的位置来实现,需要注意一下几点问题。1.如果装载图像的容器大于图像尺寸,则不允许拖动图像;2.当图像的宽小于容器的宽,而图像的高大于容器的高时,只允许垂直拖动图像。3.当图像的高小于容器的高,而图像的宽大于容器的宽时,只允许水平拖动图像。4.当图像

43、左边界到达容器左边界时,不允许再向右拖动图像。 5.当图像右边界到达容器右边界时,不允许再向左拖动图像。6.当图像上边界到达容器上边界时,不允许再向下拖动图像。7.当图像下边界到达容器下边界时,不允许再向上拖动图像。 5.2 关键技术介绍 图片浏览器难点在于缩略图的显示,如果一个目录中有很多图片,而每张图片的尺寸都比较大,把每张图片都缩小并显示出来需要花费很长的时间,这样会导致应用程序的假死现象(在没有完成某项工作之前,应用程序无法进行其他操作) 。处*学院 信息工程系毕业设计(论文) 第 16 页 共 21 页理这个问题可以采取多线程的方法,把显示缩略图的过程放在一个线程内,这样在显示缩略图

44、的过程中可以进行其他操作。另外一种解决方法是给每张图片生成一张缩略图,并存放于数据库中,在浏览缩略图时,直接从数据库中读取缩略图并显示。由于缩略图非常小,并且是未经压缩的格式,读取速度非常快,这样就能以很快的速度显示完所有图片的缩略图。 本次设计另辟蹊径,以达到类似效果。在导入图片的同时,为图片生成100*100 像素的 bmp 格式的缩略图(如果原图的长和宽都小于 100 像素,则按原图尺寸生成缩略图) ,把原图和缩略图分别存放于两个目录内,并一一对应。通过原图的文件名可以找到相对应的缩略图,如果缩略图不存在,则即时生成相应的缩略图。实践证明,这样做的效果令人满意,能比较顺畅的现实多张图片的缩略图。*学院 信息工程系毕业设计(论文) 第 17 页 共 21 页第 6 章 测 试 6.1 软件测试的目的和方法 软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望做的事情,另一方面是确认软件以正确的方式来做了这个事情。第二是提供信息,比如提供给开发人员或程序经理的回馈信息,为风险评估所准备的信息。第三软件测试不仅是在测试软件软件产品本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现

温馨提示

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

评论

0/150

提交评论