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

Slides:



Advertisements
Similar presentations
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
Advertisements

UI(用户界面)集训班 Illustrator 高级班.
PRESENTED BY OfficePLUS
在PHP和MYSQL中实现完美的中文显示
Hadoop I/O By ShiChaojie.
Chinese Virtual Observatory
R in Enterprise Environment 企业环境中的R
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
存储系统.
走进编程 程序的顺序结构(二).
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
数 控 技 术 华中科技大学机械科学与工程学院.
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
DM8148与DM8127 ISS框架讲解 广州创龙电子科技有限公司
AM5728 视频输入端口VIP软件框架 广州创龙电子科技有限公司
逆向工程-汇编语言
厂商—型号 海尔-PAD002 外观设计 建议零售价格:2999元 上市时间:2011年3月 目标人群:有移动互联需求的商务人士
Windows 7 的系统设置.
多媒体技术 中南大学信息科学与工程学院 黄东军.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
三:基于Eclipse的集成开发环境搭建与使用
程序设计工具实习 Software Program Tool
图片与视频数字化. 图片与视频数字化 图片分类 根据图片的构成元素来分 位图: 由像素组成,计算机按顺序存储每个像素点 的颜色信息的保存方式获得的图片。 位图放大后会模糊失真,存储空间相对较大。 矢量图: 由图元组成,通过数学公式计算获得的图片。 放大后不会失真,占用空间小。
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
产品推广 PRODUCT PROMOTION PRESENTED BY OfficePLUS.
计算机及办公软件应用 ©2013 苏州工业园区职业技术学院
直接扫描保存成TIF格式, 其他图片格式用Windows XP自带的 Windows图片与传真查看器打开
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
PRESENTED BY OfficePLUS
VisComposer 2019/4/17.
姚金宇 MIT SCHEME 使用说明 姚金宇
电子商务网站开发 第八讲:图像的概念与制作 上海财经大学信息管理与工程学院.
实验七 安全FTP服务器实验 2019/4/28.
海南医学院附属医院 The Affiliated Hospital of Hainan Medical College 科研信息管理平台上线
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
CLICK HERE TO ADD YOUR TITLE
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
iSIGHT 基本培训 使用 Excel的栅栏问题
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
第六章 素材的加工与处理 第13讲 用GoldWave进行音频的截取、合并、淡入淡出操作
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
VRP教程 2011.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
第9章 多媒体技术 掌握 Windows 画图工具的基本操作; 掌握 Windows 音频工具进行音频播放;
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
图片与视频数字化. 图片与视频数字化 图片分类 根据图片的构成元素来分 位图: 由像素组成,计算机按顺序存储每个像素点 的颜色信息的保存方式获得的图片。 位图放大后会模糊失真,存储空间相对较大。 矢量图: 由图元组成,通过数学公式计算获得的图片。 放大后不会失真,占用空间小。
回归分析实验课程 (实验三) 多项式回归和定性变量的处理.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
项目进度甘特图 标题 双击图标可以对图表图形及文字的颜色、边框等进行选择。点击图表然后右键选 择“编辑数据”即自动跳转到Excel中对图表的数据信息进行编辑。 2015/X/X 2015/X/X 2015/X/X 2015/X/X 2015/X/X 2015/X/X 2015/X/X 2015/X/X.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第十七讲 密码执行(1).
第十二讲 密码执行(上).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
LOGO HERE 单击此处添加 您的标题标题标题 PRESENTED BY JANE DOE
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
Presentation transcript:

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

概述 1、选题的目的和意义 2、本文所做的主要工作 3、软件开发平台及编程模式 4、图像格式分析 5、软件设计与实现 6、本设计关键技术及难点 7、软件测试与改进思想

选题的目的和意义 图像是现代信息社会中最基本的信息,它使信息变得栩栩如生,更加符合人们的日常交流习惯,因此它成为人类获取和交换信息的主要来源。如今数字图像处理的应用日益广泛,逐步成为信息科学、工程学、医学等许多学科的重要基础,同时作为一种实用技术广泛应用于军事、气象、交通、探矿、水利、农业甚至娱乐等领域。尤其是价格低廉的高性能计算机和诸如数码相机及扫描仪这样的图像采集设备出现后,数字图像处理技术被大量的应用到影视、游戏等公众及娱乐领域,与人类的生活密切相关。 处理信息量巨大,要求处理速度极高,实时产生高质量的图形图像是我们不断的追求目标。因此本选题具有较好好的实用价值和意义。

