2012三章 VC++图像编程基础.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 VC++图像编程基础 一、与设备无关位图(DIB) 与设备无关位图(DIB)可以在不同的机器或系统中显示位图所固有的颜色。与DDB相比,DIB是一种外部的位图格式,经常存储以BMP为后缀的位图文件。 1.BMP文件组成 BMP文件由文件头、位图信息头、颜色信息表和图像数据四部分组成。 位图结构如下: 2.BMP文件头 P30 BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下: typedef struct tagBITMAPFILEHEADER { WORD bfType; //文件类型,必须为BMP,即0x4d42 DWORD bfSize; // 文件大小,包括这14个字节 WORD bfReserved1; // 保留字,必须为0 WORD bfFeserved2; // 保留字,必须为0 DWORD bfOffBIts; //从文件头到实际位图数据的偏移量字节数 }BITMAPFILEHEADER; 这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数)。 说明:为什么文件类型为BMP,即0x4d42? 原因:(4d)16 = (77)10,即字母m的ASCII码,(42)16 = (66)10,即字母b的ASCII码 3.位图信息头 位图信息头数据用于说明位图的尺寸等信息 typedef struct tagBITMAPINFOHEADER { DWORD biSize; //本结构所占用字节数,为40 LONG biWidth; //位图的宽度,以像素为单位 LONG biHeight; //位图的高度,以像素为单位。 WORG biPlanes; //目标设备的级别,必须为1 WORD biBitCount; // 表示颜色时所需的位数,常用的有1(二值图),4(16色),8(256色)或24(真彩色)。 DWORD biCompression; //位图压缩类型,必须是0(不压缩,基本采用该形式),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一。 DWORD biSizeImage; //实际位图数据占用的字节数。 ………… }BITMAPINFOHEADER; 4.颜色表(调色板) 用于说明位图中的颜色,他有若干个表项,每个表项是一个RGBQUAD类型的结构,定义一种颜色。其定义如下: typedef struct tagRGBQUAD { BYTE rgbBlue; //蓝色的亮度(范围是0——255) BYTE rgbGreen; //绿色的亮度(范围是0——255) BYTE rgbRed; //红色的亮度(范围是0——255) BYTE rgbReserved; //保留值 }RGBQUAD; 位图信息头和颜色表组成位图信息BITMAPINFO,定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; // 位图信息头 RGBQUAD bmiColors[1]; // 颜色表 }BITMAPINFO; 5.Windows位图结构数据域的含义P30 二、CDib类库的建立 P40 MFC中没有处理DIB位图的类,所以需要定义一个处理DIB位图的专用类CDib类,在其中封装必要的DIB数据成员和处理函数。 void LoadFile(const char* dibFileName); //装载BMP位图文件 BOOL SaveFile( const char *pszFilename ); //存储BMP位图文件 1. CDib类的设计目标 1)功能 主要包括: ①DIB文件的读、写操作 ②提供位图的宽度、高度、颜色数目等位图相关信息 ③提供有关位图占据内存空间的信息,包括图像数据区首地址、颜色表首地址、位图信息结构首地址等信息。 2)父类 MFC中的Cobject类是MFC中其他大多数类的根类和基类。他提供了许多有用的特性。另外,Cobject类具有最低限度的成员数据和函数,从Cobject类派生类所花的代价是最低的。因此,采用Cobject类作为CDib类的父类。 3)数据封装 他是面向对象的重要特征。但是在设计像CDib这样的类时,因为操作DIB的Win 32API函数大多需要一些DIB的属性作为参数,因此在设计CDib时应该注意程序的效率,不要过分封装。 4)继承 在设计CDib类时,在程序中即要打开原图,又要对原图进行各种处理,为了能够对照处理结果,即要显示原图,又要显示处理结果图,因此对原图不做任何处理; 将原图

文档评论(0)

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

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

1亿VIP精品文档

相关文档