您的位置:首页 > 其它

位图(.BMP)文件结构

2011-09-09 17:04 337 查看
// 文件头

typedef struct tagBITMAPFILEHEADER {

WORD bfType; // 位图文件的类型,一般为BM

DWORD bfSize; // 位图文件的大小,以字节为单位

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

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

DWORD bfOffBits; // 位图数据的起始位置

} BITMAPFILEHEADER;

// 位图信息头

typedef struct tagBITMAPINFOHEADER{

DWORD biSize; // 本结构所占用字节数

LONG biWidth; // 位图的宽度,以像素为单位

LONG biHeight; // 位图的高度,以像素为单位

WORD biPlanes; // 目标设备的级别,必须为1

WORD biBitCount; // 每个像素所需的位数,必须是1(双色),4(16色),8(256色)或24(真彩色)之一

DWORD biCompression; // 位图压缩类型,必须是 0(不压缩), 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一

DWORD biSizeImage; // 位图的大小,以字节为单位

LONG biXPelsPerMeter; // 位图水平分辨率,每米像素数

LONG biYPelsPerMeter; // 位图垂直分辨率,每米像素数

DWORD biClrUsed; // 位图实际使用的颜色表中的颜色数

DWORD biClrImportant; // 位图显示过程中重要的颜色数

} BITMAPINFOHEADER;

// 颜色信息

typedef struct tagRGBQUAD {

BYTE rgbBlue; // 蓝色的亮度(值范围为0-255)

BYTE rgbGreen; // 绿色的亮度(值范围为0-255)

BYTE rgbRed; // 红色的亮度(值范围为0-255)

BYTE rgbReserved; // 保留,必须为0

} RGBQUAD;

// 显示

typedef struct tagRGBSHOW {

BYTE rgbBlue; // 蓝色的亮度(值范围为0-255)

BYTE rgbGreen; // 绿色的亮度(值范围为0-255)

BYTE rgbRed; // 红色的亮度(值范围为0-255)

BYTE rgbAlpha; // Alpha通道

} RGBSHOW;
位图数据

---- 位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:

当biBitCount=1时,8个像素占1个字节;

当biBitCount=4时,2个像素占1个字节;

当biBitCount=8时,1个像素占1个字节;

当biBitCount=24时,1个像素占3个字节;

Windows规定一个扫描行所占的字节数必须是 4的倍数(即以long为单位),不足的以0填充,

一个扫描行所占的字节数计算方法: DataSizePerLine= (biWidth* biBitCount+31)/8;

// 一个扫描行所占的字节数 DataSizePerLine= DataSizePerLine/4*4; // 字节数必须是4的倍数

位图数据的大小(不压缩情况下): DataSize= DataSizePerLine* biHeight;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: