详解BMP格式

详解BMP文件格式

 转载请注明出处


       BMP是bitmap的缩写,顾名思义,BITMAP就是位图,及windows位图,是一种未经过压缩的图像。其使用范围非常广泛,是windows环境中交换图像有关数据的一种标准。所以,在windows环境中运行的设备都支持BMP图像格式,并采用了为映射的格式储存。当用BMP文件存储数据结构时,图像的扫描顺序是按照从左到右,从下到上的顺序进行的(这对于读取BMP顺序是非常重要)。

        BMP图像文件格式一般由文件头信息块(BITMAPFILEHEADER)、图像描述信息(BITMAPINFOHEDER)、颜色表(RGBQUAD)(真彩色模式下无该信息块)和图像数据四部分组成。

图像格式如下表所示:

 

BMP文件组成

数据结构表示

位图文件头

BITMAPFILEDEADER

位图信息头

BITMAPINFOHEADER

颜色信息

RGBQUAD

位图数据

BYTE

 

1.        位图文件头

位图文件头主要包括文件大小、文件类型、图像数据偏移文件头的长度等信息,其结构占14个字节,定义如下(来源于MSDN2011):

BITMAPFILEHEADER

typedef struct tagBITMAPFILEHEADER{

WORD bfType;          //占2个字节,文件类型,一般为“BM”

DWORD bfSize;         //占4个字节,位图文件的大小

WORD bfReserved1;     //占2个字节,文件保留字1,0(一般用不到)

WORD bfReserved2;     //占2个字节,文件保留字2,0(一般用不到)

DWORD bfOffBits;      //占4个字节,图像数据偏移文件头的长度

} BITMAPFILEHEADER;


 

2.        位图信息头

位图信息头主要包括位图图像的大小、像素深度、图像是否压缩、图像所用眼色数等,其结构占用40个字节,定义如下:

BITMAPINFOHEADER

typedef struct tagBITMAPINFOHEADER{ 

DWORD biSize;         //该结构所需的字节数

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

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

WORD biPlanes;        //目标设备的平面数,设置为1

WORD biBitCount       //每个像素所需的bit数。“1”表示单色图像;设置“4”,表示有16种颜色;设置为“8”,表示有256种颜色;设置为“24”就是真彩色图像,表示的颜色有16 777 216种颜色,且一个像素由3个像素表色,分别代表R,G,B分量。

DWORD biCompression;  //位图的压缩类型,“0”表示未压缩

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

LONG biXPelsPerMeter; //水平分辨率

LONG biYPelsPerMeter; //垂直分辨率

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

DWORD biClrImportant; //显示过程中主要的颜色数

} BITMAPINFOHEADER; 


 

3.        颜色信息

颜色信息包含所要用到的颜色表,显示图像时需要这个表来生成调色板。但如果是一幅真彩色的图像,则没有这一块信息。颜色表中有若干个表项,每一项都是RGBQUAD类型的结构,定义一种颜色。其结构如下:

RGBQUAD

Thisstructure describes a color consisting of relative intensities of red, green,and blue.

typedef struct tagRGBQUAD { 

BYTE rgbBlue;        //蓝色分量(0-255)

BYTE rgbGreen;       //绿色分量(0-255)

BYTE rgbRed;         //红色分量(0-255)

BYTE rgbReserved;}   //保留,“0”

RGBQUAD;


 

4.        位图数据

文件中的位图数据表示图像相应的像素值。特别注意:第一,图像的像素值在文件中是按从左到右,从下到上的顺序存储的。也就是说,在BMP文件中首先存放的是图像的最后一行数据。第二,当存储图像的每一行的像素值时,如果存储该行像素值所占的字节数为4的倍数是,则正常存储,否则需要在后面补“0”,凑足4的倍数


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值