BMP格式学习

BMP格式学习

参考博客地址:
BMP格式详解
伪彩色百度百科

1.BMP文件介绍

BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP格式理所当然地被广泛应用。

这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点,即占用磁盘空间过大。所以,目前BMP在单机上比较流行。

BMP文件主要由四部分组成:

  1. 位图文件头(BITMAPFILEHEADER):提供文件的格式、大小等信息;
  2. 位图信息头(BITMAPINFOHEADER):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息;
  3. 调色板:可选。对于伪彩色图像来说,调色板可以就是用于索引与其对应的颜色的映射表;
  4. 位图数据:即图像数据。对于伪彩色图像来说,就是调色板的索引值。

此外,BMP文件的数据存放形式为小端方式,即低地址存放低位数据,高地址存放高位数据

2.BMP文件详解

2.1.位图文件头

Windows为BMP文件头定义了如下结构体:

//BMP文件头:14B
typedef struct tagBITMAPFILEHEADER {
        WORD    bfType;  //2B 
        DWORD   bfSize;  //4B
        WORD    bfReserved1;  
        WORD    bfReserved2;  
        DWORD   bfOffBits;  
} BITMAPFILEHEADER;

在这里插入图片描述

2.2.位图信息头

Windows为BMP信息头定义了如下结构体:

//BMP信息头:40B
typedef struct tagBITMAPINFOHEADER{
        DWORD      biSize;  //4B
        LONG       biWidth;  //4B
        LONG       biHeight;  
        WORD       biPlanes;  //2B
        WORD       biBitCount;  
        DWORD      biCompression;  
        DWORD      biSizeImage;  
        LONG       biXPelsPerMeter;  
        LONG       biYPelsPerMeter;  
        DWORD      biClrUsed;  
        DWORD      biClrImportant;  
} BITMAPINFOHEADER;

在这里插入图片描述

对于所有BMP文件来说,以上两个部分是必须的,总共占用54个字节。

2.3.调色板

调色板这一部分并不是必须的。对于真彩色图像,如24位的BMP文件,自身就带有各8位的R、G、B色彩信息,就不需要再用调色板进行色彩映射了。因此,真彩色BMP图像就只有三个组成部分,而且位图文件从文件头开始偏移54个字节就是位图数据了;对于伪彩色图像,如8位的BMP文件,由于其个像素的颜色不是由各个颜色分量决定的,而是通过一张颜色查找表进行查找而得到的,因此需要调色板作为色彩映射。

如上所说,BMP文件格式中的调色板实际上是一张映射表,用于标识颜色索引号与其代表的颜色对应关系。它在文件中的布局就像一个二维数组[N] [4],其中每行都代表一种颜色索引,总共有4个元素,分别代表该索引对应的B、G、R和Alpha(透明度),每个元素占一个字节。

假设调色板一共有256个颜色索引,则总共需要256*4=1024个字节。加上之前的文件头和信息头所占字节数,总共有1078个字节。也就是说,对于伪彩色BMP文件,从文件头开始偏移1078个字节就是位图数据。

2.4.位图数据

位图数据的设置是由信息头定义的,如biBitCount规定了每个像素所占的比特数。另外,对于伪彩色图像,biClrUsed规定了调色板的颜色索引数,其值通常设为0,表示使用所有调色板项。

对于真彩色BMP文件,位图数据是各个像素的实际色彩。如24位(8,8,8)的BMP文件,按照BGR的顺序存储每个像素的颜色值,一个像素所有的颜色分量存完后才开始存下一个像素的颜色信息。也就是说,一个像素总共占有3个字节。

对于伪彩色BMP文件,位图数据是调色板的索引值。假设调色板的颜色索引有256种(8位),则各个像素占用1个字节,也就是8位BMP文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值