毕业设计论文基于C的图片浏览器设计.doc

上传人:sccc 文档编号:4861914 上传时间:2023-05-20 格式:DOC 页数:23 大小:433.02KB
返回 下载 相关 举报
毕业设计论文基于C的图片浏览器设计.doc_第1页
第1页 / 共23页
毕业设计论文基于C的图片浏览器设计.doc_第2页
第2页 / 共23页
毕业设计论文基于C的图片浏览器设计.doc_第3页
第3页 / 共23页
毕业设计论文基于C的图片浏览器设计.doc_第4页
第4页 / 共23页
毕业设计论文基于C的图片浏览器设计.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《毕业设计论文基于C的图片浏览器设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于C的图片浏览器设计.doc(23页珍藏版)》请在三一办公上搜索。

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

2、控件数组;局部更新目 录摘 要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 FrmCreateFolder窗体105.1.3 FrmLoadPic窗体105.1.4 PicInfo.cs窗体115.1.5 Folder.cs窗

3、体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附录120第 21页 共21页*学院 信息工程系毕业设计(论文) 第一章 开发环境的介绍1.1 C#的由来在过去的一段时间中,C和C+一直是商业软件的开发领域中最具生命力的语言。虽然他们为程序员提供了丰富的功能。高度的灵活性和强大的底层控制力,但是利用C、C+语言开发的Windows应用程序显然复杂了很多,同时也牺牲了一

4、定的效率与VB相比,同等级的C、C+完成一个程序往往需要更多的时间来完成开发,因此各层人士都试图寻找一种新的语言,希望能在功能和功率之间找到一种更为理想的平衡点。针对这一问题,微软公司与2000年6月26日正式发布C#。C#是一种最新的、面向对象的编程语言,C#使得程序员可以在Miscrsoft开发的最新的.NET平台上快速的编写应用程序。C#是一种简单、现代、面向对象且类型安全的编程语言,C#语言从C和C+语言演化而来,同时C#具备了应用程序快速开发(Rapid Application Development,RAD)语言的高效率和C+固有的强大能力,并吸收了Java和Delphi等语言的特

5、点和精华,是.NET开发的首选语言。1.2 C#的特点1 .简洁易用的语法C#主要从C和C+继承而来,同时吸收Java和Delphi的优点,摒弃了C和C+中一些比较复杂而且不常用的语法元素比如父类继承。使用C和C+时最令程序员生畏的语法是什么?大多数程序员会说:指针!C和C+中的指针虽然功能强大,但极不安全,稍不小心就会导致程序出错,甚至导致系统奔溃。C#取消了指针,不允许直接对内存进行操作,让代码运行在安全的环境中。此外,C#语法的很多变化无不体现了C#的简洁之美。2 .自动的资源回收机制C#与.NET的完美集成,使得C#完全拥有.NET的自动回收机制。在windows中,提供给程序使用的一

6、切软、硬件统称为资源。比如程序中需要在窗口上画图的笔就是一种资源,在早期的windows版本中,程序使用完资源后应该及时解放,否则会导致系统资源不足而运行变慢。在.NET框架中,由于资源使用完后由系统自动清理,所以,编写C#程序,不必小心翼翼地保证及时释放资源,从而可以把更多的精力放在程序编写的逻辑上。3 .与WEB的紧密结合网上办公和电子商务在各行各业中的到越来越广泛的的应用,B/S模式程序的市场需求越来越多。在微软的.NET开发套件中,C#与ASP.NET是相互融合的。ASP.NET的应用程序可以使用VB.NET语法,也可以使用C#语法。使用C#语法编写的ASP.NET结构更严谨,运行更高

