多媒体编程基础

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六章多媒体编程基础

6.1多媒体文件

多媒体文件一般被称为RIFF文件,即资源交互文件格式(Resource interchange file format)。RIFF格式是面向部分(Chunk)的。一个RIFF文件是由一个或多个部分组成的,每个部分都有一个类型,后面跟着一些数据。

typedef struct{

FOURCC ckID; //4字符字段,标志类型(比如波形音频为WA VE)

DWORD cksize; //部分中数据的大小

}CK;

MFC为处理RIFF文件专门提供了一套多媒体I/O函数,这些函数都有前缀mmio。比如mmioOpen是打开RIFF文件,mmioDescend可以进入RIFF文件的部分。

HMMIO h;

CString path;

……

If ((h=mmioOpen(path,NULL,MMIO_READ))==NULL)

return FALSE;

……

If (mmioRead(h,&dataformat,(long)n)!=(long)n)

{ mmio Close(h,0);

return FALSE;

}

WA V文件开始是46个字节的文件头,之后是波形数据。文件头如下:Typedef struct {

DWORD rftype; //固定为字符串“RIFF”

DWORD wbSize; //波形块的大小

DWORD wftype; //wav文件标志,固定为字符串“WA VE”

DWORD ftype; //固定为字符串“fmt”

DWORD BlockSize; //格式块的大小

WORD wFormatTag; //记录波形编码格式。为WA VE_FORMAT_PCM WORD nChannels; //记录波形文件数据中的通道数

DWORD nSamplesPerSec; //记录波形文件的采样率

DWORD nAvgBytesPerSec;//平均每秒波形音频数据所需要的字节数

DWORD nBlockAlign; //记录一个采样所需要的字节数

WORD wBitsPerSample; //每个采样的位数

DWORD dataflag; //固定为字符串“data”

DWORD fSize; //波形文件大小

}PCMWA VEFORMAT;

BMP文件开始通常依次是14字节的文件头,40字节的位图信息,颜色表(真彩位图没有),最后是图像数据,对于用到调色板的位图,实际的图象数据ImageDate为该象素的颜色在调色板中的索引值;对于真彩色图,图象数据则为实际的R、G、B值。位图数据每一行的字节数必须为4的整倍数,如果不是,则需要补齐;位图文件中的数据是从下到上(而不是从上到下)、从左到右方式

存储的。图像数据或者不压缩,或者使用RLE压缩。

文件头如下:

typedef struct tagBITMAPFILEHEADER {

WORD bftype; // 固定为字符串“BM”

DWORD bfsize; // 字节为单位的位图文件大小

WORD bfReserved1; // 位图文件保留字,必须为0

WORD bfReserved2; // 位图文件保留字,必须为0

DWORD bfoffBits; // 指出图像数据针对文件头的偏移量

}BITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER

{

DWORD biSize; //本结构的长度,为40

LONG biWidth; //图象的宽度,单位是象素

LONG biHeight; //图象的高度,单位是象素

WORD biPlanes; //必须是1

WORD biBitCount;

//表示颜色时要用到的位数,1(单色), 4(16色), 8(256色), 24(真彩色) DWORD biCompression;

//指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS 等,BI_RGB表示不压缩

DWORD biSizeImage;

//实际的位图数据占用的字节数,即biSizeImage=biWidth’×biHeight,biWidth’是biWidth 按照4的整倍数调整后的结果

LONG biXPelsPerMeter; //目标设备的水平分辨率,单位是每米的象素个数LONG biYPelsPerMeter; //目标设备的垂直分辨率,单位是每米的象素个数DWORD biClrUsed; //位图实际用到的颜色数,0表示颜色数为2biBitCount DWORD biClrImportant; //位图中重要的颜色数,0表示所有颜色都重要

} BITMAPINFOHEADER;

调色板Palette针对的是需要调色板的位图,即单色、16色和256色位图。对于不以调色板方式存储的位图,则无此项信息。调色板是一个数组,共有biClrUsed 个元素(如果该值为0,则有2biBitCount个元素)。数组中每个元素是一个RGBQUAD结构体,长度为4个字节,定义为:

typedef struct tagRGBQUAD

{

BYTE rgbBlue; //蓝色分量

BYTE rgbGreen; //绿色分量

BYTE rgbRed; //红色分量

BYTE rgbReserved; //保留值

} RGBQUAD;

6.2 WINDOWS位图

WINSOWS位图编程的方法主要分为设备相关位图与设备无关位图。DDB 设备相关位图由MFC中CBitmap类表示,从应用程序的资源里获得完全依赖于

相关文档
最新文档