首页>>科技 >>内容

bmp图像是几位,有关BMP位图的原理和解析

发布时间:2023-08-31 12:26:12编辑:温柔的背包来源:

很多朋友对bmp图像是几位,有关BMP位图的原理和解析不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

bmp图像是几位,有关BMP位图的原理和解析

1、什么是BMP? BMP是Bitmap(位图)的缩写,是Windows显示图片的基本格式。

在Windows下,任何格式的图像文件(包括视频播放)都必须转换为位图才能显示,并且各种格式的图像文件也是在位图格式的基础上采用不同的压缩算法生成的。

BMP位图可以不经过任何变换而保存图像像素域的数据,是获取RAW数据(原始数据)的重要来源。

2、 三种颜色R、G、B的像素一般我们生活中看到的很多图像以24位图像为主,每个色点都是由R、G、B三种颜色组成的。由许多这样的色点组成。

如果这三种颜色每种都用8位来表示,那么这样的图像就称为真彩色,组成图片的数据就是BMP位图的图片数据。

3、 RGB颜色通道在Windows下,RGB颜色矩阵的存储格式为BGR。 24 位BMP 图像称为真彩色图像。该位图没有调色板,每三个字节代表一个像素,分别对应R、G、B。

然后根据位数来控制位图中可以显示的颜色,它们的关系可以有以下选项:

1、位计数=1

表示位图最多有两种颜色,默认为黑色和白色,也可以自己定义这两种颜色。图像头调色板中有两个调色板条目,称为索引0 和索引1。图像数据数组中的每一位代表一个像素。如果某位为0,则使用索引0处的RGB值进行显示;如果该位为1,则使用索引1 处的RGB 值。

2、位计数=4

表示位图最多有16 种颜色。每个像素由4 位表示,这4 位用作颜色表中的条目来查找像素的颜色。

例如,如果位图中第一个字节是0x1F,则表示有两个像素,第一个像素的颜色在颜色表的第二个条目中查找,第二个像素的颜色在条目中查找16 颜色表。此时调色板中默认有16个RGB项。对应于索引0到索引15。

3、位计数=8

表示位图最多有256 种颜色。每个像素由8 位表示,这8 位用作颜色表中的条目来查找像素的颜色。

例如,如果位图中的第一个字节是0x1F,则在颜色表的条目32 中查找该像素的颜色。此时,默认情况下,调色板中会有256 个RGB 项,对应索引0 到索引255。

4、位计数=16

表示位图最多有65536 种颜色。每种颜料由16 位(2 字节)表示。这种格式称为高色彩,或增强型16 位色彩,或64K 色彩。其情况更为复杂。

当biCompression成员的值为BI_RGB时,它没有调色板。 16 位中,最低5 位代表蓝色分量,中间5 位代表绿色分量,高5 位代表红色分量。总共占用15位,最高位保留并设置为0。这种格式也称为555。

当biCompression成员的值为BI_BITFIELDS时,那么情况就复杂了。首先,原始调色板的位置被三个DWORD 变量占据,称为红色、绿色和蓝色蒙版。它们分别用来描述红、绿、蓝分量在16位中所占的位置。

5、位计数=24

这意味着位图最多有2的24次方,即大约1670万种颜色。这种位图没有调色板(bmiColors成员的大小为0)。位数组中,每3个字节代表一个像素,分别对应颜色R、G、B。

6、位计数=32

指示位图最多有232 种强力颜色。该位图的结构与16位位图结构非常相似。

当biCompression成员的值为BI_RGB时,它没有调色板,32位中的24位用于存储RGB值。顺序为:最高位——保留,红色8位,绿色8位,蓝色8位。这种格式也称为888。

当biCompression成员的值为BI_BITFIELDS时,原来调色板的位置会被三个DWORD变量占用,变成红绿蓝掩码,用来描述红绿蓝分量的位置32 位。

4、BMP位图信息BMP位图信息主要包括:位图文件头、位图信息头、位图数据,它们的基本概述如下:

1)bmp文件头(bmp file header):提供文件的格式、大小等信息

2)位图信息头(位图信息):提供图像数据的大小、位平面数量、压缩方式、颜色索引等信息

3)调色板(color Palette):可选,比如用索引来表示图像,调色板就是索引与其对应颜色的映射表

3)位图数据(bitmap data):是图像数据

5、 BMP位图的C语言代码分析我们知道一张BMP位图包含几部分内容信息,大致如下图所示:

从图中我们可以分析,如果想要获取一张位图的完整信息,需要分别获取文件信息头、位图信息头、位图的RGB颜色数据。下面简单演示一些获取BMP位图信息的简单演示代码。

(1)文件信息头

文件信息头主要存储包括bmp文件的标识、大小等信息。

获取文件信息头的数据结构可以如下:

typedef struct BMP_FILE_HEADER{WORD bType; //文件标识符DWORD bSize; //文件大小WORD bReserved1; //保留值,必须设置为0 WORD bReserved2; //保留值,必须设置为0 DWORD bOffset; //文件头末尾到图像数据位开头的偏移量, //表示文件头开头到实际图像数据的字节偏移//因为位图信息头和调色板的长度取决于不同情况而有所不同//所以可以使用这个偏移值来快速从文件中读取in-bit数据} BMPFILEHEADER; //这个14字节结构分析如下:

(2) 位图信息头

位图信息头主要存储位图的图像数据大小、位平面数量、压缩方式、颜色索引等信息。

位图信息头的数据结构定义如下:

typedef struct BMP_INFO{DWORD bInfoSize; //信息头的大小DWORD bWidth; //图像的宽度DWORD bHeight; //图像的高度。如果该值为正数,则图像反转。如果该值为负数,则表示图像为正。 WORD bPlanes; //图像的位平面数,其值将始终设置为1 WORD bBitCount; //每个像素的位数,这里是24位DWORD bCompression; //压缩类型DWORD bmpImageSize; //图像的大小,以字节为单位DWORD bXPelsPerMeter; //水平分辨率DWORD bYPelsPerMeter; //垂直分辨率DWORD bClrUsed; //位图实际使用的颜色表中颜色索引的数量(如果设置为0,则表示所有Palette项) DWORD bClrImportant; //对图像显示有重要影响的颜色索引数量。如果为0,则表示都很重要} BMPINF; //这个40字节结构分析如下:

(3) RGB颜色数组

RGB颜色数组指的是BMP位图的数据,它是整个图片的最终显示效果。

以上知识分享希望能够帮助到大家!