




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*学院 信息工程系毕业设计(论文) 第 I 页 共 21 页 摘 要 图片浏览器是日常应用中必可少的应用软件之一,本次毕业设计中,运用 C#来 设计图片浏览器。文中详细叙述了浏览器的详细制作过程。采用 C#提供的控件数组 来实现,并对可视区内的图形进行局部更新方法进行了详述。 系统功能主要有图片的浏览、预览、图片拷贝、删除、粘贴等功能。并增加了 各种键盘控制功能。实现了对多种格式图形的浏览,包括 gif、JPG、BMP、ICO 等 图片格式。 本图片浏览程序具有实用性、稳定性、易用性,和可维护性的特点,系统留了 扩展接口,用户可以根据实际需要对其功能进行扩充、完善与修改,使其符合自己 的要求。总之,本系统是一个逐步完善的系统。 关键词:图片浏览器;控件数组;局部更新 *学院 信息工程系毕业设计(论文) 第 II 页 共 21 页 目目 录录 摘 要III 目 录IV 第一章 开发环境的介绍1 1.1 C#的由来1 1.2 C#的特点1 1.3 .NET 开发平台.3 第二章 问题的定义及可行性研究5 2.1 问题的定义.5 2.2 可行性研究.5 第三章 需求分析6 3.1 需求分析阶段的任务.6 3.2 系统功能的详细分析.6 第四章 总体设计7 4.1 总体设计阶段的任务.7 4.2 图片浏览软件功能的具体分析.8 第五章 详细设计9 5.1 系统功能的详细设计与实现.9 5.1.1 MainForm 窗体:.9 5.1.2 FrmCreateFolder 窗体10 5.1.3 FrmLoadPic 窗体10 5.1.4 PicInfo.cs 窗体11 5.1.5 Folder.cs 窗体.11 5.1.6 FrmCreateFolder.cs 窗体12 5.1.7 FrmLoadPic.cs 窗体 .13 5.1.8 MainForm.cs 窗体 14 5.2 关键技术介绍.15 第 6 章 测 试17 6.1 软件测试的目的和方法.17 6.2 软件测试的步骤17 第 7 章 总结与展望18 致 谢19 附录 1.20 *学院 信息工程系毕业设计(论文) 第 1 页 共 22 页 第一章 开发环境的介绍 1.1 C#的由来 在过去的一段时间中,C 和 C+一直是商业软件的开发领域中最具生命力的语 言。虽然他们为程序员提供了丰富的功能。高度的灵活性和强大的底层控制力,但 是利用 C、C+语言开发的 Windows 应用程序显然复杂了很多,同时也牺牲了一定 的效率与 VB 相比,同等级的 C、C+完成一个程序往往需要更多的时间来完成开发, 因此各层人士都试图寻找一种新的语言,希望能在功能和功率之间找到一种更为理 想的平衡点。 针对这一问题,微软公司与 2000 年 6 月 26 日正式发布 C#。C#是一种最新的、 面向对象的编程语言,C#使得程序员可以在 Miscrsoft 开发的最新的.NET 平台上快 速的编写应用程序。 C#是一种简单、现代、面向对象且类型安全的编程语言,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+中的指针虽然功能强大, 但极不安全,稍不小心就会导致程序出错,甚至导致系统奔溃。C#取消了指针,不 允许直接对内存进行操作,让代码运行在安全的环境中。此外,C#语法的很多变化 无不体现了 C#的简洁之美。 2 .自动的资源回收机制 C#与.NET 的完美集成,使得 C#完全拥有.NET 的自动回收机制。在 windows 中, 提供给程序使用的一切软、硬件统称为资源。比如程序中需要在窗口上画图的笔就 是一种资源,在早期的 windows 版本中,程序使用完资源后应该及时解放,否则会 导致系统资源不足而运行变慢。在.NET 框架中,由于资源使用完后由系统自动清理, 所以,编写 C#程序,不必小心翼翼地保证及时释放资源,从而可以把更多的精力放 在程序编写的逻辑上。 3 .与 WEB 的紧密结合 *学院 信息工程系毕业设计(论文) 第 2 页 共 21 页 网上办公和电子商务在各行各业中的到越来越广泛的的应用,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)功能 支持快速开发(Rapid application development)可以说是目前开发语言最为重要 的一大功能,也正是 C/C+的致命伤。网络时代应用系统的开发必须按照网络时代 的速度来进行,支持快速开发可以使得开发人员的开发效率倍增,从而使得他们可 以从繁重的重复性劳动中解放出来。c#的 RAD 功能主要表现在例如垃圾收集、指代 等众多特性上。垃圾收集机制将减轻开发人员对内存的管理负担,而指代功能更是 可以让开发者不经过内部类就调用函数。利用 c#的这些功能,可以使开发者通过较 少的代码来实现更强大的应用程序,并且能够更好地避免错误发生,从而缩短了应 用系统的开发周期。 8. 语言的自由性 用 C#编写的程序能最大程度地和任何支持.NET 的语言互相交换信息。能够继 *学院 信息工程系毕业设计(论文) 第 3 页 共 21 页 承和使用任何语言所编写的程序可以称得上是知识的继承,这样做的好处是节省了 大量的工作,你不必把 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#还提供了一些新功能取代了一些原来的 ANSI C 预处理程序的功能,提高了 语言的类型安全等安全性 1.3 .NET 开发平台 .NET 是一个用于建立应用程序的平台,它在内部封装了大量的功能强大的应用 程序接口函数(API) ,利用这些函数可以开发各类 Windows 应用软件。.NET 还是 一个开发平台,它向广大的程序员提供了功能强大的集成开发环境(IDE) Visual Studio .NET。在未来,.NET 还是一个运行、发布应用程序的平台,它可以将 应用程序作为一种服务,通过 Internet 提供给分布在世界各个角落的网络用户。 .NET 平台对早期的开发平台作了重大改进。.NET 提供了一种新的软件开发模 型,它允许用不同程序设计语言创建的应用程序能相互通信。这个平台也允许开发 *学院 信息工程系毕业设计(论文) 第 4 页 共 21 页 者创建基于 Web 的应用程序,这些应用程序能够发布到多种不同的设备(甚至是无 线电话)和台式机上。 Microsoft 的.NET 计划为利用 Internet 和 Web 进行软件的开发、设计和使用开 辟了广阔的新前景。.NET 策略的一个主要方面是它与具体的语言或平台无关。它不 需求程序员使用惟一的一种程序设计语言。程序员可以将多种与.NET 兼容的语言 (图 1-1)结合起来开发.NET 应用程序。多个程序员可以共同参与同一个软件项目, 每个人可以使用自己最精通的.NET 语言(如 Visual C+ .NET、C#、Visual Basic和 其他许多语言)来编写代码。 *学院 信息工程系毕业设计(论文) 第 5 页 共 16 页 第二章 问题的定义及可行性研究 2.1 问题的定义 开发的图片浏览器要具备良好的人机交互界面、对图片实现分目录管理用户可 以自行创建并删除存放图片的目录、对目录下的图片以缩略图的方式进行浏览、以 实际大小或适合窗体大小浏览、对同目录下的图片以自动播放形式进行浏览并可以 调整播放时间。 图片浏览器难点在于缩略图的显示,如果一个目录中有很多图片,而每张图片 的尺寸都比较大,把每张图片都缩小并显示出来需要花费很长的时间,这样会导致 应用程序的假死现象(在没有完成某项工作之前,应用程序无法进行其他操作) 。 2.2 可行性研究 处理这个问题可以采取多线程的方法,把显示缩略图的过程放在一个线程内, 这样在显示缩略图的过程中可以进行其他操作。另外一种解决方法是给每张图片生 成一张缩略图,并存放于数据库中,在浏览缩略图时,直接从数据库中读取缩略图 并显示。由于缩略图非常小,并且是未经压缩的格式,读取速度非常快,这样就能 以很快的速度显示完所有图片的缩略图。 本次设计另辟蹊径,以达到类似效果。在导入图片的同时,为图片生成 100*100 像素的 bmp 格式的缩略图(如果原图的长和宽都小于 100 像素,则按原图 尺寸生成缩略图) ,把原图和缩略图分别存放于两个目录内,并一一对应。通过原图 的文件名可以找到相对应的缩略图,如果缩略图不存在,则即时生成相应的缩略图。 实践证明这样做的效果令人满意,能比较顺畅的现实多张图片的缩略图。 *学院 信息工程系毕业设计(论文) 第 6 页 共 21 页 第三章 需求分析 3.1 需求分析阶段的任务 1.分析该设计要实现哪些功能 (1)可以对目录下的图片以缩略的方式进行浏览,并在浏览过程中可以删除一 张或多张图片。 (2)可以以实际大小或适合窗体尺寸的方式对单张图片进行浏览,并可以切换 到同目录下的上一张图片或下一张图片浏览。也可以对同目录下的图片以自动播放 的形式进行浏览,并可以调整自动播放的时间间隔。 (3)可以在浏览某张图片时将其删除。 (4)可以以全屏幕的方式浏览图片。 2.分析该设计功能实现的步骤及过程 (1)主窗体,可以用于浏览和查看图片。 (2)目录窗体,用于创建图片的管理目录。 (3)导入图片窗体,用于向目录中导入图片。 3.2 系统功能的详细分析 具有良好的人机交互界面,有一定的计算机操作经验的用户可以不经任何培训 就可以直接使用该软件。 对图片实现分目录管理,用户可以自行创建并删除存放图片的目录,并可以方 便地将各种图片存放于相应的目录之中。 可以对目录下的图片以缩略图的方式进行浏览,以方便用户从众多图片中查找 出自己想要的图片,并在浏览过程中可以删除一张或多张图片。 可以以实现大小或适合窗体尺寸的方式对单张图片进行浏览,并可以切换到同 目录下的上一张图片或下一张图片进行浏览。也可以对同目录下的图片以自动播放 的形式进行浏览,并可以调整播放的时间间隔。 可以为创建的目录导入或删除图片。 可以手动的进行图片的浏览。 该图片浏览器应该具有新增目录,删除目录,导入图像,删除图像,退出等功 能,还有的功能可以在设计中不断完善。 *学院 信息工程系毕业设计(论文) 第 7 页 共 21 页 第四章 总体设计 4.1 总体设计阶段的任务 1. 界面设计:程序包括三个窗体。界面设计:程序包括三个窗体。 (1)MainForm 窗体:程序的主窗体,可以用于浏览和查看图片,并对图片进行管 理。如图 41 图 41 。 (2)FrmCreateFolder 窗体:创建目录窗体,用于创建图片的管理目录。如图 42 图 42 (3)FrmLoadPic 窗体:导入图片窗体,用于向目录中导入图片。如图 43 *学院 信息工程系毕业设计(论文) 第 8 页 共 21 页 图 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.图像:删除一张在已经创建的目录中的图片。 5.和后退按钮:手动控制图片的前后浏览。 *学院 信息工程系毕业设计(论文) 第 9 页 共 21 页 第五章 详细设计 5.1 系统功能的详细设计与实现 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)在窗体上放置 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。至此, 主窗体界面制作完毕。如图 51 所示 *学院 信息工程系毕业设计(论文) 第 10 页 共 21 页 5.1.2 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 个 CheckedListBox 控件,命名为 chklsPic。HorizontalScrollbar 属性设置为 true。 (4)在窗体上放置 1 个 TextBox 控件,命名为 txtPicName。 (5)在窗体上放置 4 个 Button 控件。 (6)在窗体上放置 1 个 OpenFileDialog 控件,命名为 openFileDialogSelPic,并 把它的 Multiselect 属性设置为 true。 *学院 信息工程系毕业设计(论文) 第 11 页 共 21 页 代码编写 MainForm.cs:主窗体 MainForm 的代码文件。 FrmCreateFolder.cs:创建目录窗体 FrmCreateFolder 的代码文件。 FrmLoadPic.cs:导入图片窗体 FrmLoadPic 的代码文件。 PicInfo.cs:PicInfo 类代码文件。 Folder.cs:Folder 类代码文件。 5.1.4 PicInfo.cs 窗体窗体 在解决方案资源管理器中的图片管理器项目上右击鼠标,在弹出菜单中选择添 加新建项。在添加新项窗口中选择类,在名称编辑框内输入“PicInfo.cs” 。最后单击 添加按钮添加一个新的类。 PicInfo 是一个自定义的类,什么是类?可以这样去理解:类可以存放某些信息, 并能实现特定功能。类里有属性和方法,就好比银行的提款机,通过使用提款机, 可以查询账户里还有还剩多少钱,也可以通过提款机取钱。在编程中定义类是为了 把一些相关的功能包装起来,放在一起,以方便在程序中使用。 Private string _fullName; Private string _nameNoExtension; 这两行代码声明了两个私有成员变量,这两个成员变量供类内部使用,类的外 部不可以直接访问它们,但可以通过属性来访问和设置它们的值。 Public override string ToString () Return _fullName; 这几行代码,重载了 ToString()方法,由于 PicInfo 类的作用是把类实例作为项存放于复选列表 框内。而每个项显示的文字正是通过访问 ToString()方法而获得,重载这个方法,正是为了在复 选列表框内显示指定的文字。 5.1.5 Folder.cs 窗体窗体 在(解决方案资源管理器)中的(图片管理器)项目上右击鼠标,在弹出菜单 中选择(添加) (新建项) 。在(添加新项)窗口中选择(类) ,在(名称)编辑框内 输入“Folder.cs” 。最后单击(添加)按钮添加一个新的类。 在第一次浏览一个目录时,需要从硬盘读取这个目录下的所有缩略图并显示, 此时所有缩略图被载入内存。如果切换到其他目录时就从内存中释放这些数据,再 次浏览这个目录时就导致程序重新从硬盘读取数据,这样会使得缩略图的显示速度 *学院 信息工程系毕业设计(论文) 第 12 页 共 21 页 变慢(内存的速度远胜于硬盘)。本案例中,只要浏览了某个目录,就让这个目录下 的所有缩略图常驻于内存,以供下次浏览时调用,直到应用程序关闭为止。这样做 可能导致程序的内存使用加大,但在一定程度上弥补了没有使用多线程技术的遗憾。 Folder 类正是用于实现这个功能的,它封装了缩略图的生成、读取、删除、计算边 界的功能。 Foreach (string sourceFile in Directory.GetFiles(_sourcePath) 这一行的 Directory.GetFiles(_sourcePath)方法访问指定文件夹(_sourcePath)中的 所有文件,并将它们的文件名存放于字符串数组中返回。 Public override string ToString() Return _name; 这几行代码重载了 ToString()方法,这样做是为了在 ListBox 内显示指定的字 符串,即目录名称。 5.1.6 FrmCreateFolder.cs 窗体窗体 打开 FrmCreateFolder 的设计窗体,分别双击(确定)和(取消)按钮,为它们 生成按钮的单机事件。 FrmCreateFolder 窗体的作用是创建一个新的图片管理目录,所有图片都存放于 可执行文件所在目录下的(图片目录)文件夹之下,新建一个管理目录会在(图片 目录)文件夹下创建一个以管理目录命名的文件夹。由于 FrmCreateFolder 窗体需要 操作主窗体的列表框控件,这就会涉及在不同窗体间传递参数的问题。在不同窗体 间传递参数有很多种方法,本案例只使用其中的一种,就是在窗体构造方法中传递 参数,这就需要重载窗体的构造方法。 Public FrmCreateFolder() InitializeComponent(); 这几行代码是 Visual Studio 2005 自动问窗体生成的构造方法。 Public FrmCreateFolder(ListBox lst) InitializeComponent(); lstFolder=lst; *学院 信息工程系毕业设计(论文) 第 13 页 共 21 页 这几行代码则是手动编写的重载的构造方法。它使用了一个 ListBox 类型的参 数,由于 ListBox 是一个引用的类型,这样当主窗体把一个 ListBox 类型当做参数传 递给 FrmCreateFolder 窗体的构造方法后,就可以在 FrmCreateFolder 窗体中控制这 个 ListBox。 Private ListBox lstFolder; 这行代码声明了一个 ListBox 类型的成员变量,用于存放从构造方法传递进来 的 ListBox 引用,以方便在整个窗体范围内进行调用。 String path=Application.StartupPath+图片目录 这行代码中的 Application.StartupPath 属性返回当前程序可执行文件所在路径。 5.1.7 FrmLoadPic.cs 窗体窗体 打开 FrmLoadPic 窗口,双击窗口空白处,为窗口生成一个 load 事件, FrmLoadPic 窗体用于将图片导入程序目录中,它需要控制主窗体中的列表框和状态 栏两个控件,所以在这几行代码的重载构造方法中使用了两个参数,以传递对这两 个控件的引用。 OpenFileDialogSelPic.Filter=“图像文件(*.BMP;*.JPG;*.GIF;“+”*.jpeg;*.ico) *.BMP;*.JPG;*.GIF;*.jpeg;*.ico”; 这行代码设置打开文件对话框的文件筛选器,这样在使用打开文件对话框时, 就只能选择指定的文件类型。 双击(浏览)按钮,生成一个按钮的单击事件。为复选列表框 chklsPics 生成一 个 SelectedIndexChange 事件。双击(修改)按钮,生成一个按钮的单击事件。 PicInfo picInfo=new PicInfo(s); 这行代码使用了前面所编写的 PicInfo 类,编写它的主要原因是如果给图像改名, 需要有地方存放修改后的名字。 chklsPics.Items.Add(picInfo,true); 这行代码直接将上一行代码所创建的 PicInfo 对象作为元素添加进复选列表框内。 复选列表框的项所显示的文字将是 PicInfo 对象的 ToString()方法所返回的字符串。 分别双击(确定)和(取消)按钮,为它们生成按钮单击事件, 载入图像时,需要考虑一下几个因素。 1.由于可以从多个路径选择图片,有可能出现图片文件名相同但路径不同的情 况,把它复制到同一文件夹时会由于文件名相同而导致出错。 2.在把图片复制到某文件夹时,文件夹有可能本身已有同名的文件,这样同样 *学院 信息工程系毕业设计(论文) 第 14 页 共 21 页 会导致出错。常见的解决方案如看图软件 ACDSee,在复制过程中如出现同名文件, 将弹出提示窗口,供用户进行改名或放弃复制操作。本案例使用了不同的方法,出 现同名文件时并不提示用户,而直接给图片改名。 给图片重命名的算法如下所述给图片重命名的算法如下所述: 1.给取目的文件夹(所有图片将被复制到这个文件夹)下的所有已存在的图片名称, 并放入 Arraylist 内。 2.将 ArrayList 内的图片名称从小到大进行排序。 3.在图片被复制到目的文件夹之前,首先跟 ArrayList 内的图片名称一一对比, 如果发现同名文件,则在文件名后加“-”号和数字“1” 。把更改后的名称继续跟 ArrayList 内的下一个图片名称进行对比,如果重名,则把数字“1”变为“2” 。直 到在 ArrayList 内找到比它大的名称,则把它插入到这个位置。 4.将图片复制到目的文件夹,对下一张图片重复第步操作,直到所有图片被复制到目的 文件夹为止。 5.1.8 MainForm.cs 窗体窗体 双击(新增目录)工具按钮,生成按钮的单击事件,这里使用模式窗体的方式 打开前面所创建的 FrmCreateFolder 窗体。 双击(删除目录)工具按钮,生成按钮的单击事件 双击(导入图像)工具按钮,生成按钮的单击事件 选中 lvView 控件,在事件窗口中双击 DrawItem 事件,生成一个绘制项的事件, 当 ListView 的 OwnerDraw 属性为 true 时,可以通过 DrawItem 事件手动绘制 ListView 中的每一个项。在 DrawItem 事件方法中,参数 e 的 Bounds 属性返回这个 项所占用的矩形,可以在这个矩形里绘制图形和文字。 选中列表框 lstFolder,为它生成一个 SelectedIndexChanged 事件 为(删除图像)和(退出)工具按钮分别生成单击(Click)事件 选中 lvView 控件,在事件窗口中双击 DoubleClick 事件,生成一个事件 分别双击窗体下方工具栏的(返回目录) 、 (上一幅图像)(tsbtnPeriod)、 (下一幅图 像)(tsBtnNext)工具按钮,为它们生成相应的单击事件 显示图像有两种模式显示图像有两种模式: 1 .按原图尺寸显示:当图像尺寸大于装载它的容器(panell)时,则显示图像的中 间部分。 2 .显示全图:当图像尺寸大于装载它的容器时,则按比例对原图进行缩放,以 适合容器大小。当图像尺寸小于装载它的容器时,则在容器中央显示原图。 *学院 信息工程系毕业设计(论文) 第 15 页 共 21 页 自定义方法 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 关键技术介绍 图片浏览器难点在于缩略图的显示,如果一个目录中有很多图片,而每张图片 的尺寸都比较大,把每张图片都缩小并显示出来需要花费很长的时间,这样会导致 应用程序的假死现象(在没有完成某项工作之前,应用程序无法进行其他操作) 。处 *学院 信息工程系毕业设计(论文) 第 16 页 共 21 页 理这个问题可以采取多线程的方法,把显示缩略图的过程放在一个线程内,这样在 显示缩略图的过程中可以进行其他操作。另外一种解决方法是给每张图片生成一张 缩略图,并存放于数据库中,在浏览缩略图时,直接从数据库中读取缩略图并显示。 由于缩略图非常小,并且是未经压缩的格式,读取速度非常快,这样就能以很快的 速度显示完所有图片的缩略图。 本次设计另辟蹊径,以达到类似效果。在导入图片的同时,为图片生成 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省襄阳市谷城县襄阳东津新区汉水小学2024-2025学年六年级下学期期末数学试题(无答案)
- 河南省开封市等2地2025-2026学年高二上学期开学考试地理试卷(含答案)
- 福建省福州市马尾区2024-2025学年八年级上学期期中语文试题(含答案)
- 智慧供应链题库及答案
- 2025年商超货架合作协议书
- 老师考试难题及答案
- 扶贫脱贫政策知识培训会课件
- 打击乐托班课件
- 戎戎变法课件
- 2025年阳泉化学中考试卷及答案
- GB/T 45760-2025精细陶瓷粉体堆积密度测定松装密度
- 职业技能鉴定机构备案表(空表)
- 大学生职业生涯规划课教案
- 肝血管瘤护理查房
- 补肾养血膏方联合PRP治疗肝肾亏虚型膝骨关节炎的临床疗效观察
- 医疗机构依法执业自查
- 专项复习:相似三角形折叠问题(分层练习)(综合练)
- 世纪佳缘会员管理制度
- 角色设计课程说课模板
- 邻里纠纷及其合法合理处理课件
- 武汉工业地产市场调查分析报告30
评论
0/150
提交评论