本文所做的主要工作 1、详细分析了当今流行的各种图像格式的编码与解码方法。 2、利用Microsoft Visual C++ 6.0作为开发工具,使用MFC Application Framework作为软件的基本架构,设计并开发了一个图片浏览器。 3、实现了对BMP、PCX、TGA、JPEG、GIF图像格式的图片进行读、写、显示等基本功能。 4、利用图像处理中一些变换算法,实现了图像的放大、缩小、旋转及百叶窗、马赛克等显示特效。 5、实现了各种图片格式的转换功能。 6、对所开发的软件进行了测试并提出了改进意见。

软件开发平台及编程模式 本软件采用C++来进行图像编程的主要原因是: 1、C++代码被编译成汇编语言,可以直接在处理器上运行,效率很高。 而在以C++为核心语言的可视化编程工具中,Microsoft Visual C++ 6.0以其自身许多优异的特性而获得了最为广泛的应用。鉴于以上原因,本设计使用Microsoft Visual C++ 6.0作为软件的开发平台。

图像格式分析 用数字来表示图像有不同的格式。因此一个通用的图像处理软件应该能支持多种不同的图像格式。本设计所实现的图片浏览软件支持以下几种在图像处理领域及实际应用中使用的图像格式:BMP、PCX、TGA、JPEG、GIF。 由于图像质量的提高是建立在图像数据的增大的基础上的,而图像数据量的增大将不可避免地减低图像处理的速度,并且给存储和传递带来困难。因此,如何有效地控制数字图像的存储量已成为数字图像处理的一项重要课题。数据压缩技术是控制数据量的基本技术。各种图像格式都可以采用一种,甚至多种不同的数据压缩算法来压缩数据量,因此图像格式和压缩算法是密切相关的。而开发图像处理软件也应首先了解图像的编码及解码方法。

BMP图像 1、位图文件头结构 BITMAPFILEHEADER 2、位图信息头结构 BITMAPINFOHEADER BMP图像即我们通常所说的“位图”,是Windows系统中最为常见的图像格式。经常存储为我们常见的BMP为后缀的位图文件。BMP位图文件包括4部分: 1、位图文件头结构 BITMAPFILEHEADER 2、位图信息头结构 BITMAPINFOHEADER 3、位图颜色表 RGBQUAD 4、位图像素数据

PCX图像 PCX是Zsoft公司研制的一种常用图像格式,也是在PC机上使用时间最久的一种位图格式。PCX的最新版本支持24位色彩(256色的调色板或全24位RGB),图像的大小可达64k×64k个像素。PCX采用游程长度编码来压缩数据,但是有些情况下压缩效率不高,尤其是对于扫描图像或视频图像。

TGA图像 0 — 文件中没有图像数据 1 — 未压缩的,颜色表图像 2 — 未压缩的,RGB图像 3 — 未压缩的,黑白图像 TGA包含了多种变体,TGA文件的第三字节用来区别不是的TGA文件。该字节的值(二进制整数)及对应的文件类型如下: 0 — 文件中没有图像数据 1 — 未压缩的,颜色表图像 2 — 未压缩的,RGB图像 3 — 未压缩的,黑白图像 9 — 游程长度(Runlength)编码的颜色表图像 10 — 游程长度(Runlength)编码的RGB图像 11 — 压缩的,黑白图像 32 — 使用Huffman,Delta和Runlength编码的颜色表图像 33 — 使用Huffman,Delta和Runlength编码的颜色映射图像, 四叉树类型处理

JPEG图像 JPEG的全称是Joint Photographic Experts Group,是由专家组制订的用于连续色调(包括灰度和彩色)静止图像的压缩编码标准。JPEG标准的压缩编码算法是“多灰度静止图像的数字压缩编码”。 JPEG标准包括3部分,即编码器、译码器和交换格式。编码器将原始图像的编码压缩成压缩数据,译码器将压缩的图像数据还原成原始图像数据。图像压缩数据以一定的交换格式存储,格式中包括编码过程中采用的码表等。