7、效。由于有了WEB服务框架的帮助,对程序员来说,网络服务看起来就像是C#的本地对象。程序员们能够利用他们已有的面对对象的只是和技巧开发WEB服务。仅需要使用简单的C#语言结构,C#组件就能够方便地为WEB服务,并允许它们通过Internet被运行在任何操作系统上的任何语言所调用。4 .完整的安全性与错误处理语言的安全性与错误处理能力,是衡量一种语言是否优秀的重要依据。任何人都会犯错,即使是最熟练的程序员也不例外,如忘记变量的初始化,对不属于自己管理范围内存的空间进行修改等。这些错误常常产生难以预计的后果。一旦这样的软件被投入使用,寻找与改正这些简单错误的代价是让人无法估计的。C#的先进设计思想

8、可以消除软件开发中的许多常见错误,并提供了包括类型安全在内的完整的安全性能。为减少开发中的错误,C#帮助开发者通过更少的代码完成相同的功能,这部大减轻了编程人员的工作量同时更有效的避免了从错误的产生。5 .版本处理技术升级软件系统中的组件(模块)是一件容易产生错误的工作,在代码的修改中可能对现存的软件产生影响,很有可能导致程序的奔溃。为了帮助开发人员处理这些问题C#在语言中内置了版本控制功能。C#提供内置的版本支持来开发费用,使用C#将会使开发人员更轻易地开发和维护各种商业软件。6 .灵活性和兼容性在简化语法的同时,C#并没有失去灵活性。尽管C#不是一种无限制语言,比如:他不能用来开发硬件驱动

9、程序,在默认的状态下没有指针等,但是学习过程中你将发现,它仍然是那样的灵巧。7. 快速应用开发(RAD)功能 支持快速开发(Rapid application development)可以说是目前开发语言最为重要的一大功能,也正是C/C+的致命伤。网络时代应用系统的开发必须按照网络时代的速度来进行,支持快速开发可以使得开发人员的开发效率倍增,从而使得他们可以从繁重的重复性劳动中解放出来。c#的RAD功能主要表现在例如垃圾收集、指代等众多特性上。垃圾收集机制将减轻开发人员对内存的管理负担,而指代功能更是可以让开发者不经过内部类就调用函数。利用c#的这些功能,可以使开发者通过较少的代码来实现更强大

10、的应用程序,并且能够更好地避免错误发生,从而缩短了应用系统的开发周期。8. 语言的自由性用C#编写的程序能最大程度地和任何支持.NET的语言互相交换信息。能够继承和使用任何语言所编写的程序可以称得上是知识的继承,这样做的好处是节省了大量的工作,你不必把COBOL等语言强行改成另一种语言,.NET让各种语言真正地互相交流了。9. 强大的Web服务端组件在c#的Web编程中,最让人兴奋的是Web服务端的组件,它们不仅包括传统组件,还包括那些能够自动连接五花八门服务的可编程组件,你可以用c#编写自己的服务器端组件,服务器端组件和标准的HTML提供的服务自然是不一样的,使用它们可以更自由、更容易地进行

11、数据绑定。不久,那些视频服务器组件也很快会出现,有了这些强大的组件,我们可以设计出功能更加强劲的企业级分布式应用系统。10. 支持跨平台随着互联网应用程序的应用越来越广,人们逐渐意识到由于网络系统错综复杂,使用的硬件设备和软件系统各不相同,开发人员所设计的应用程序必须具有强大的跨平台性。C#编写的应用程序就具有强大的跨平台性,这种跨平台性也包括了c#程序的客户端可以运行在不同类型的客户端上,比如PDA、手机等非PC装置。11. 与XML的融合由于XML技术真正融入到了.NET和c#之中,c#的编程变成了真正意义的网络编程,甚至可以说.NET和c#是专为XML而设计,使用C#的程序员可以轻松用c

12、#内含的类来使用XML技术。就这方面而言,目前c#提供给了程序员更多的自由和更好的性能来使用XML。12. 对C+的继承C#继承并保留了C+强大的功能,例如, c#保留了类型安全的检测和重载功能,c#还提供了一些新功能取代了一些原来的ANSI C预处理程序的功能,提高了语言的类型安全等安全性1.3 .NET开发平台.NET是一个用于建立应用程序的平台,它在内部封装了大量的功能强大的应用程序接口函数(API),利用这些函数可以开发各类Windows应用软件。.NET还是一个开发平台,它向广大的程序员提供了功能强大的集成开发环境(IDE)Visual Studio .NET。在未来,.NET还是一

