位图(.BMP)文件结构

来源:互联网 发布:js正整数的正则表达式 编辑:程序博客网 时间:2024/06/11 09:55



// 文件头
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; 


原创粉丝点击