第三章vc++图像编程基础

第三章vc++图像编程基础

ID:33467862

大小:389.01 KB

页数:35页

时间:2018-05-25

第三章vc++图像编程基础_第1页
第三章vc++图像编程基础_第2页
第三章vc++图像编程基础_第3页
第三章vc++图像编程基础_第4页
第三章vc++图像编程基础_第5页
资源描述:

《第三章vc++图像编程基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第三章VC++图像编程基础一、与设备无关位图(DIB)与设备无关位图(DIB)可以在不同的机器或系统中显示位图所固有的颜色。与DDB相比,DIB是一种外部的位图格式,经常存储以BMP为后缀的位图文件。1.BMP文件组成BMP文件由文件头、位图信息头、颜色信息表和图像数据四部分组成。位图结构如下:位图文件头:BITMAPFILEHEADER位图信息头:BITMAPINFOHEADER位图颜色表(调色板):RGBQUAD像素数据2.BMP文件头P30BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下:typedefstructtagBITMA

2、PFILEHEADER{WORDbfType;//文件类型,必须为BMP,即0x4d42DWORDbfSize;//文件大小,包括这14个字节WORDbfReserved1;//保留字,必须为0WORDbfFeserved2;//保留字,必须为0DWORDbfOffBIts;//从文件头到实际位图数据的偏移量字节数}BITMAPFILEHEADER;Bf:是BITMAPFILEHEADER的缩写这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数)。说明:为什么文件类型为BMP,即0x4d42?原因:(4d)16=(77)10,即字

3、母m的ASCII码,(42)16=(66)10,即字母b的ASCII码3.位图信息头位图信息头数据用于说明位图的尺寸等信息typedefstructtagBITMAPINFOHEADER{DWORDbiSize;//本结构所占用字节数,为40LONGbiWidth;//位图的宽度,以像素为单位LONGbiHeight;//位图的高度,以像素为单位。WORGbiPlanes;//目标设备的级别,必须为1WORDbiBitCount;//表示颜色时所需的位数,常用的有1(二值图),4(16色),8(256色)或24(真彩色)。DWORDbiCompression;//位图压缩类

4、型,必须是0(不压缩,基本采用该形式),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一。DWORDbiSizeImage;//实际位图数据占用的字节数。…………}BITMAPINFOHEADER;Bi:是BITMAPINFOHEADER的缩写4.颜色表(调色板)用于说明位图中的颜色,他有若干个表项,每个表项是一个RGBQUAD类型的结构,定义一种颜色。其定义如下:typedefstructtagRGBQUAD{BYTErgbBlue;//蓝色的亮度(范围是0——255)BYTErgbGreen;//绿色的亮度(范围是0——255)BYTErgbRed;//红

5、色的亮度(范围是0——255)BYTErgbReserved;//保留值}RGBQUAD;位图信息头和颜色表组成位图信息BITMAPINFO,定义如下:typedefstructtagBITMAPINFO{BITMAPINFOHEADERbmiHeader;//位图信息头RGBQUADbmiColors[1];//颜色表}BITMAPINFO;5.Windows位图结构数据域的含义P30二、CDib类库的建立P40MFC中没有处理DIB位图的类,所以需要定义一个处理DIB位图的专用类CDib类,在其中封装必要的DIB数据成员和处理函数。voidLoadFile(constc

6、har*dibFileName);//装载BMP位图文件BOOLSaveFile(constchar*pszFilename);//存储BMP位图文件1.CDib类的设计目标1)功能主要包括:①DIB文件的读、写操作②提供位图的宽度、高度、颜色数目等位图相关信息③提供有关位图占据内存空间的信息,包括图像数据区首地址、颜色表首地址、位图信息结构首地址等信息。2)父类MFC中的Cobject类是MFC中其他大多数类的根类和基类。他提供了许多有用的特性。另外,Cobject类具有最低限度的成员数据和函数,从Cobject类派生类所花的代价是最低的。因此,采用Cobject类作为C

7、Dib类的父类。3)数据封装他是面向对象的重要特征。但是在设计像CDib这样的类时,因为操作DIB的Win32API函数大多需要一些DIB的属性作为参数,因此在设计CDib时应该注意程序的效率,不要过分封装。4)继承在设计CDib类时,在程序中即要打开原图,又要对原图进行各种处理,为了能够对照处理结果,即要显示原图,又要显示处理结果图,因此对原图不做任何处理;将原图定义为CDib类的对象,而将需要处理图像的类定义为CDib类的派生类,由于派生类对基类中的保护或公有成员可以直接使用因此,因此在派生类中仅仅需要定义各种

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。