程序设计实践BMP资料.docx

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告——第二次程序设计实践:DIB图像处理姓名:学院:信息与通信工程学院学号:班级:11111一、课题概述课题目标和主要内容打开BMP文件,并显示到屏幕上,BMP图像支持1、4、8、24bit非压缩图像。对BMP文件进行处理,如变为灰度图像、二值化、平滑、连通域分析等操作,包括:将原始图像转换为8bit灰度图像,并在界面中显示。将8bit灰度图像转换为8bit二值图像(图像中只有黑、白两种颜色),并在界面中显示。对二值图像进行平滑、连通域分析等操作,并在界面中显示。能将界面中的图像保存到新的BMP文件中。所有处理效果可以在界面中实时展示。本设计中除了显示图像、窗口设计功能采用Windows API来实现外,对BMP文件的其他操作全部单独设计相应的类完成。好处是即使不在Windows环境下,该类依然可以处理BMP文件。开发平台和环境:Win32应用程序,用Microsoft Visual Studio 2013开发环境。系统的主要功能:文件操作:打开新BMP文件保存当前BMP文件退出导航视窗:图像速览颜色通道框图切换图像处理:转8bit灰度图4邻域平滑8邻域平滑二值化图像黑色-4邻域连通域分析HSL色彩空间处理:建立HSL空间修改色相、饱和度、亮度。撤除HSL空间主要编程点:Win32程序消息循环处理;位图的识别、判断;位图数据的改写、输出;DIB与DDB的转换,内存DC的使用;小型内存管理分配;视窗切换、屏幕输出与刷新;数据结构:顺序表、链表;读取、保存DIB二进制流;色相、饱和度、亮度调整;直方图的扫描和输出。二、系统总体框架工程环境:操作系统:Windows 10开发环境:Visual Studio 2013 Ultimate项目类型:Win32程序主要程序流程数据与操作:总的来说,用户操作、图像数据结构、图像操作对象是相互独立、开放的三大模块。菜单用于输入输出原始数据流,或是操纵图像处理;数据结构方便统一管理所有DIB单元结构体间的关系链,可以直接存取这些单元数据;操作类对象首先要Link一个结构体以初始化常用数据,方便随后处理。数据结构、功能扩展:在满足原有图像处理的基础上增加新功能数据扩展:在基础结构中存放一个万能指针void*,要增加新的属性时,只需要在源文件中添加新的结构体,在主要函数中完成新结构体的创建和赋值,再令基础结构体中的扩展指针ext指向新结构体,就完成了属性添加,并且无需大幅度更动基础结构体内容,便完成了数据扩展。函数功能扩展:在满足“里氏代换”原则基础上,即基类出现的地方以子类替代仍然保证程序正常运作,通过原始基类继承出新的派生类,保留原始接口同时增加新的接口,实现功能扩展。三、系统详细设计图像处理DIBProcess模块:图像数据结构体BMFH图像数据结构体BMIH图像数据结构体RGBQUAD图像数据结构体DIBUnit矩阵模板类Matrix图像处理基类DIBProc图像处理派生扩展类DIBProcEx内存DC模块MemoryDC小型内存池管理类MemoryPool页结点结构体块结点结构体检验节点结构体内存管理类应用示意图主函数模块(主要是功能相关性模块)主要头文件主要全局量主要功能性函数声明菜单功能设计文件导航操作HSL空间操作四、关键算法分析算法1:int IsBmp(const DIBUnit);算法功能:根据读取的文件流二进制数据判断是否为能处理的位图。基本思想:根据BMP文件头的定义和特征信息判断位图是否正确算法逻辑:(这里判断5个关键点)BMFH结构的bfType应恒为定值0x4D42;BMIH结构的biSize应等于sizeof(BMIH),即程序只处理INFO信息头。BMIH结构的biCompression应为0,表示未压缩,程序不处理压缩图。BMFH结构的bfSize属性和bfOffBits属性的值应该和BMIH结构的biHeight值和biWidth值有等式关系,即:                bfSize – bfOffBits = biHeight * cxBytes;其中cxBytes为图的字节宽度。算法2:void operator(const DIBUnit);算法功能:读取一个DIB单元结构并解析获得相关数据基本思想:解析DIB结构中的BMFH,BMIH信息。数据运算完成后保存在类的私有成员里。算法逻辑:获取图像实际字节宽。根据BMP文件定义,每个扫描行的字节数必须为4的倍数,因此根据BMIH结构的biBitCount颜色位深属性和biWidth像素宽属性,即不足1字节的按1字节计(例如单色图和4bit图),总的字节数保证能被4整除。用switch语句判断有:获取像素数组的字节大小srcSize,有几种方法:srcSize = bmfh.bfSize - b

文档评论(0)

502992 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档