详解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的倍数

时间: 2024-08-23 23:03:03

详解BMP格式的相关文章

BMP格式详解

BMP格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式.由于它可以不作任何变换地保存图像像素域的数据,因此成为我们取得RAW数据的重要来源.Windows的图形用户界面(graphical user interfaces)也在它的内建图像子系统GDI中对BMP格式提供了支持. 下面以Notepad++为分析工具,结合

CentOS 7下 iptables/netfilter使用详解(一)

一.理论部分  1.什么是防火墙? 防火墙:(英文:Firewall),隔离工具 防火墙其实就是一个组件,这个组件能够屏蔽来自于互联网,或来自于企业内部的用户的攻击操作(DDos攻击,端口扫描等等):主要目的是防范非授权的访问的!它工作于网络或主机的边缘(通信报文的进出口),对于进出本网络或主机的报文根据事先定义的检查规则做匹配检测,对于能够被规则匹配到的报文做出相应处理,时刻检查出入防火墙的所有数据包,决定拦截或是放行哪些数据包. 它需要对我们主机上的或者是网络内的所有主机上的网络通信操作做一

常见图片格式详解系列(二)---BMP位图--

BMP BMP是windows的一种图片格式,其组织方式相对简单,一个简单表示bmp文件的头结构 (BITMAPFILEHEAER)+ 一个表示图片信息的结构(BITMAPINFOHEADER)+ 一个表示调色板的结构(可选).剩下的便是存储的每一个像素点对应的R,G,B值. BITMAPFILEHEADER WORD bfType:表示文件类型,该值必须是0x424D,即字符'BM',否则便不是BMP图片.DWORD bfSize:以字节为单位,表示整个图像文件的大小.如需要添加列表可继续从左

常见图片格式详解

标明原作者信息 http://www.cnblogs.com/xiangism 做了几年有关图形.图像的工作,对图片格式算是小有经验,在此写成一文章总结下.虽然一开始并不想讲很理论的东西,但写完后发现几乎全是理论,细想一下关于图片格式的知识本身就是理论的东西,囧~~ 那就力求用最简单的方式将这些"理论"讲清楚吧. 常见的图片格式有bmp, jpg(jpeg), png, gif, webp等. 图像基本数据结构 要讲图片格式还先得从图像的基本数据结构说起.在计算机中, 图像是由一个个像

【数字图像】BMP文件格式详解

BMP文件格式详解 ------------------------------------------------------------------------------------------------------- Lena 摘录百科:BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持. BMP文件存储的是原始的BGR数据,格式非常简单,研究数字图入门必备.因为数据没有经过任何压缩,所以BMP文件都比较大.

Nginx内置变量以及日志格式变量参数详解

Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为空字符串 $uri #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html". $d

Linux上命令的使用格式和基础命令详解

一.Linux上命令的使用格式 命令行提示符详解: 用户通过终端的命令行接口来控制操作系统,登陆后如下: [[email protected] ~]# root: 当前登录的用户 @:分隔符 localhost: 当前主机的主机名,非完整格式:此处的完整格式为:localhost.localdomain [[email protected] ~]# hostname localhost.localdomain ~:用户当前所在的目录(current directory),也称为工作目录(work

格式设置详解

AxureRP 6.0以前版本的格式设置都是在右键菜单里面的,不是很方便操作,6.0版本将这个功能分到右侧面板里面,并且增加了页面级的格式设置,大大方便了操作设 置,包括增加了对手绘风格格式的默认支持,再也不需要通过加载额外的手绘组件库来完成了.AxureRP的组件和页面级的格式设置,其实就是网页设计当中 的CSS代码,只不过用图形界面实现了,这样更直观,也更好掌握,毕竟不是所有的产品设计人员都懂CSS的. 这里介绍一下各种格式设置,其实大家如果用中文版的话,是比较一目了然的,虽然汉化包里面广告

Fnt字体格式详解

cocos2d里的数字和符号基本都会用到fnt字体, 从直观的使用来说, fnt就是讲我们熟悉和0123和图片绑定起来, 在使用0123时, 直接用图片代替, 当然这个图片不可能是矢量图, 所以在游戏中就要尽量避免对fnt字体的缩放操作, 因为对mac下fnt生成软件实在是用得不爽, 于是想写一个TexturePacker的插件, 自己实现fnt格式导出, 其中fnt文件的内容详解如下, 备忘: 第一行是对字体的介绍. info face="华康海报体W12(P)" size=32 b