设为首页 加入收藏

TOP

11.1.1 位图文件结构分析
2013-10-07 00:11:30 来源: 作者: 【 】 浏览:58
Tags:11.1.1位图 文件 结构 分析

第十一章 多媒体技术

随着计算机技术的广泛应用,各种图文、音频和视频文件大量涌现,不断地冲击着人们的日常生活,从而使用户对应用程序的要求不断地提高,所以程序员在开发项目时也要处理各种的多媒体文件。在本章中就位图文件、WAVE文件、AVI文件和Flash动画进行简单的介绍,其中需要重点掌握的是位图文件的各种操作。通过学习本章,读者可以达到以下学习目的:

♣  了解位图文件结构;
♣  掌握位图文件的显示;
♣  掌握保存位图文件的方法;
♣  掌握JPEG和GIF文件的显示;
♣  掌握WAVE资源的播放;
♣  掌握WAVE文件的播放;
♣  掌握音量的控制;
♣  掌握AVI文件的播放;
♣  掌握Flash文件的播放。


 
| 11.1 | 图像处理技术

随着图形图像技术的发展,图像在程序界面的中的应用已经称为程序设计的主流,本章就以BMP位图文件为例介绍一下图像处理技术。

11.1.1  位图文件结构分析

位图(BMP)文件是Windows采用的图形文件格式,它常以bmp、dib或rle作为扩展名。位图文件最大的特点是没有经过压缩,它将图像中的每个像素的颜色值进行存储,所以文件本身比较大。位图文件由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列(位图的实际数据)。

1.位图文件头
位图文件头可以用下面的数据结构来描述:

typedef struct tagBITMAPFILEHEADER { // bmfh 
WORD    bfType;
DWORD   bfSize;
WORD    bfReserved1;
WORD    bfReserved2;
DWORD   bfOffBits;
} BITMAPFILEHEADER;

数据结构中各参数的说明如表11.1所示。
表11.1 参数说明
参    数                          描    述
bfType               说明文件的类型,该值必需是0x4D42,即字符串“BM”。OS/2系统中也有位图,如果是OS/2系统此值可以是BA(Bitmap Array),CI(Color Icon)、CP(Color Pointer)、IC(Icon)、PT(Pointer),应用时要注意区分
bfSize               说明文件的大小,以字节为单位
bfReserved1          保留,必须设置为0
bfReserved2          保留,必须设置为0
bfOffBits 说明从文件头开始到实际的图像数据之间的字节的偏移量。这个参数是非常有用的,因为位图信息头和调色板的长度会根据不同情况而变化,所以用户可以用这个偏移值迅速地从文件中读取到位数据

2.位图信息头
位图信息头也可以用下面的数据结构来描述:

typedef struct tagBITMAPINFOHEADER{ // bmih 
DWORD  biSize;
LONG   biWidth;
LONG   biHeight;
WORD   biPlanes;
WORD   biBitCount;
DWORD  biCompression;
DWORD  biSizeImage;
LONG   biXPelsPerMeter;
LONG   biYPelsPerMeter;
DWORD  biClrUsed;
DWORD  biClrImportant;
} BITMAPINFOHEADER;
数据结构中各参数的说明如表11.2所示。
表11.2 参数说明
参    数                              描    述
biSize             说明BITMAPINFOHEADER结构所需要的字数,这个值并不一定是BITMAPINFOHEADER结构的尺寸,它也可能是sizeof(BITMAPV4HEADER)的值,或是sizeof(BITMAPV5HEADER)的值。BITMAPV4HEADER是Windows 95 和 Windows NT 4.0的位图结构,BITMAPV5HEADER是Windows NT 5.0 和 Windows 98的位图结构,Windows NT以前使用BITMAPINFOHEADER结构。实际使用过程中要根据系统来决定,但绝大多数的位图图像都是BITMAPINFOHEADER结构的
biWidth            说明图像的宽度,以像素为单位
biHeight           说明图像的高度,以像素为单位。这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值是一个正数,说明图像是倒向的;如果该值是一个负数,则说明图像是正向的。大多数的位图文件都是倒向的位图。当高度值是一个负数时,图像将不能被压缩
biPlanes           为目标设备说明位面数,其值总是被设为1
biBitCount             说明比特数/像素,值为1、4、8、16、24、或32
biCompression       说明图像数据压缩的类型。值可以是BI_RGB、BI_RLE8、BI_RLE4和BI_BITFIELDS。BI_RGB说明位图没有压缩;BI_RLE8说明使用每个像素8比特的RLE压缩编码;BI_RLE4说明使用每个像素4比特的RLE压缩编码;BI_BITFIELDS说明每个像素的比特由指定的掩码决定
biSizeImage              说明图像的大小,以字节为单位。当用BI_RGB格式时,可设置为0
biXPelsPerMeter       说明水平分辨率,用像素/米表示
biYPelsPerMeter        说明垂直分辨率,用像素/米表示
biClrUsed            说明位图实际使用的彩色表中的颜色索引数,如果设为0,则说明使用所有调色板项
biClrImportant            说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要

3.彩色表
彩色表用下面的数据结构描述:

typedef struct tagRGBQUAD { // rgbq 
BYTE    rgbBlue;
BYTE    rgbGreen;
BYTE    rgbRed;
BYTE    rgbReserved;
} RGBQUAD;
数据结构中各参数的说明如表11.3所示。
表11.3 参数说明
参    数 描    述
rgbBlue 指定蓝色强度
rgbGreen 指定绿色强度
rgbRed 指定红色强度
rgbReserved 保留,设置为0

4.位图数据
紧跟在彩色表之后的是图像数据字节阵列。图像的每行由表示图像像素的连续的字节组成,每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。扫描行是由底向上存储的,这就是说,阵列中的第1个字节表示位图左下角的像素,而最后一个字节表示位图右上角的像素。如果是正向DIB,则扫描行是由顶向下存储的。

【责任编辑:阚书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.4.6 MPEG-4码表 下一篇11.1.2 将位图文件绘制成对话框背..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: