BMP文件格式解析
2012-10-03 15:39
211 查看
一,BMP位图整体结构
位图文件主要分为如下3个部分:
说明:BMP位图按照每像素多少位来表示可分为1,4,8,16,24,32这几种,其中24位位图是一种常见格式,本文将以一个4*4的24位BMP位图予以说明。
二,位图分块介绍
1,文件信息头
文件信息头BITMAPFILEHEADER
结构体定义如下:
typedef struct tagBITMAPFILEHEADER { /* bmfh */
UINT bfType; //2字节,ascii码是“BM”
DWORD bfSize; //4字节,位图总共大小。
UINT bfReserved1; //2字节,保留,为0.
UINT bfReserved2; //2字节,保留,为0.
DWORD bfOffBits; //4字节,从文件头到数据区的偏移量
} BITMAPFILEHEADER;
其中:
2,位图信息图
位图信息头BITMAPINFOHEADER
结构体定义如下:
typedef struct tagBITMAPINFOHEADER { /* bmih */
DWORD biSize; //4字节,位图信息头大小
LONG biWidth; //4字节,图像宽度,以像素为单位
LONG biHeight; //4字节,图像高度,以像素为单位
WORD biPlanes; //2字节,位平面,等于1
WORD biBitCount; //2字节,单位像素的位数,大多为24位,32位
DWORD biCompression; //4字节,压缩性,等于0
DWORD biSizeImage; //4字节,数据区的大小,当上一值为0时,此值可以为0
LONG biXPelsPerMeter; //4字节,水平分辨率,忽略
LONG biYPelsPerMeter; //4字节,垂直分辨率,忽略
DWORD biClrUsed; //4字节,使用颜色表的个数,当biBitCount<16时
表示有2的biBitCount次方个颜色表
DWORD biClrImportant; //4字节,重要颜色的个数
} BITMAPINFOHEADER;
其中:
3,数据区
RGB颜色阵列
有关RGB三色空间我想大家都很熟悉,这里我想说的是在Windows下,RGB颜色阵列存储的格式其实BGR。也就是说,对于24位的RGB位图像素数据格式是:
对于32位的RGB位图像素数据格式是:
透明通道也称Alpha通道,该值是该像素点的透明属性,取值在0(全透明)到255(不透明)之间。对于24位的图像来说,因为没有Alpha通道,故整个图像都不透明。
说明:存于外存中的BMP位图,若位图的宽度*bitCount(每像素所占位数)整除4不为0,则在行数据末添加0,以便计算机一次读取4字节。稍后会有说明。
位图文件主要分为如下3个部分:
块名称 | 对应Windows结构体定义 | 大小(Byte) |
文件信息头 | BITMAPFILEHEADER | 14 |
位图信息头 | BITMAPINFOHEADER | 40 |
RGB颜色阵列 | BYTE* | 由图像长宽尺寸决定 |
二,位图分块介绍
1,文件信息头
文件信息头BITMAPFILEHEADER
结构体定义如下:
typedef struct tagBITMAPFILEHEADER { /* bmfh */
UINT bfType; //2字节,ascii码是“BM”
DWORD bfSize; //4字节,位图总共大小。
UINT bfReserved1; //2字节,保留,为0.
UINT bfReserved2; //2字节,保留,为0.
DWORD bfOffBits; //4字节,从文件头到数据区的偏移量
} BITMAPFILEHEADER;
其中:
bfType | 说明文件的类型,该值必需是0x4D42,也就是字符'BM'。 |
bfSize | 说明该位图文件的大小,用字节为单位 |
bfReserved1 | 保留,必须设置为0 |
bfReserved2 | 保留,必须设置为0 |
bfOffBits | 说明从文件头开始到实际的图象数据之间的字节的偏移量。这个参数是非常有用的,因为位图信息头和调色板的长度会根据不同情况而变化,所以你可以用这个偏移值迅速的从文件中读取到位数据。 |
位图信息头BITMAPINFOHEADER
结构体定义如下:
typedef struct tagBITMAPINFOHEADER { /* bmih */
DWORD biSize; //4字节,位图信息头大小
LONG biWidth; //4字节,图像宽度,以像素为单位
LONG biHeight; //4字节,图像高度,以像素为单位
WORD biPlanes; //2字节,位平面,等于1
WORD biBitCount; //2字节,单位像素的位数,大多为24位,32位
DWORD biCompression; //4字节,压缩性,等于0
DWORD biSizeImage; //4字节,数据区的大小,当上一值为0时,此值可以为0
LONG biXPelsPerMeter; //4字节,水平分辨率,忽略
LONG biYPelsPerMeter; //4字节,垂直分辨率,忽略
DWORD biClrUsed; //4字节,使用颜色表的个数,当biBitCount<16时
表示有2的biBitCount次方个颜色表
DWORD biClrImportant; //4字节,重要颜色的个数
} BITMAPINFOHEADER;
其中:
biSize | 说明BITMAPINFOHEADER结构所需要的字数。 |
biWidth | 说明图象的宽度,以象素为单位。 |
biHeight | 说明图象的高度,以象素为单位。注:这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值是一个正数,说明图像是倒向的,如果该值是一个负数,则说明图像是正向的。大多数的BMP文件都是倒向的位图,也就是时,高度值是一个正数。 |
biPlanes | 为目标设备说明位面数,其值将总是被设为1。 |
biBitCount | 说明比特数/象素,其值为1、4、8、16、24、或32。但是由于我们平时用到的图像绝大部分是24位和32位的,所以我们讨论这两类图像。 |
biCompression | 说明图象数据压缩的类型,同样我们只讨论没有压缩的类型:BI_RGB。 |
biSizeImage | 说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0。 |
biXPelsPerMeter | 说明水平分辨率,用象素/米表示。 |
biYPelsPerMeter | 说明垂直分辨率,用象素/米表示。 |
biClrUsed | 说明位图实际使用的彩色表中的颜色索引数(设为0的话,则说明使用所有调色板项)。 |
biClrImportant | 说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。 |
RGB颜色阵列
有关RGB三色空间我想大家都很熟悉,这里我想说的是在Windows下,RGB颜色阵列存储的格式其实BGR。也就是说,对于24位的RGB位图像素数据格式是:
蓝色B值 | 绿色G值 | 红色R值 |
蓝色B值 | 绿色G值 | 红色R值 | 透明通道A值 |
说明:存于外存中的BMP位图,若位图的宽度*bitCount(每像素所占位数)整除4不为0,则在行数据末添加0,以便计算机一次读取4字节。稍后会有说明。
相关文章推荐
- bmp文件格式的解析与显示
- bmp文件格式详细解析
- bmp文件格式详细解析
- BMP文件格式解析
- bmp文件格式详细解析
- BMP文件头格式 bmp文件二进制解析,bmp文件解析,bmp存储格式
- BMP文件格式解析
- BMP文件格式解析
- BMP文件头格式 bmp文件二进制解析
- 2,BMP文件格式解析
- MP3文件格式解析
- pcap文件格式及文件解析
- MP3文件格式解析
- BMP文件格式
- bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换
- mp4文件格式解析(二)
- MP3文件格式解析
- ELF文件格式解析
- 使用Manifest和Attributes类解析形如MANIFEST.MF格式文件内容
- 使用Java解析xml文件为json格式