GIF图像 GIF全称为Graphics Interchange Format,文件由CompuServe公司开发并持有该图形文件格式的版权。GIF图像是基于颜色表存储的,即图像中每一点的存储数据是该点的颜色对应于颜色列表(即调色板)的索引值。GIF图像最多只支持8位存储位,即最多支持256色图像。GIF文件内部分成许多存储块,用来存储多幅图像或者是决定图像表现行为的控制块,可用于实现动画和交互式应用。GIF文件使用LZW压缩算法压缩图像。

软件设计与实现 需求分析 总体设计 软件界面设计 详细设计与实现

功能需求 : 需求分析 1、可以打开BMP、PCX、TGA、JPEG及GIF图像。 2、打开的图像,用户均能另存为任意一种格式,以实现图像格式的转换。 3、实现图片的放大、缩小,还原。 4、可以对图像进行90度、180度旋转。 5、可以直接调用Windows画图程序打开图片并进行编辑。 6、软件提供“上一张”、“下一张”功能。 7、可以进行全屏幕浏览,并提供“幻灯片播放”的功能,自动显示当前文件夹下的所有图像。

需求分析 8、按F11键可以切换全屏、非全屏浏览,同时,在进行全屏幕浏览时按ESC键也可以退出全屏状态。 9、在载入图片时,提供各种显示效果,用户也可以选择让系统随机选择效果。 10、在查看图片时,用户也可以随时显示“水平百叶窗”、“垂直百叶窗”、“马赛克”、“向上扫描”、“向下扫描”效果。 11、在查看图片时,可以选择从当前目录删除该图片,并将其放入系统回收站中。 12、在窗口的用户区右键单击鼠标,则弹出快捷菜单,显示常用操作命令。

性能需求 需求分析 1、硬件平台要求: 2、软件环境要求: 由于本软件为单机软件,不需进行大量的数据读写和数据交换,故对系统硬件配置的要求并不高,只要能够平稳运行Windows操作系统的硬件平台,都能够使用本软件。 2、软件环境要求: 本软件运行平台为Microsoft Windows 98/Me/NT/2000/XP/2003。

总体设计 以MVC(Model-View-Controller)应用程序结构划分的模块如图所示。 Model View Picture Viewer Model View Controller 图像解码、编码模块 图像显示模块 图像变换模块 PCX模块 GIF模块 OnDraw () 全屏浏览模块 状态栏信息显示 图像缩放模块 图像旋转模块 显示特效模块 TGA模块 BMP模块 JPEG模块

软件界面设计 根据软件的需求分析及图片浏览软件的特点,本设计中软件采用单文档界面(SDI),包括标准菜单、工具栏和状态栏。工具栏上为常用菜单命令按钮,如“打开”、“保存”、“上一张”、“下一张”、“放大”、“缩小”、“旋转”等。另外,在全屏显示时提供浮动工具栏,并且在用户区右击鼠标可以弹出快捷菜单。

软件界面设计 软件的整体界面 软件在全屏状态下的浮动工具条及右键菜单 软件菜单及工具栏

详细设计与实现 软件核心数据结构LanImage类设计 分别设计了BMP、 PCX、 TGA、 JPEG、GIF解码、编码模块 图像显示模块 全屏浏览模块 图像缩放模块 图像旋转模块 图像特效显示

详细设计与实现 软件核心数据结构LanImage类设计 图像显示模块 全屏浏览模块 图像缩放模块 图像旋转模块 图像特效显示

详细设计与实现 前面已分析过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、内存分配和释放是否正确,有无内存泄漏。

软件测试与改进思想 本文以实现了需求分析中要求的全部功能,并且按照预期的目标生成了一个完整实用的图像浏览软件。但是由于时间有限,本软件的不足也在所难免,主要有以下几方面需要改进: (1)GIF图像不支持动画。 (2)在保存为PCX图像时只能以8位即256色深度保存。 (3)浏览当前目录中所有图像的功能目前使用静态数组保存文件名,这样如果当前目录中支持的图像文件数超过了数组上限,那么多出的图片将不能使用“上一张”、“下一张”的功能来浏览。

感谢各位老师!