第十一章 多媒体技术
随着计算机技术的广泛应用,各种图文、音频和视频文件大量涌现,不断地冲击着人们的日常生活,从而使用户对应用程序的要求不断地提高,所以程序员在开发项目时也要处理各种的多媒体文件。在本章中就位图文件、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】