VC Bitmap分析和总结分析和总结.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
上一讲我们主要介绍了图像的格式,其中重点说明了 BMP 文件的存储格式,同时对 JEPG 和GIF 等常用格式作了简单的介绍。本节主要讲述如何操作 BMP 文件,如对其读、写和显示等。 在实现数字图象处理的过程中,主要是通过对图像中的每一个像素点运用各种图像处理算法来达到预期的效果,所以进行图像处理的第一步,也是我们最关心的问题,是如何得到图像中每一个像素点的亮度值;为了观察和验证处理的图像效果,另一个需要解决的问题是如何将处理前后的图像正确的显示出来。我们这章内容就是解决这些问题。 随着科技的发展,图像处理技术已经渗透到人类生活的各个领域并得到越来越多的应用, 但是突出的一个矛盾是图像的格式也是越来越多,目前图像处理所涉及的主要的图像格式就 有很多种,如 TIF、JEMP、BMP 等等,一般情况下,为了处理简单方便,进行数字图像处理所采用的都是 BMP 格式的图像文件(有时也称为 DIB 格式的图像文件),并且这种格式的文件是没有压缩的。我们通过操作这种格式的文件,可以获取正确显示图像所需的调色板信息, 图像的尺寸信息,图像中各个像素点的亮度信息等等,有了这些数据,开发人员就可以对图 像施加各种处理算法,进行相应的处理。如果特殊情况下需要处理其它某种格式的图像,如 GIF、JEMP 等格式的图象文件,可以首先将该格式转换为 BMP 格式,然后再进行相应的处理。这一点需要读者清楚。 BMP 格式的图像文件又可以分为许多种类,如真彩色位图、256 色位图,采用RLE(游程编码)压缩格式的 BMP 位图等等。由于在实际的工程应用和图像算法效果验证中经常要处理的是 256 级并且是没有压缩的 BMP 灰度图像,例如通过黑白采集卡采集得到的图像就是这种格式,所以我们在整个讲座中范例所处理的文件格式都是 BMP 灰度图像。如果读者对这种 格式的位图能够作到熟练的操作,那么对于其余形式的 BMP 位图的操作也不会很困难。 BMP 灰度图像作为 Windows 环境下主要的图像格式之一,以其格式简单,适应性强而倍受欢迎。正如我们在上一讲中介绍过的那样,这种文件格式就是每一个像素用 8bit 表示, 显示出来的图像是黑白效果,最黑的像素的灰度(也叫作亮度)值为“0”,最白的像素的 灰度值为“255”,整个图像各个像素的灰度值随机的分布在 “0”到“255”的区间中,越黑的像素,其灰度值越接近于“0”,越白(既越亮)的像素,其灰度值越接近于“255”; 与此对应的是在该文件类型中的颜色表项的各个 RGB 分量值是相等的,并且颜色表项的数目是 256 个。 在进行图像处理时,操作图像中的像素值就要得到图像阵列;经过处理后的图像的像素 值需要存储起来;显示图像时要正确实现调色板、得到位图的尺寸信息等。结合这些问题, 下面我们针对性的给出了操作灰度 BMP 图像时的部分函数实现代码及注释。 一、 BMP 位图操作 首先我们回顾一下上讲中的重要信息:BMP 位图包括位图文件头结构 BITMAPFILEHEADER、位图信息头结构 BITMAPINFOHEADER、位图颜色表 RGBQUAD 和位图像素数据四部分。处理位图时要根据文件的这些结构得到位图文件大小、位图的宽、高、实现调色板、得到位图像素 值等等。这里要注意的一点是在 BMP 位图中,位图的每行像素值要填充到一个四字节边界, 即位图每行所占的存储长度为四字节的倍数,不足时将多余位用 0 填充。 有了上述知识,可以开始编写图像处理的程序了,关于在 VC 的开发平台上如何开发程 序的问题这里不再赘述,笔者假定读者都具有一定的 VC 开发经验。在开发该图像处理程序的过程中,笔者没有采用面向对象的方法,虽然面向对象的方法可以将数据封装起来,保护类中的数据不受外界的干扰,提高数据的安全性,但是这种安全性是以降低程序的执行效率为代价的,为此,我们充分利用了程序的文档视图结构,在程序中直接使用了一些 API 函数来操作图像。在微软的 MSDN 中有一个名为 Diblook 的例子,该例子演示了如何操作 Dib 位图,有兴趣的读者可以参考一下,相信一定会有所收获。 启动 Visual C++,生成一个名为 Dib 的多文档程序,将CDibView 类的基类设为 CscrollView 类,这样作的目的是为了在显示位图时支持滚动条,另外在处理图像应用程序的文档类(CDibDoc.h)中声明如下宏及公有变量: #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)//计算图像每行象素所占的字节数目; HANDLE m_hDIB;//存放位图数据的句柄; #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)//计算图像每

文档评论(0)

dqy118 + 关注
官方认证
内容提供者

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

认证主体上海海滋实业有限公司
IP属地湖北
统一社会信用代码/组织机构代码
91310115MA7DL1JF2N

1亿VIP精品文档

相关文档