13、个运行、发布应用程序的平台,它可以将应用程序作为一种服务,通过Internet提供给分布在世界各个角落的网络用户。.NET平台对早期的开发平台作了重大改进。.NET提供了一种新的软件开发模型,它允许用不同程序设计语言创建的应用程序能相互通信。这个平台也允许开发者创建基于Web的应用程序,这些应用程序能够发布到多种不同的设备(甚至是无线电话)和台式机上。Microsoft的.NET 计划为利用Internet和Web进行软件的开发、设计和使用开辟了广阔的新前景。.NET策略的一个主要方面是它与具体的语言或平台无关。它不需求程序员使用惟一的一种程序设计语言。程序员可以将多种与.NET兼容的语言(图

14、1-1)结合起来开发.NET应用程序。多个程序员可以共同参与同一个软件项目,每个人可以使用自己最精通的.NET语言(如Visual C+ .NET、C#、Visual Basic和其他许多语言)来编写代码。第二章 问题的定义及可行性研究2.1问题的定义开发的图片浏览器要具备良好的人机交互界面、对图片实现分目录管理用户可以自行创建并删除存放图片的目录、对目录下的图片以缩略图的方式进行浏览、以实际大小或适合窗体大小浏览、对同目录下的图片以自动播放形式进行浏览并可以调整播放时间。图片浏览器难点在于缩略图的显示,如果一个目录中有很多图片,而每张图片的尺寸都比较大,把每张图片都缩小并显示出来需要花费很长

15、的时间,这样会导致应用程序的假死现象(在没有完成某项工作之前,应用程序无法进行其他操作)。2.2可行性研究处理这个问题可以采取多线程的方法,把显示缩略图的过程放在一个线程内,这样在显示缩略图的过程中可以进行其他操作。另外一种解决方法是给每张图片生成一张缩略图,并存放于数据库中,在浏览缩略图时,直接从数据库中读取缩略图并显示。由于缩略图非常小,并且是未经压缩的格式,读取速度非常快,这样就能以很快的速度显示完所有图片的缩略图。本次设计另辟蹊径,以达到类似效果。在导入图片的同时,为图片生成100*100像素的bmp格式的缩略图(如果原图的长和宽都小于100像素,则按原图尺寸生成缩略图),把原图和缩略

16、图分别存放于两个目录内,并一一对应。通过原图的文件名可以找到相对应的缩略图,如果缩略图不存在,则即时生成相应的缩略图。实践证明这样做的效果令人满意,能比较顺畅的现实多张图片的缩略图。第三章 需求分析3.1需求分析阶段的任务 1.分析该设计要实现哪些功能(1)可以对目录下的图片以缩略的方式进行浏览,并在浏览过程中可以删除一张或多张图片。(2)可以以实际大小或适合窗体尺寸的方式对单张图片进行浏览,并可以切换到同目录下的上一张图片或下一张图片浏览。也可以对同目录下的图片以自动播放的形式进行浏览,并可以调整自动播放的时间间隔。(3)可以在浏览某张图片时将其删除。(4)可以以全屏幕的方式浏览图片。 2.

17、分析该设计功能实现的步骤及过程 (1)主窗体,可以用于浏览和查看图片。 (2)目录窗体,用于创建图片的管理目录。 (3)导入图片窗体,用于向目录中导入图片。 3.2系统功能的详细分析具有良好的人机交互界面,有一定的计算机操作经验的用户可以不经任何培训就可以直接使用该软件。 对图片实现分目录管理,用户可以自行创建并删除存放图片的目录,并可以方便地将各种图片存放于相应的目录之中。 可以对目录下的图片以缩略图的方式进行浏览,以方便用户从众多图片中查找出自己想要的图片,并在浏览过程中可以删除一张或多张图片。 可以以实现大小或适合窗体尺寸的方式对单张图片进行浏览,并可以切换到同目录下的上一张图片或下一张

18、图片进行浏览。也可以对同目录下的图片以自动播放的形式进行浏览,并可以调整播放的时间间隔。 可以为创建的目录导入或删除图片。 可以手动的进行图片的浏览。该图片浏览器应该具有新增目录,删除目录,导入图像,删除图像,退出等功能,还有的功能可以在设计中不断完善。 第四章 总体设计4.1总体设计阶段的任务 1. 界面设计:程序包括三个窗体。(1)MainForm窗体:程序的主窗体,可以用于浏览和查看图片,并对图片进行管理。如图41图41 。 (2)FrmCreateFolder窗体:创建目录窗体,用于创建图片的管理目录。如图42图42 (3)FrmLoadPic窗体:导入图片窗体,用于向目录中导入图片。

19、如图43图43 2. 代码编写:代码包括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.图像:删除一张在已经

20、创建的目录中的图片。5.和后退按钮:手动控制图片的前后浏览。第五章 详细设计 5.1系统功能的详细设计与实现5.1.1 MainForm窗体:(1). 创建一个新项目“图片管理器”。把窗体改名为MainForm,并设置它的属性。(2)在窗体中放置一个ToolStrip控件,再添加5个工具按钮并进行改名和设置属性。(3)在工具栏中添加2个Separator。再在窗体中放2个ToolStrip控件并进行命名和属性的设置,再添加6个工具按钮,1个组合框,2个分隔条,并进行相应的属性改写。(4)在窗体上放置1个StatusStrip控件,它自动放置在窗体的最底部,在状态栏中添加1个ProgressBa

21、r和1个StatusLabel。(5)在窗体上放置1个ListBox控件并进行属性设置。(6)在LstFolder控件右边放置一个Splitter控件,它会自动贴向LstFolder的右边界靠齐,这个控件的作用是可以再程序运行时改变它左边和右边控件的宽度。(7)在Splitter控件的右侧放置1个Panel控件,并设置它的属性。(8)在panel1上放置1个ListView控件,它用于显示一个目录下所有图片的缩略图。把它的OwnerDraw属性设置为true,设置这个属性后就可以手动绘制ListView内各个项的图标。并把View属性设置为LargeIcon,这样ListView就会以大图标的

22、方式显示里面的每个项。在窗体上放置1个ImageList控件,并进行相关属性设置。在这里,ImageSize控件的作用并不是存放图片,而是控制ListView各个项的绘图区域的大小。(9)在panel1上放置1个PictureBox控件,命名为pbPic,用于显示单张图片。(10)在窗体上放置1个OpenFileDialog控件。(11)在窗体上放置1个Tinner控件,把它的Interval书信设置为2000。至此,主窗体界面制作完毕。如图51所示5.1.2 FrmCreateFolder窗体(1)新建一窗体,命名为FrmCteateFolder。(2)在窗体中放置1个TextBox控件,命

23、名为txtFolderName。 (3)在窗体中放置2个Button控件,分别命名为btnOK和btnCancel。并把它们的Text属性设置为“确定”和“取消”。 5.1.3 FrmLoadPic窗体(1)新建一窗体,命名为FrmLoadPic。(2)在窗体上放置1个ComboBox控件,命名为cbFolder。DropDownStyle属性设置为:DropDownList(3)在窗体上放置1个CheckedListBox控件,命名为chklsPic。HorizontalScrollbar属性设置为true。(4)在窗体上放置1个TextBox控件,命名为txtPicName。(5)在窗体上

24、放置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.4 PicInfo.cs窗体在解决方案资源管理器中的图片管理器项目上右击鼠标,在弹出菜单

25、中选择添加新建项。在添加新项窗口中选择类,在名称编辑框内输入“PicInfo.cs”。最后单击添加按钮添加一个新的类。PicInfo是一个自定义的类,什么是类?可以这样去理解:类可以存放某些信息,并能实现特定功能。类里有属性和方法,就好比银行的提款机,通过使用提款机,可以查询账户里还有还剩多少钱,也可以通过提款机取钱。在编程中定义类是为了把一些相关的功能包装起来,放在一起,以方便在程序中使用。Private string _fullName;Private string _nameNoExtension;这两行代码声明了两个私有成员变量,这两个成员变量供类内部使用,类的外部不可以直接访问它们,

26、但可以通过属性来访问和设置它们的值。Public override string ToString ()Return _fullName;这几行代码,重载了ToString()方法,由于PicInfo类的作用是把类实例作为项存放于复选列表框内。而每个项显示的文字正是通过访问ToString()方法而获得,重载这个方法,正是为了在复选列表框内显示指定的文字。5.1.5 Folder.cs窗体 在(解决方案资源管理器)中的(图片管理器)项目上右击鼠标,在弹出菜单中选择(添加)(新建项)。在(添加新项)窗口中选择(类),在(名称)编辑框内输入“Folder.cs”。最后单击(添加)按钮添加一个新的类

27、。 在第一次浏览一个目录时,需要从硬盘读取这个目录下的所有缩略图并显示,此时所有缩略图被载入内存。如果切换到其他目录时就从内存中释放这些数据,再次浏览这个目录时就导致程序重新从硬盘读取数据,这样会使得缩略图的显示速度变慢(内存的速度远胜于硬盘)。本案例中,只要浏览了某个目录,就让这个目录下的所有缩略图常驻于内存,以供下次浏览时调用,直到应用程序关闭为止。这样做可能导致程序的内存使用加大,但在一定程度上弥补了没有使用多线程技术的遗憾。Folder类正是用于实现这个功能的,它封装了缩略图的生成、读取、删除、计算边界的功能。 Foreach (string sourceFile in Directo

28、ry.GetFiles(_sourcePath) 这一行的Directory.GetFiles(_sourcePath)方法访问指定文件夹(_sourcePath)中的所有文件,并将它们的文件名存放于字符串数组中返回。 Public override string ToString() Return _name; 这几行代码重载了ToString()方法,这样做是为了在ListBox内显示指定的字符串,即目录名称。5.1.6 FrmCreateFolder.cs窗体打开FrmCreateFolder的设计窗体,分别双击(确定)和(取消)按钮,为它们生成按钮的单机事件。 FrmCreateFol

29、der窗体的作用是创建一个新的图片管理目录,所有图片都存放于可执行文件所在目录下的(图片目录)文件夹之下,新建一个管理目录会在(图片目录)文件夹下创建一个以管理目录命名的文件夹。由于FrmCreateFolder窗体需要操作主窗体的列表框控件,这就会涉及在不同窗体间传递参数的问题。在不同窗体间传递参数有很多种方法,本案例只使用其中的一种,就是在窗体构造方法中传递参数,这就需要重载窗体的构造方法。Public FrmCreateFolder()InitializeComponent();这几行代码是Visual Studio 2005自动问窗体生成的构造方法。Public FrmCreateFo

30、lder(ListBox lst)InitializeComponent();lstFolder=lst; 这几行代码则是手动编写的重载的构造方法。它使用了一个ListBox类型的参数,由于ListBox是一个引用的类型,这样当主窗体把一个ListBox类型当做参数传递给FrmCreateFolder窗体的构造方法后,就可以在FrmCreateFolder窗体中控制这个ListBox。Private ListBox lstFolder;这行代码声明了一个ListBox类型的成员变量,用于存放从构造方法传递进来的ListBox引用,以方便在整个窗体范围内进行调用。String path=Appl

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

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

33、进复选列表框内。复选列表框的项所显示的文字将是PicInfo对象的ToString()方法所返回的字符串。 分别双击(确定)和(取消)按钮,为它们生成按钮单击事件, 载入图像时,需要考虑一下几个因素。 1.由于可以从多个路径选择图片,有可能出现图片文件名相同但路径不同的情况,把它复制到同一文件夹时会由于文件名相同而导致出错。 2.在把图片复制到某文件夹时,文件夹有可能本身已有同名的文件,这样同样会导致出错。常见的解决方案如看图软件ACDSee,在复制过程中如出现同名文件,将弹出提示窗口,供用户进行改名或放弃复制操作。本案例使用了不同的方法,出现同名文件时并不提示用户,而直接给图片改名。 给图片

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

35、rm.cs窗体 双击(新增目录)工具按钮,生成按钮的单击事件,这里使用模式窗体的方式打开前面所创建的FrmCreateFolder窗体。 双击(删除目录)工具按钮,生成按钮的单击事件 双击(导入图像)工具按钮,生成按钮的单击事件 选中lvView控件,在事件窗口中双击DrawItem事件,生成一个绘制项的事件,当ListView的OwnerDraw属性为true时,可以通过DrawItem事件手动绘制ListView中的每一个项。在DrawItem事件方法中,参数e的Bounds属性返回这个项所占用的矩形,可以在这个矩形里绘制图形和文字。 选中列表框lstFolder,为它生成一个Select

36、edIndexChanged事件 为(删除图像)和(退出)工具按钮分别生成单击(Click)事件 选中lvView控件,在事件窗口中双击DoubleClick事件,生成一个事件 分别双击窗体下方工具栏的(返回目录)、(上一幅图像)(tsbtnPeriod)、(下一幅图像)(tsBtnNext)工具按钮,为它们生成相应的单击事件显示图像有两种模式: 1 .按原图尺寸显示:当图像尺寸大于装载它的容器(panell)时,则显示图像的中间部分。2 .显示全图:当图像尺寸大于装载它的容器时,则按比例对原图进行缩放,以适合容器大小。当图像尺寸小于装载它的容器时,则在容器中央显示原图。自定义方法MatchI

37、mage()正是用于计算图像的显示尺寸,以对PictureBox控件尺寸进行调整并正确地显示图像。双击(自动播放)(tsbtnAutoPlay)按钮,生成一个按钮的单击事件。双击timerl控件,生成一个定时器事件。选中工具栏上的组合框(tscbInterval)控件,并为它生成一个SelectedIndexChanged事件同时选中(实际大小)(tsbtnNormal)和(合适大小)(tsbtnMatch)两个工具按钮控件,打开事件窗口,在Click事件内输入“tsbtnShowMode_Click”后按Enter键,为两个按钮生成一个共同的单击事件选中pbPic控件,并分别为它生成Mous

38、eDown、MouseMove、MorseUp三个事件。当图像处于实际大小状态时,如果原图尺寸大于装载它的容器的尺寸时,图像无法显示完全,这时应该允许用鼠标拖动图像以浏览图像的任何部分。实现图像拖动功能需要使用三个事件。1.按下鼠标左键时,设置一个标志(isDraging),表明允许图像被拖动,并记录但是鼠标和PictureBox所处的位置,以方便后面拖动图像时计算图像位置。2.松开鼠标左键时,设置标志(isDraging),表明图像不允许被拖动。3.移动鼠标时,判断标志(isDraging),如果标志的值为真,表明鼠标左键还处于被按下状态,这时可以拖动图像。如果标志的值为假,则表明鼠标左键已

39、经不处于被按下状态,这时不能拖动图像。拖动图像的功能通过改变PictureBox的位置来实现,需要注意一下几点问题。1.如果装载图像的容器大于图像尺寸,则不允许拖动图像;2.当图像的宽小于容器的宽,而图像的高大于容器的高时,只允许垂直拖动图像。3.当图像的高小于容器的高,而图像的宽大于容器的宽时,只允许水平拖动图像。4.当图像左边界到达容器左边界时,不允许再向右拖动图像。 5.当图像右边界到达容器右边界时,不允许再向左拖动图像。6.当图像上边界到达容器上边界时,不允许再向下拖动图像。7.当图像下边界到达容器下边界时,不允许再向上拖动图像。 5.2关键技术介绍 图片浏览器难点在于缩略图的显示,如

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

41、图(如果原图的长和宽都小于100像素,则按原图尺寸生成缩略图),把原图和缩略图分别存放于两个目录内,并一一对应。通过原图的文件名可以找到相对应的缩略图,如果缩略图不存在,则即时生成相应的缩略图。实践证明,这样做的效果令人满意,能比较顺畅的现实多张图片的缩略图。第6章 测 试 6.1软件测试的目的和方法 软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望做的事情,另一方面是确认软件以正确的方式来做了这个事情。第二是提供信息,比如提供给开发人员或程序经理的回馈信息,为风险评估所准备的信息。第三软件测试不仅是在测试软件软件产品本身,而且还包括软件开发的过程。如果一个软件产品开发完成

42、之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此,软件测试的第三个目的是保证整个软件开发过程是高质量的。软件测试的目的在于看是否本次设计是否成功,所要求的功能能否实现以便于发现未实现的功能,或者是代码编写时的错误导致程序无法运行!软件测试时每个软件设计很重要的一部分所以不能忽视!1. 功能测试:验证测试软件功能能否正常按照它的设计工作。看运行软件时的期望行为是否符合原设计。2.可接受性测试:是在把测试的版本交付测试部门大范围测试以前进行的对最基本功能的简单测试。因为在把测试的版本交付测试部门大范围测试以前应该先验证该版本对于所测试的功能基本上比较稳定。必须满足一些最低要求,比如不

43、会很容易程序就挂起或崩溃。如果一个软件没通过可测试性的验证,就应该花时间在该测试版本上测试,同时还要找到造成该版本不稳定的主要缺陷并督促尽快加以修正。3. 用户界面测试:分析软件用户界面的设计是否合乎用户期望或要求。它常常包括菜单,对话框及对话框上所有按钮,文字,出错提示,帮助信息等方面的测试。6.2 软件测试的步骤在进行总体详细设计的时候,可以每一步都运行程序,但由于各部分代码息息相关。在调试程序某项功能时有可能出错,但应该在做每一个步骤时尽量排除所有由于粗心所导致的语法错误,这样就不至于在完成程序后发现过多错误而变得无所适从。运行程序,尝试单击窗体中的每一个按钮,查看相关功能是否实现。并认

44、真观察是哪些代码实现了这些功能。第7章 总结与展望通过本次毕业设计,让我对C#这一完全面向对象的语言有了更加深刻的认识。本次设计让我对我所学过的知识有了一个更加深刻的认识,而且更使我对学过的知识有一个更加系统和高度概括的认识。并且还涉及了一些没学过的知识,让我们更加的对C#这一门语言有了更加深刻的求知欲!本次设计还有很多的功能可以研究设计,比如可以在浏览某张图片时可以更改其详情,对图片进行顺时针或逆时针旋转,可以在查看图片缩略图或浏览单张图片时将一张或多张图片导出到用户指定的位置。可以多张照片同时修改名称。图片浏览器还可以有很多的不足,如:修改以后就无法再次修改图片的名称,可以加入更加简洁,更

45、加人性化的设计!致 谢本人的毕业论文是在*导师的亲切关怀和悉心指导下完成的。她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,*导师都始终给予我细心的指导和不懈的支持。在此谨向*导师致以诚挚的谢意和崇高的敬意。在此,我还要感谢在一起愉快的度过大学生活的每个可爱的同学们和尊敬的老师们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!谢谢你们!在我即将完成学业之际,我深深地感谢我的家人给予我的全力支持!最后,衷心地感谢在百忙之中评阅论文和参加答辩的各位专家、教授!附录1这是新增目录时的界面,输入要新增的目录的名称!如图81图81这是删除目录的界面,删除目录将导致目录下的图片一起被删除!如图82图82单独显示一张图片的界面,可以进行返回目录、前一张、后一张、最大化等操作。如图83 图83

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号