基于MFC的图片浏览器的设计与实现.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于MFC的图片浏览器的设计与实现

详细设计与实现 前面已分析过BMP 、 PCX、 TGA、 JPEG、GIF图像的存储格式,在本设计中,针对不同的格式设计了不同的解码与编码函数。 格式名 解码函数 编码函数 BMP ReadBmp() SaveBmp() PCX ReadPcx() SavePcx() TGA ReadTga() SaveTga() 由于JPEG和GIF的编码较为复杂,并且时间有限,故在本设计的实现过程中,JPEG和GIF的解码、编码模块调用了第三方的读写库。 关键技术及难点 资源的分配和释放 使用JPEG和GIF读写库时缓冲区格式的转换 实现旋转时对内存的位操作 直接对内存中图像数据进行操作实现的特效 右键菜单的实现 浏览功能的实现 关键技术及难点 资源的分配和释放 由于C++中内存资源的分配和释放均由程序员控制,而本程序多处用到了在内存中开辟缓冲区,因此在本设计的实现过程中,对内存的管理便尤为重要。 例如在打开一张新图片时,就要对上一张图片的缓冲区进行释放,否则会造成内存泄漏。但是由于JPEG和GIF调用了第三方的读写库,其使用的内存缓冲区格式与LanImage类中使用的不同,因此,在进行缓冲区的释放时,首先要判断上一张图片是何种格式,即是否使用了第三方的读写库,如果使用了,则应采取不同的资源释放方式。 本文是在LanImage类中加入BOOL型变量m_bReadWithLibSupport来判断是否使用了JPEG和GIF读写库的。 关键技术及难点 使用JPEG和GIF读写库时缓冲区格式的转换 在使用JPEG和GIF读写库时,其解码后的数据缓冲区格式是不同的,而图像的显示都是通过LanImage::Draw()函数实现的。Draw()函数只能读取LanImage类中m_pImage指向的缓冲区。因此,在图像打开时需要进行缓冲区的转换。另外,如果打开的是BMP、TGA、PCX格式的图像,而用户选择保存为JPEG或GIF图像,那么又要将m_pImage指向的缓冲区转换为JPEG和GIF读写库所使用的缓冲区。 关键技术及难点 实现旋转时对内存的位操作 在对单色和4位色图像进行旋转时,需要进行位操作。以单色位图为例,一个字节包含8个像素,那么在旋转90度时,一个字节中的不同位,会变换到不同的扫描行,也就是说要将字节中的位一一取出,计算其位置,并重新放到新字节的合适的位中。 关键技术及难点 直接对内存中图像数据进行操作实现的特效 本文在实现特效时采用了两种完全不同方法。 一种是利用改变Draw()函数参数实现的特效。 另一种即是先在内存中对图像数据变换生成特效过程中的每一帧图像,然后调用Draw()函数直接将其显示出来。 以马赛克效果为例,如果使用Draw()函数实现,由随机函数确定显示哪一块后,则直接将该块显示出来。而使用内存特效,在消隐的过程中,在此时应该将原始图像数据中的该块对应的数据置为白色,而以前已置为白色的数据块仍保持白色不变;在恢复过程中则正相反,是由原始图像数据代替白色数据。 关键技术及难点 右键菜单的实现 利用MFC函数TrackPopupMenu()实现右键菜单。但是,右键菜单的实现关键是如何更新UI界面的问题。例如,对于“缩小”命令,当连续进行缩小,显示比例减为负值时,应该禁用“缩小”命令,此时,右键菜单中该命令项应该变为灰色。对于普通菜单和工具栏,可以接收UPDATE_COMMAND_UI消息,并在该消息的处理函数中改变命令项的状态。而右键菜单是无法接收该消息的,故必须使用其他的方法。本文采用CMenu类中的EnableMenuItem()函数来实现。 关键技术及难点 浏览功能的实现 在打开一幅图片后,可以使用“上一张”、“下一张”命令或按“Page Up”、“Page Down”键浏览当前目录中可支持的图像。 实现该功能应注意的问题是,在打开一幅图片并读取当前目录中可支图像列表后,如果用户对该目录中的图片进行了删除或向该目录中加入了新的图片,那么在使用“上一张”、“下一张”命令时,应该重新读取文件表。 软件测试与改进思想 1、5种图像格式的解码和显示是否正常。 2、特效是否适合所有大小和颜色深度的图像,图像边界处是否正确处理。 3、几种格式的互相转换,尤其是BMP、TGA、PCX和JPEG或GIF之间的转换。 4、内存分配和释放是否正确,有无内存泄漏。 软件测试与改进思想 本文以实现了需求分析中要求的全部功能,并且按照预期的目标

文档评论(0)

ranfand + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档