bmp图像文件格式

BMPbitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图。它一般由4部分组成:文件头信息块、图像描述信息块、颜色表(在真彩色模式无颜色表)和图像数据区组成。在系统中以BMP为扩展名保存。
  打开Windows的画图程序,在保存图像时,可以看到三个选项:2色位图(黑白)、16色位图、256色位图和24位位图。这是最普通的生成位图的工具,在这里讲解的BMP位图形式,主要就是指用画图生成的位图(当然,也可以用其它工具软件生成)。建议刚开始通过UtralEdit-32等二进制软件来查看bmp图像以增加对该文件格式的了解。

BMP文件头结构;

接下来是BMP信息头

现在讲解BMP4个组成部分:

1.文件头信息块(14个字节)

typedef struct tagBITMAPFILEHEADER

{

WORD bfType;                     文件类型,一定是‘BM’

DWORD bfSize;                文件大小,字节单位

WORD bfReserved1;            保留位

WORD bfReserved2;               保留位

DWORD bfOffBits;                    位图矩阵偏移量,是相对于文件开头的偏移量,字节单位

} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

0000-0001:文件标识,为字母ASCII“BM”
0002-0005
:文件大小。
0006-0009
:保留,每字节以“00”填写。
000A-000D
:记录图像数据区的起始位置。各字节的信息依次含义为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)。

2.图像描述信息块(40个字节)

typedef struct tagBITMAPINFO

{

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColors[1];

} BITMAPINFO, *PBITMAPINFO;

其中BITMAPINFOHEADER的结构体如下:

typedef struct tagBITMAPINFOHEADER

{

DWORD biSize;                     位图头大小,不一定有效的。

LONG biWidth;                      位图宽度,象素单位

LONG biHeight;             位图高度,象素单位

WORD biPlanes;                    平面数,一定为1

WORD biBitCount;          色彩深度,可以是14816,分别表示单色,16色,256色和真彩色

DWORD biCompression;        压缩方式,0表示无压缩,1表示RLE压缩,2表示每个象素4比特的RLE压缩

DWORD biSizeImage;             图像区数据的大小

LONG biXPelsPerMeter;          水平分辨率,象素/

LONG biYPelsPerMeter;          垂直分辨率,象素/

DWORD biClrUsed;                 所实际使用的颜色表中的颜色数,不一定有效

DWORD biClrImportant;          重要的颜色数,不一定有效

} BITMAPINFOHEADER, *PBITMAPINFOHEADER;

000E-0011:图像描述信息块的大小,常为28H
0012-0015
:图像宽度。
0016-0019
:图像高度。
001A-001B
:图像的plane总数(恒为1)。
001C-001D
:记录像素的位数,很重要的数值,图像的颜色数由该值决定。
001E-0021
:数据压缩方式(数值位0:不压缩;18位压缩;24位压缩)。
0022-0025
:图像区数据的大小。
0026-0029
:水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002A-002D
:垂直每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002E-0031
:此图像所用的颜色数,如值为0,表示所有颜色一样重要。

3.颜色表

彩色表项的结构是
stypedef struct tagRGBQUAD

{

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

} RGBQUAD;

  颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha32位位图的透明度值,一般不需要)。即首先4字节表示颜色号1的颜色,接下来表示颜色号2的颜色,依此类推。

4.图像数据区

  颜色表接下来位为位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,即2色图像每点占1位(8位为1字节);16色图像每点占4位(半字节);256色图像每点占8位(1字节);真彩色图像每点占24位(3字节)。所以,整个数据区的大小也会随之变化。究其规律而言,可的出如下计算公式:图像数据信息大小=(图像宽度*图像高度*记录像素的位数)/8
  然而,未压缩的图像信息区的大小。除了真彩色模式外,其余的均大于或等于数据信息的大小。这是为什么呢?原因有两个:
  1.BMP文件记录一行图像是以字节为单位的。因此,就不存在一个字节中的数据位信息表示的点在不同的两行中。也就是说,设显示模式位16色,在每个字节分配两个点信息时,如果图像的宽度位奇数,那么最后一个像素点的信息将独占一个字节,这个字节的后4位将没有意义。接下来的一个字节将开始记录下一行的信息。
  2.为了显示的方便,除了真彩色外,其他的每行中颜色模式的行字节数要用数据“00”补齐为4的整数倍。如果显示模式为16色,当图像宽为19时,存储时每行则要补充4-(19/2+1)%4=2个字节(加1是因为里面有一个像素点要独占了一字节)。如果显示模式为256色,当图像宽为19时,每行也要补充4-19%4=1个字节。
  还有一点我要申明,当屏幕初始化为16256色模式时,一定要设置调色板或修正颜色值,否则无法得到正确的图像颜色。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值