BMP位图文件的4个组成部分

您所在的位置:网站首页 链条有哪几部分组成的图片 BMP位图文件的4个组成部分

BMP位图文件的4个组成部分

2024-07-11 02:30| 来源: 网络整理| 查看: 265

bmp文件大体上分成四个部分。 位图文件头BITMAPFILEHEADER 、 位图信息头BITMAPINFOHEADER 、 调色板Palette 、 实际的位图数据ImageDate 第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。其定义如下: typedef struct tagBITMAPFILEHEADER {     WORD bfType;            DWORD bfSize;          WORD bfReserved1;       WORD bfReserved2;      DWORD bfOffBits; } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER; 1.文件头信息块 0000-0001 :文件标识,为字母ASCII码“BM”。 0002-0005 :文件大小。 0006-0009 :保留,每字节以“00”填写。 000A-000D :记录图像数据区的起始位置。各字节的信息含义依次为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)。 第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。其定义如下: typedef struct tagBITMAPINFOHEADER {     DWORD biSize;  图像描述信息块的大小,常为28H。     LONG biWidth;                LONG biHeight;               WORD biPlanes;      =1         WORD biBitCount ;        记录像素的位数     DWORD biCompression; 数据压缩方式     DWORD biSizeImage;      图像区数据的大小     LONG biXPelsPerMeter;   指定目标设备的水平分辨率,单位是像素/米     LONG biYPelsPerMeter;        DWORD biClrUsed;     位图实际用到的颜色数     DWORD biClrImportant;  位图显示过程中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。 } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER; 2.图像描述信息块

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

第3部分为颜色表。颜色表实际上是一个RGBQUAD结构的数组,数组的长度由biClrUsed指定(如果该值为零,则由biBitCount指定,即2的biBitCount次幂个元素)。RGBQUAD结构是一个结构体类型,占4个字节,其定义如下: typedef struct tagRGBQUAD {     BYTE rgbBlue;     BYTE rgbGreen;     BYTE rgbRed;     BYTE rgbReserved; }RGBQUAD; 3.颜色表 颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha(32位位图的透明度值,一般不需要)。即首先4字节表示颜色号0的颜色,接下来表示颜色号1的颜色,依此类推。

第4部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色图,位图数据就是实际的R、G、B值(三个分量的存储顺序是B、G、R)。下面分别就2色、16色、256色和真彩色位图的位图数据进行说明: —  对于2色位图,用1位就可以表示该像素的颜色,所以1个字节能存储8个像素的颜色值。 —  对于16色位图,用4位可以表示一个像素的颜色。所以一个字节可以存储2个像素的颜色值。 —  对于256色位图,1个字节刚好存储1个像素的颜色值。 —  对于真彩色位图,3个字节才能表示1个像素的颜色值。 需要注意两点: 第一,Windows规定一个扫描行所占的字节数必须是4的倍数,不足4的倍数则要对其进行扩充。假设图像的宽为biWidth个像素、每像素biBitCount个比特,其一个扫描行所占的真实字节数的计算公式如下: DataSizePerLine = (biWidth * biBitCount /8+ 3) / 4*4 那么,不压缩情况下位图数据的大小(BITMAPINFOHEADER结构中的biSizeImage成员)计算如下: biSizeImage = DataSizePerLine * biHeight 第二,一般来说,BMP文件的数据是从图像的左下角开始逐行扫描图像的,即从下到上、从左到右,将图像的像素值一一记录下来,因此图像坐标零点在图像左下角。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3