Bitmap文件格式简介

位图是Windows标准格式的图形文件。它将图像定义为由像素组成,每个点可以由多种色彩表示。位图文件格式如下表所示:

 

 

BITMAPFILEHEADER 的结构

typedef struct tagBITMAPFILEHEADER 

WORD           bfType;              指定文件类型,必须是0x424D,即字符串“BM”,也就是说所有.bmp文件的头两个字节都是“BM

DWORD        bfSize;                指定文件大小,包括这14个字节。

WORD           bfReserved1;     为保留字,不用考虑

WORD           bfReserved2;     为保留字,不用考虑

DWORD         bfOffBits;           为从文件头到实际的位图数据的偏移字节数。

} BITMAPFILEHEADER; 

 

BITMAPINFOHEADER 的结构

typedef struct tagBITMAPINFOHEADER 

DWORD         biSize;               指定这个结构的长度,为40 

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

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

WORD           biPlanes;           必须是1,不用考虑

WORD           biBitCount         指定表示颜色时要用到的位数,常用的值为1(黑白二色图), 4(16色图), 8(256), 24(真彩色图),32。

DWORD        biCompression; 指定位图是否压缩,有效的值为BI_RGBBI_RLE8BI_RLE4BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompressionBI_RGB的情况。

DWORD        biSizeImage;      指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:biSizeImage=biWidth’ × biHeight 

要注意的是:上述公式中的biWidth’必须是4的整倍数(所以不是biWidth,而是biWidth’,表示大于或等于biWidth的,最接近4的整倍数。举个例子,如果biWidth=240,则biWidth’=240;如果biWidth=241biWidth’=244)如果biCompressionBI_RGB,则该项可能为零。 

LONG            biXPelsPerMeter; 指定目标设备的水平分辨率,单位是每米的象素个数。

LONG            biYPelsPerMeter; 指定目标设备的垂直分辨率,单位同上。

DWORD       biClrUsed;           指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2biBitCount。

DWORD       biClrImportant;   指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。

} BITMAPINFOHEADER;

 

RGBQUAD 的结构

typedef struct tagRGBQUAD 

BYTE           rgbBlue;              该颜色的蓝色分量

BYTE           rgbGreen;           该颜色的绿色分量

BYTE           rgbRed;              该颜色的红色分量

BYTE           rgbReserved;      保留值

} RGBQUAD;

 

下面是一幅具体的Bitmap图像的存储数据

一般来说,.bMP文件的数据从下到上,从左到右的。也就是说,从文件中最先读到的是图象最下面一行的左边第一个象素,然后是左边第二个象素……接下来是倒数第二行左边第一个象素,左边第二个象素……依次类推,最后得到的是最上面一行的最右一个象素。要注意的一点是在BMP位图中,位图的每行像素值要填充到一个四字节边界,即位图每行所占的存储长度为四字节的倍数,不足时将多余位用0填充。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值