BMP图像格式分析
BMP图片文件详解
有一个长宽各为 200 个象素,颜色数为 16 色的彩色图,每一个象素都用 R,G,B 三个分 量表示,因为每个分量有 256 个级别,要用 8 位( bit),即一个字节(byte)来表示,所以每个象素需要用 3 个字节。整个图象要用 200*200*3, 约 120k 字节,可不是一个小数目呀! 如果我们用下面的方法, 就能省的多。 因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每 一行记录一种颜色的 R,G,B 值。这样当我们 表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例 子,如果表的第 0 行为 255,0,0(红色) ,那么当某个象素为
色时,只需要标明 0 即可。 让我们再来计算一下:16 种状态可以用 4 位(bit)表示,所以 一个象素要用半个字节。整个图象要用 200*2 00*0.5,约 20k 字节,再加上表占用的字节为 3*16=48 字节.整个占用的字节数约为前面的 1/6,省很多吧。 这 张 RGB 的 表 , 即 是 我 们 常 说 的 调 色 板 (Palette) , 另 一 种 叫 法 是 颜 色 查 找 表 LUT(LookUpTable),似乎更确切一些。Windows 位图中便用
biXPelsPerMeter 指定目标设备的水平分辨率,单位是每米的象素个数,关于分辨率的概念,我们将在打印部 分详细介绍。
biYPelsPerMeter 指定目标设备的垂直分辨率,单位同上。
biClrUsed 指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为 2 的 biBitCount 次方。
biSizeImage 指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:
BMP24位位图格式总结
图像BMP24位位图格式总结1、创建图片创建一张只有六个像素的图片(两行三列),每个像素的颜色RGB组合值如图1(示意图)所示:图12、windows系统下存储格式(使用WinHex打开)3、文件结构3.1 文件头(bmp file header),提供文件的格式、大小等信息,共14个字节,如图2所示。
图23.1.1 0-1字节(2个字节)0x42 0x4d = "BM",表示这是Windows支持的位图格式,如图3所示。
图33.1.2 2-5字节(4个字节),表示该bmp文件的大小,存储形式为图4所示,因为小端对齐形式存储,实际存储的16进制数为0x4e,转换为十进制为78,与我们直接查看此图片的属性所看到的文件大小一致。
注:对于arm,intel这种x86架构的复杂指令CPU,整数在内存中是倒着存放的,低地址放低位,高地址放高位,小端对齐,但对于unix服务器的CPU,更多是采用大端对齐的情况图43.1.3 6-9字节这是两个保留段,为0如图5所示。
图53.1.4 A-D字节如图6所示,存储数据为0x36,十进制为54,表示的意义为从文件头到位图数据需偏移54字节。
图63.2 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息,40个字节,如图7所示。
图73.2.1 0E-11字节,如图8所示,存储数据为0x28,十进制为40,表示意义为:位图信息头的大小为40个字节。
图83.2.2 12-15字节,如图9所示,存储数据为0x03,十进制为3,表示意义为:图像宽为3个像素,与我们创建的图像一致。
图93.2.3 16-19字节,如图10所示,存储数据为0x02,十进制为2,表示意义为:图像高为2个像素,与我们创建的图像一致。
图103.2.4 1A-1B字节,如图11所示,存储数据为0x01,该值总为1,表示意义为位元面数。
bmp是什么格式
bmp是什么格式BMP 是什么格式在我们日常使用电脑以及处理各种图像文件的过程中,经常会遇到各种各样的文件格式,比如 JPEG、PNG、GIF 等等。
而今天咱们要聊的是 BMP 格式。
BMP 是一种比较常见的图像文件格式,全称为 Bitmap,也就是位图。
简单来说,它就是一种用于存储图像的格式。
BMP 格式的特点之一就是它几乎不进行压缩,或者说压缩率极低。
这就意味着图像在存储时会保留大量的原始数据,从而能够提供非常高的图像质量。
因为没有经过过度的压缩处理,所以图像的细节、颜色等信息都能得到最大程度的保留。
这对于那些对图像质量要求极高的应用场景,比如专业的图像处理、打印等,是非常重要的。
从结构上来看,BMP 格式的文件通常由文件头、信息头、颜色表和图像数据这几个部分组成。
文件头包含了一些关于文件的基本信息,比如文件类型、文件大小、数据起始位置等等。
信息头则提供了关于图像的详细描述,比如图像的宽度、高度、颜色深度等。
颜色表在一些特定的 BMP 格式中存在,用于定义图像中所使用的颜色。
而图像数据部分就是实实在在存储图像每个像素的颜色值了。
BMP 格式的优点是显而易见的。
首先就是前面提到的图像质量高,因为几乎不压缩,所以不会有因为压缩而导致的图像失真或质量下降的问题。
其次,BMP 格式的结构相对简单,易于理解和处理,这对于一些需要直接对图像数据进行操作的程序来说是很方便的。
然而,BMP 格式也有一些明显的缺点。
由于不压缩或者压缩率低,导致文件体积通常较大。
想象一下,一张高分辨率的 BMP 图像可能会占用几十兆甚至上百兆的存储空间,这在网络传输或者存储空间有限的情况下就会带来很大的不便。
在实际应用中,BMP 格式虽然不常直接用于网络上的图像展示或者一般的图像存储,但在某些特定的领域还是有其用武之地的。
比如说,在一些操作系统的界面元素中,或者在一些早期的游戏和程序中,可能会使用 BMP 格式的图像。
另外,对于一些需要进行图像编辑和处理的专业软件,也会支持BMP 格式的导入和导出,方便用户在处理过程中保持图像的高质量。
BMP图片格式
BMP图片格式简介:BMP是一种与硬件设备无关的图像文件格式,使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。
BMP文件的图像深度可选lbit、4bit、8bit及24bit。
BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
文件结构:典型的BMP图像文件由四部分组成:1:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。
位图的类型:位图一共有两种类型,即:设备相关位图(DDB)和设备无关位图(DIB)。
DDB位图在早期的Windows系统(Windows 3.0以前)中是很普遍的,事实上它也是唯一的。
然而,随着显示器制造技术的进步,以及显示设备的多样化,DDB位图的一些固有的问题开始浮现出来了。
比如,它不能够存储(或者说获取)创建这张图片的原始设备的分辨率,这样,应用程序就不能快速的判断客户机的显示设备是否适合显示这张图片。
为了解决这一难题,微软创建了DIB位图格式。
设备无关位图 (Device-Independent Bitmap)DIB位图包含下列的颜色和尺寸信息:*原始设备(即创建图片的设备)的颜色格式。
*原始设备的分辨率。
*原始设备的调色板*一个位数组,由红、绿、蓝(RGB)三个值代表一个像素。
*一个数组压缩标志,用于表明数据的压缩方案(如果需要的话)。
bmp的知识点
bmp的知识点BMP的知识点BMP(Bitmap)是一种图像文件格式,它以像素为基本单位来描述图像。
下面将介绍BMP文件的结构、特点以及常见的应用。
一、BMP文件结构BMP文件由文件头、位图信息头、调色板和图像数据组成。
1. 文件头(14字节):包含文件类型(2字节)、文件大小(4字节)、保留字段(4字节)和图像数据偏移量(4字节)等信息。
2. 位图信息头:包含位图信息头大小(4字节)、图像宽度(4字节)、图像高度(4字节)、颜色平面数(2字节)、每个像素所占位数(2字节)等信息。
3. 调色板(可选):用于存储图像的颜色信息,包括调色板项数、颜色索引和颜色值等。
4. 图像数据:按行存储的像素数据,每个像素用指定的位数来表示。
二、BMP文件特点1. BMP文件格式简单,易于解析和处理,适用于各种平台和应用程序。
2. BMP文件支持多种色彩深度,如1位、4位、8位、16位、24位和32位等,可以满足不同图像质量和存储空间需求。
3. BMP文件保留了图像的原始数据,不进行压缩,因此不会损失图像的质量,但文件大小相对较大。
4. BMP文件支持灰度图像和彩色图像,灰度图像每个像素只有一个亮度值,彩色图像每个像素有红、绿、蓝三个分量的值。
三、BMP文件的应用1. 图像处理:BMP文件是常用的图像处理格式,可以通过读取、修改和保存BMP文件来实现各种图像处理操作,如图像旋转、缩放、灰度化、边缘检测等。
2. 图像显示:BMP文件可以被各种图像显示软件和设备所支持,如画图工具、图片浏览器、数码相框、打印机等。
3. 图像转换:BMP文件可以通过转换工具将其转换为其他图像格式,如JPEG、PNG、GIF等,以满足不同应用场景的需求。
4. 图像分析:BMP文件中的像素数据可以被提取和分析,用于图像处理算法的开发、图像识别和图像分析等领域。
5. 图像存储:BMP文件可以作为图像的原始存储格式,用于长期保存和备份,以保证图像质量和数据的完整性。
BMP图象格式简介
BMP图像格式简介BMP文件由文件头(包括BITMAPFILEHEADER和BITMAPINFOHEADER),调色板(PALETTE)以及图像数据(DA TA)构成。
1.文件头:共计54Byte(以下简记为B,b代表bit)包含两个部分,第一是包含BMP文件类型,大小,打印格式,称为BITMAPFILEHEADER,定义如下:偏移量:0~13,共计14Btypedef struct tagBITMAPFILEHEADER{WORD bftype; //数据地址为0,类型unsigned char,内容‘BM’,表明图像格式DWORD bfsize; //数据地址为2,类型unsigned long,以字节为单位定义图像文件的大小WORD bfReserved1; //数据地址为6,类型unsigned int,保留字WORD bfReserved2; //数据地址为8,类型unsigned int,保留字DWORD bfoffBits; //数据地址为10,类型unsigned long,以字节为单位指示图像数据在文件中的起始地址,即图像数据相对文件头的偏移量}第二部分说明位图的大小等数据,定义如下:偏移量14~53:共计40Btypedef struct tagBITMAPINFOHEADER{DWORD bisize; //数据地址为14,类型unsigned long,以字节为单位指示本结构(BITMAPINFOHEADER)的存储容量,固定为40/28H。
(有改动,最好读取具体的值,而不要直接使用定值。
)DWORD biwidth; //数据地址为18,类型unsigned long,以象素为单位给出BMP图像的宽DWORD biheight; //数据地址为22,类型unsigned long,以象素为单位给出BMP图像的高WORD biplants; //数据地址为26,类型unsigned int,代表目标设备的平面数目为1WORD bibitcount; //数据地址为28,类型unsigned int,确定每个象素所需位数,单色取1,16色取4,256色取8,真彩取24DWORD bicompression; //数据地址为30,类型unsigned long,表明是否压缩DWORD bisizeimage; //数据地址为34,类型unsigned long,以字节为单位给出BMP类图像数据占有空间大小,未压缩图像取为0(不一定)DWORD bixpeispermeter; //数据地址为38,类型unsigned long,垂直分辨率DWORD biypeispermeter; //数据地址为42,类型unsigned long,水平分辨率DWORD biclrused; //数据地址为46,类型unsigned long,位图使用颜色数DWORD biclrimportant; //数据地址为50,类型unsigned long,位图使用重要颜色数}2.调色板调色板存在于256色(8位),16色(4位)和单色(1位)图像中,真彩(24位)图像没有调色板。
BMP格式解析
BMP格式解析⼀、介绍 BMP⽂件格式,⼜称为位图,是Windows系统中⼴泛使⽤的图像⽂件格式。
BMP⽂件的数据分为四个部分:bmp⽂件头(bmp file header):提供⽂件的格式、⼤⼩等信息位图信息头(bitmap information):提供图像数据的尺⼨、位平⾯数、压缩⽅式、颜⾊索引等信息调⾊板(color palette):可选,如使⽤索引来表⽰图像,调⾊板就是索引与其对应的颜⾊的映射表位图数据(bitmap data):图像数据⼆、代码⽰例#include <unistd.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>struct bmp_header{unsigned short type; //⽂件类型unsigned int total_size; //整个位图⼤⼩,头部 + 图像数据单位字节unsigned short reserved1;unsigned short reserved2;unsigned int valid_offset; //图像数据偏移量} __attribute__((packed));struct bmp_info{unsigned int info_size; //该结构体⼤⼩,固定40字节unsigned int bmp_width; //图⽚宽度unsigned int bmp_height; //图⽚⾼度unsigned short planes; //总是1unsigned short bitcount; //像素多少位表⽰unsigned int compression; // 0:BI_RGB 不压缩; ......unsigned int img_size; //图像有效数据⼤⼩,单位字节int x_pix_meter; //⽔平分辨率,像素/⽶表⽰int y_pix_meter; //垂直分辨率,像素/⽶表⽰unsigned int color_used; //位图实际使⽤彩⾊表中的颜⾊索引数,⼀般0unsigned int color_mportants; //color_used 上⾯使⽤的索引值重要数, 0表⽰都重要}__attribute__((packed));int bmp_analyze(unsigned char *path){int fd = -1, i;struct bmp_header f_header;struct bmp_info f_info;//打开bmp图⽚fd = open(path, O_RDONLY);if (fd < 0) {printf("open %s error.\n", path);return -1;}//读取⽂件头信息read(fd, &f_header, sizeof(struct bmp_header));printf("type:0x%x(%c%c)\n", f_header.type, f_header.type&0xff, (f_header.type>>8)&0xff);printf("total_size:%d\n", f_header.total_size);printf("reserved1:%d\n", f_header.reserved1);printf("reserved2:%d\n", f_header.reserved2);printf("valid_offset:%d\n", f_header.valid_offset);read(fd, &f_info, sizeof(struct bmp_info));printf("info_size:%d\n", f__size);printf("bmp_width:%d\n", abs(f_info.bmp_width));printf("bmp_height:%d\n", abs(f_info.bmp_height));printf("planes:%d\n", f_info.planes);printf("bitcount:%d\n", f_info.bitcount);printf("compression:%d\n", f_pression);printf("img_size:%d\n", f_info.img_size);printf("x_pix_meter:%d\n", f_info.x_pix_meter);printf("y_pix_meter:%d\n", f_info.y_pix_meter);printf("color_used:%d\n", f_info.color_used);printf("color_mportants:%d\n", f_info.color_mportants);//关闭打开的⽂件close(fd);return0;}int main(int argc, char **argv){unsigned char *path = argv[1];if(path == NULL) {printf("invalid file path \n");exit(-1);} else {printf("read bmp file: %s\n", path); }bmp_analyze(path);return0;}三、效果./a.out 24x32_3.bmpread bmp file: 24x32_3.bmptype:0x4d42(BM)total_size:3126reserved1:0reserved2:0valid_offset:54info_size:40bmp_width:24bmp_height:32planes:1bitcount:32compression:0img_size:3072x_pix_meter:2834y_pix_meter:2834color_used:0color_mportants:0四、附件解析 链接:注意格式是ARGB8888,只不过⼩端存储(低字节放在低地址),图⽚数据⼤⼩ 24*32*4字节 = 3072,加上头部 14 + 40 = 3126 字节后续会使⽤该BMP图⽚打⽔印在YUV上:。
bmp的常见知识
bmp的常见知识BMP的常见知识一、BMP格式简介BMP(Bitmap)是一种无损的图像文件格式,它以像素点的颜色信息来描述图像。
BMP格式最早由Microsoft公司在Windows操作系统中使用,并得到了广泛的应用。
BMP格式的文件通常以".bmp"为后缀名。
二、BMP格式特点1. 色彩深度:BMP格式支持多种色彩深度,包括1位、4位、8位、16位、24位和32位。
色彩深度越高,图像的颜色表现能力就越强。
2. 像素点存储:BMP格式将每个像素点的颜色信息存储在文件中,每个像素点的颜色占用的字节数根据色彩深度而定。
3. 文件大小:由于BMP格式是无损压缩的,因此文件大小相对较大。
尤其是在图像分辨率较高、色彩深度较大的情况下,文件大小会更加庞大。
4. 支持透明色:BMP格式支持透明色的设置,使得图像可以在不同背景下进行显示。
三、BMP格式的优缺点1. 优点:- 图像质量高:BMP格式文件保存的是原始图像数据,不进行任何压缩,因此图像质量非常高,不会损失细节。
- 跨平台兼容性好:BMP格式是一种通用格式,在不同的操作系统和软件中都可以打开和编辑。
- 支持透明色:BMP格式支持透明色的设置,方便图像的叠加和合成。
2. 缺点:- 文件大小较大:由于BMP格式不进行任何压缩,文件大小相对较大,占用存储空间较多。
- 不支持动画和多帧图像:BMP格式只能保存单帧静态图像,不支持动画和多帧图像的存储。
四、BMP格式与其他图像格式的比较1. 与JPEG格式比较:- 图像质量:BMP格式保存的是原始图像数据,不会损失图像质量,而JPEG格式是有损压缩的,会损失一定的图像细节。
- 文件大小:BMP格式文件较大,而JPEG格式通过压缩可以显著减小文件大小。
- 应用场景:BMP格式适用于对图像质量要求较高的场景,如印刷、设计等;JPEG格式适用于在存储和传输过程中需要减小文件大小的场景,如网页、电子邮件等。
bmp原理
bmp原理
BMP(Bitmap)是一种无压缩的图像文件格式,常用于计算
机图形领域。
它的原理是将图像数据以像素阵列的形式存储并按照一定的排列顺序来表示图像。
BMP图像文件由文件头和图像数据两个部分组成。
文件头包
含了一些必要的信息,如文件类型、文件大小、图像的宽度和高度等。
图像数据部分则是按照像素阵列的形式存储实际的图像内容。
在BMP中,每个像素都是由RGB(红绿蓝)三个颜色通道组
成的,每个通道的取值范围为0~255。
通过对这三个通道的不
同取值组合,可以得到不同颜色的像素点,从而生成整个图像。
BMP图像文件按照一定的排列方式来存储像素数据。
常见的
排列方式有横向排列(从左到右、从上到下)和纵向排列(从上到下、从左到右)两种。
横向排列方式是按照逐行的顺序将像素数据存储,而纵向排列方式则是先将每列的像素数据存储,再按照列的顺序将它们组合起来。
BMP图像文件的优点是无损压缩,即图像质量不会因为文件
大小的减小而受到影响。
但是它的文件体积较大,不适合在网络传输中使用。
同时它也不支持透明度,所以在一些需要透明效果的应用场景中不太适用。
除此之外,还有一些衍生的BMP格式,如ICO(图标文件)、CUR(光标文件)等,它们在BMP的基础上增加了一些特殊
的功能和数据结构。
总体来说,BMP文件格式在某些特定的应用场景中仍然具有一定的价值和意义。
【转载】BMP图像文件格式
【转载】BMP图像文件格式***********************(推荐指数:)BMP图像文件格式是微软公司为其Windows环境设置的标准图像格式,而且 Windows系统软件中还同时内含了一系列支持BMP图像处理的API函数,随着Windows 在世界范围内的不断普及,BMP文件格式无疑也已经成为PC机上的流行图像文件格式。
它的主要特点可以概括为:文件结构与PCX文件格式类似,每个文件只能存放一幅图像;图像数据是否采用压缩方式存放,取决于文件的大小与格式,即压缩处理成为图像文件的一个选项,用户可以根据需要进行选择。
其中,非压缩格式是BMP图像文件所采用的一种通用格式。
但是,如果用户确定将BMP文件格式压缩处理,则Windows设计了两种压缩方式:如果图像为16色模式,则采用RLE4压缩方式,若图像为256色模式,则采用RLE8压缩方式。
同时,BMP图像文件格式可以存储单色、16色、256色以及真彩色四种图像数据,,其数据的排列顺序与一般文件不同,它以图像的左下角为起点存储图像,而不是以图像的左上角为起点;而且BMP图像文件格式中还存在另外一个与众不同的特点,即其调色板数据所采用的数据结构中,红、绿、蓝三种基色数据的排列顺序也恰好与其它图像文件格式相反。
总之,BMP图像文件格式拥有许多适合于Windows环境的新特色,而且随着Windows版本的不断更新,微软公司也在不断改进其BMP图像文件格式,例如:当前BMP 图像文件版本中允许采用32位颜色表,而且针对32位Windows 的产生,相应的API函数也在不断地报陈出新,这些无疑都同时促成了BMP文件格式的不断风靡。
但由于BMP文件格式只适合于Windows上的应用软件,而对于DOS环境中的各种应用软件则无法提供相应的支持手段,因此这无疑是阻碍BMP文件格式的流通程度超过PCX文件格式的一个重要因素。
Windows中定义了两种位图文件类型,即一般位图文件格式与设备无关位图文件格式。
图像文件格式BMP文件格式详解
BMP文件格式BMP文件格式是Microsoft Windows下最常见的图像文件格式之一,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大;BMP 文件的图像深度可选lbit、4bit、8bit及24bit;BMP文件存储数据时,图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;另外一个需要关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数;由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像都支持BMP图像格式;典型的BMP文件由四部分组成:1、位图头文件数据结构主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;2、信息数据结构包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息;3、包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,既图像的每个像素用24个比特来表示,文件中就没有这一块信息,也就不需要操作调色板;4、位图数据记录了位图的每一个像素值或该对应像素的颜色表的索引值,图像记录顺序是在扫描行内是从左到右, 扫描行之间是从下到上;这种格式我们又称为Bottom_Up位图,当然与之相对的还有Up_Down形式的位图,它的记录顺序是从上到下的,对于这种形式的位图,也不存在压缩形式;BMP文件结构位图文件bitmap file, BMP格式是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式; 以后的BMP格式与显示设备无关,因此把这种BMP格式称为设备无关位图Device Independentbit Bitmap , DIB格式, Windows能够在任何类型的显示设备上显示BMP位图;BMP位图默认的文件扩展名是bmp;1、文件结构位图文件可看成由4个部分组成:位图文件头Bitmap-File、位图信息头Bitmap-Information Header、彩色表Color Table和定义位图的字节阵列,它们的名称和符号如下表1所示:2、位图文件结构可综合在下表中:3、结构详解1位图文件头:它包含有关于文件类型、文件大小和存放位置等信息,在Windows 以上版本的位图文件中用BITMSPFILEHEADER结构体来定义;位图文件头包含了图像类型、图像大小、图像数据存放地址和两个保留未使用的字段;BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息;其结构定义如下:typedef struct tagBITMAPFILEHEADER{WORD bfType; mp格式支持32位色DWORD biCompression; // 位图压缩类型,必须是0不压缩,// 1BI_RLE8压缩类型或2BI_RLE4压缩类型之一DWORD biSizeImage; // 位图的大小,以字节为单位LONG biXPelsPerMeter; // 位图水平分辨率,每米像素数LONG biYPelsPerMeter; // 位图垂直分辨率,每米像素数DWORD biClrUsed; // 位图实际使用的颜色表中的颜色数DWORD biClrImportant; // 位图显示过程中重要的颜色数} BITMAPINFOHEADER; //该结构占据40个字节它由位图信息头和彩色表组成,前者用BITMAPINFOHEADER结构体定义,后者用RGBQUAD结构体定义;1彩色表的定位:应用程序进行彩色表的定位时,可使用存储在biSize成员中的信息来查找在BITMAPINFO结构体中的彩色表;2biBitCount:biBitCount=1表示位图最多有两种颜色,黑色和白色;图像数据阵列中的每一位表示一个pixel:biBiCount=4表示位图最多有16种颜色;每个像素用场bit表示,交用这4bit 作为彩色表的表项来查找该像素的颜色;3ClrUsed:BITMAPINFOHEADER结构中的成员ClrUsed指定实际使用的颜色数目;48bit/pixel的图像数据压缩:BI_RLE8 8bit/pixel的RLE压缩编码,可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式可在同一幅图中的任何地方使用;编码方式由此及彼个字节组成,第一个字节指定使用相同颜色的像素数目,第二个字节指字使用的颜色索引;此外,这个字节对中的第一个字节可设置为0,联合使用第二个字节的值表示:●第二个字节的值为0 行的结束●第二个字节的值为1 图像结束●第二个字节的值为2 其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量绝对方式第一个字节设置为0,而第二个字节设置为03h~0FFh之间的一个值;在这种方式中,第二个字节表示跟在这个字节后面的字节数,每个字节包含单个像素的颜色索引;5每个像素为4位的图像数据压缩:BI_RLE4 每个像素为4位的RLE压缩编码,同样也可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式也可在同一幅图中的任何地方使用;编码方式由2个字节组成,第一个字节指定像素数目,第二个字节包含两种颜色索引;绝对方式这个字节对中的第一个字节设置为0,第二个字节包含有颜色索引数,其后续字节包含有颜色索引,颜色索引存放在该字节的高、低4位中,一个颜色索引对应一个像素;BI_RLE4也同样联合使用第二个字节中的值表示:●第二个字节的值为0 行的结束●第二个字节的值为1 图像结束●第二个字节的值为2 其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量3彩色表:包含的元素与位图所具有的颜色数相同,像素的颜色用RGBQUAD结构来定义;彩色表中的颜色按颜色的重要性排序,这可辅助显示驱动程序为不能显示足够多颜色数的显示设备显示彩色图像;颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色;RGBQUAD结构的定义如下:typedef struct tagRGBQUAD {BYTE rgbBlue; // 蓝色的亮度值范围为0-255BYTE rgbGreen; // 绿色的亮度值范围为0-255BYTE rgbRed; // 红色的亮度值范围为0-255BYTE rgbReserved; // 保留,必须为0} RGBQUAD;彩色表/调色板color table是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引;可以将调色板想象成一个数组,每个数组元素的大小为4字节,假设有一256色的BMP图像的调色板数据为:调色板0=黑、调色板1=白、调色板2=红、调色板3=蓝…调色板255=黄图像数据01 00 02 FF表示调用调色板1、调色板0、调色板2和调色板255中的数据来显示图像颜色;每个调色板的大小为4字节,按蓝、绿、红存储一个颜色值;4位图数据:紧跟在彩色表之后的是图像数据字节阵列;图像的每一扫描行由表示图像像素的连续的字节组成,每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度;位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当biBitCount=8 时,1个像素占1个字节;当biBitCount=24时,1个像素占3个字节,此时图像为真彩色图像;当图像不是为真彩色时,图像文件中包含颜色表,位图的数据表示对应像素点在颜色表中相应的索引值,当为真彩色时,每一个像素用三个字节表示图像相应像素点彩色值,每个字节分别对应R、G、B分量的值,这时候图像文件中没有颜色表;上面我已经讲过了,Windows规定图像文件中一个扫描行所占的字节数必须是4的倍数即以字为单位,不足的以0填充,图像文件中一个扫描行所占的字节数计算方法:DataSizePerLine = biWidth biBitCount + 31 / 8;// 一个扫描行所占的字节数位图数据的大小按下式计算不压缩情况下:DataSize = DataSizePerLine biHeight;。
各种图片格式详解(BMP,JPEG,GIF,TTF,PSD等等)
一、BMP图像文件格式
BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
优点:BMP 支持 1 位到 24 位颜色深度。
BMP 格式与现有 Windows 程序(尤其是较旧的程序)广泛兼容。
缺点: BMP 不支持压缩,这会造成文件非常大。 BMP 文件不受 Web 浏览器支持。
二、 PCX图像文件格式
PCX这种图像文件的形成是有一个发展过程的。最先的PCX雏形是出现在ZSOFT公司推出的名叫PC PAINBRUSH的用于绘画的商业软件包中。以后,微软公司将其移植到 Windows环境中,成为Windows系统中一个子功能。先在微软的Windows3.1中广泛应用,随着Windows的流行、升级,加之其强大的图像处理能力,使PCX同GIF、TIFF、BMP图像文件格式一起,被越来越多的图形图像软件工具所支持,也越来越得到人们的重视。
九、SVG格式
SVG是可缩放的矢量图形格式。它是一种开放标准的矢量图形语言,可任意放大图形显示,边缘异常清晰,文字在SVG图像中保留可和可搜寻的状态,没有字体的限制,生成的文件很小,下载很快,十分适合用于设计高分辨率的Web图形页面。
十、PSD文件格式
这是Photoshop图像处理软件的专用文件格式,文件扩展名是.psd,可以支持图层、通道、蒙板和不同色彩模式的各种图像特征,是一种非压缩的原始文件保存格式。扫描仪不能直接生成该种格式的文件。PSD文件有时容量会很大,但由于可以保留所有原始信息,在图像处理中对于尚未制作完成的图像,选用 PSD格式保存是最佳的选择。
BMP是什么格式?BMP文件特点及打开方式
BMP是一种位图文件格式,也叫做设备无关位图格式(DIB),是由微软公司开发的一种图片文件格式。
BMP格式文件保存了每个像素点的RGB值,图像保留了细节和颜色信息,但是会占用较大的存储空间,不利于网络传输和储存。
BMP格式通常用于Windows系统中的图标、位图等图形文件的存储。
BMP格式的特点1. BMP格式采用无损压缩算法,保存了每个像素点的颜色信息,通过像素点映射可以对图像还原出非常精细的细节信息。
2. BMP格式支持多种颜色模式,能够处理24位色、16位色、8位色以及黑白两种颜色模式的图像。
3. BMP格式文件由于保存了每个像素点的信息,所以文件较大,在存储和传输时会占用较大的带宽和存储空间。
4. BMP格式文件结构比较简单,只需要保存每个像素点的信息、文件头和文件信息头即可,因此可以被多种不同类型的应用程序轻松支持和读取。
BMP格式是一种可靠、简单、易于编辑和处理的文件格式,但同时也具有文件大小较大的缺点。
BMP格式的优点1. BMP格式采用无损压缩算法,保存了每个像素点的颜色信息,保证了图像的质量,不损失像素的信息,更为精细得显示图像。
2. BMP格式保存的图像具有较高的色彩深度,可以保存具有更加丰富色彩的图像,更能满足高质量图片的需求。
3. BMP格式简单明了,存储图像时方便读写。
其文件结构非常简单,只需要保存每个像素点的信息、文件头和文件信息头即可,因此可以被多种不同类型的应用程序轻松支持和读取。
4. BMP格式被广泛应用于各种不同的平台和设备,特别是在Windows系统里经常使用。
无论是应用于基于Windows的PC机还是嵌入式应用在诸如ATM机端等各类设备,BMP格式都有着良好的兼容性与共通性。
综上所述,BMP格式具有不受损图像质量、高色深图像存储、简单明了以及广泛适用等优点,使得BMP格式被广泛应用于各类应用场景中。
BMP格式的缺点1. BMP格式文件通常比其他格式的图片文件要大,这意味着它对存储空间和网络传输会带来额外的负担。
常见图片格式分析-bmp,png
常见图⽚格式分析-bmp,png⼀、bmp图⽚①单⾊位图:每个像素最多可以表⽰2种颜⾊,只需要使⽤长度为1的⼆进制位来表⽰,因此每个像素占1/8byte② 16⾊位图:每个像素最多可以表⽰16种颜⾊,只需要长度为4(2^4=16)的⼆进制表⽰,每个像素占1/2byte③ 256⾊位图:每个像素最多表⽰256种颜⾊,需要长度为8(2^8=256)的⼆进制表⽰,每个像素占1byte④ 24位位图:即RGB三原⾊位图,每个像素占24位,3个byteps:⼀字节(1byte)=8位(8bit)图形的⼤⼩ = 图⽚的总像素*每个像素的⼤⼩,图⽚的总像素 = 图⽚长*⾼bmp图⽚格式:①位图⽂件头bmfh(占14个字节):数据结构如下:typedef struct tagBITMAPFILEHEADER {WORD bfType; //类型名,字符串“BM”,占2个字节,DWORD bfSize; //⽂件⼤⼩,占4个字节WORD bfReserved1; //保留字,占2个字节WORD bfReserved2; //保留字,占2个字节DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和,占4个字节} BITMAPFILEHEADER;②位图信息头bmih(占40个字节)typedef struct tagBITMAPINFOHEADER{DWORD biSize; //指定此结构体的长度,0x28LONG biWidth; //位图宽LONG biHeight; //位图⾼.为正,表⽰从下往上存储,左下⾓是起点。
为负,表⽰从上往下储存,左上⾓是起点 WORD biPlanes; //平⾯数,为1WORD biBitCount //采⽤颜⾊位数,可以是1,2,4,8,16,24,32DWORD biCompression; //压缩⽅式,可以是0,1,2,其中0表⽰不压缩DWORD biSizeImage; //实际位图数据占⽤的字节数LONG biXPelsPerMeter; //X⽅向分辨率LONG biYPelsPerMeter; //Y⽅向分辨率DWORD biClrUsed; //使⽤的颜⾊数,如果为0,则表⽰默认值(2^颜⾊位数)DWORD biClrImportant; //重要颜⾊数,如果为0,则表⽰所有颜⾊都是重要的} BITMAPINFOHEADER;③彩⾊表aColors单⾊位图彩⾊表占8字节16⾊位图彩⾊表占64字节256⾊位图彩⾊表占1024字节⼆、png图⽚png图⽚格式:由8个字节的PNG⽂件署名和数据块组成png⽂件署名域:89 50 4e 47 0d 0a 1a 0a (固定)IHDR数据块:00 00 00 0d(说明IHDR头块长度为13)49 48 44 52(IHDR的hex值)00 00 00 64(图像的宽,这⾥为100像素)00 00 00 4f(图像的⾼,这⾥为79像素)08 表⽰⾊深 02 表⽰颜⾊类型 00 预留 00 预留 00 ⾮隔⾏扫描92 eb f7 f6(CRC校验)※这⾥需要注意的是图像的宽、⾼数据,ctf题⽬经常将修改宽⾼后的图⽚作为题⽬来隐藏信息最后得有个IEND数据块,通常值为 00 00 00 00 49 45 4E 44 AE 42 60 82在IEND块后⾯添加任何的字符都对⽂件的打开造成不了影响,那我们就可以在这⾥藏⼀些数据了。
图像文件格式BMP”、“TIFF”、“JPEG”、“GIF”、“PNG”、“CDR特点
图像格式1 BMP是一种与硬件设备无关的图像文件格式,使用非常广由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows 环境中运行的图形图像软件都支持BMP图像格式。
2 jpg全名是JPEG 。
JPEG 图片以24 位颜色存储单个光栅图像。
JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。
渐近式JPEG 文件支持交错。
3 GIF就是图像交换格式(Graphics Interchange Format),它有以下几个特点:(1)GIF只支持256色以内的图像;(2)GIF采用无损压缩存储,在不影响图像质量的情况下,可以生成很小的文件;(3)它支持透明色,可以使图像浮现在背景之上;(4)GIF文件可以制作动画,这是它最突出的一个特点。
4 PNG格式图片特点如下:1、使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。
2、流式读/写性能:图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。
3、逐次逼近显示:这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。
4、透明性:这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。
5、辅助信息:这个特性可用来在图像文件中存储一些文本注释信息。
6、独立于计算机软硬件环境。
7、使用无损压缩。
5 CDR是Coreldraw自带的矢量图形格式6 TIFF:标记图像文件格式TIFF 以任何颜色深度存储单个光栅图像。
TIFF 可以被认为是印刷行业中受到支持最广的图形文件格式。
TIFF 支持可选压缩,不适用于在Web 浏览器中查看。
TIFF 格式是可扩展的格式。
这意味着程序员可以修改原始规范以添加功能或满足特定的需要。
修改规范可能会导致不同类型的TIFF 图片之间不兼容。
BMP格式详解
BMP格式详解BMP的4个组成部分:1.文件头信息块0000-0001:文件标识,为字母ASCII码“BM”。
0002-0005:文件大小。
0006-0009:保留,每字节以“00”填写。
000A-000D:记录图像数据区的起始位置。
各字节的信息依次含义为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)。
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.颜色表颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。
其中,每4字节表示一种颜色,并以B (蓝色)、G(绿色)、R(红色)、alpha(32位位图的透明度值,一般不需要)。
即首先4字节表示颜色号1的颜色,接下来表示颜色号2的颜色,依此类推。
4.图像数据区颜色表接下来位为位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,既2色图像每点占1位(8位为1字节);16色图像每点占4位(半字节);256色图像每点占8位(1字节);真彩色图像每点占24位(3 字节)。
所以,整个数据区的大小也会随之变化。
究其规律而言,可的出如下计算公式:图像数据信息大小=(图像宽度*图像高度*记录像素的位数)/8。
BMP图像数据格式详解
BMP图像数据格式详解⼀.简介BMP(Bitmap-File)图形⽂件是Windows采⽤的图形⽂件格式,在Windows环境下运⾏的所有图象处理软件都⽀持BMP图象⽂件格式。
Windows系统内部各图像绘制操作都是以BMP为基础的。
Windows 3.0以前的BMP图⽂件格式与显⽰设备有关,因此把这种BMP图象⽂件格式称为设备相关位图DDB(device-dependent bitmap)⽂件格式。
Windows 3.0以后的BMP图象⽂件与显⽰设备⽆关,因此把这种BMP图象⽂件格式称为设备⽆关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘⽂件中时,微软极⼒推荐你以DIB格式保存),⽬的是为了让Windows能够在任何类型的显⽰设备上显⽰所存储的图象。
BMP位图⽂件默认的⽂件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
⼆.BMP格式结构BMP⽂件的数据按照从⽂件头开始的先后顺序分为四个部分:◆位图⽂件头(bmp file header):提供⽂件的格式、⼤⼩等信息◆位图信息头(bitmap information):提供图像数据的尺⼨、位平⾯数、压缩⽅式、颜⾊索引等信息◆调⾊板(color palette):可选,如使⽤索引来表⽰图像,调⾊板就是索引与其对应的颜⾊的映射表◆位图数据(bitmap data):图像数据区BMP图⽚⽂件数据表如下:数据段名称⼤⼩(byte)开始地址结束地址位图⽂件头(bitmap-file header)140000h000Dh40000Eh0035h位图信息头(bitmap-informationheader)调⾊板(color table)由biBitCount决定0036h未知图⽚点阵数据(bitmap data)由图⽚⼤⼩和颜⾊定未知未知三.BMP⽂件头BMP⽂件头结构体定义如下:typedef struct tagBITMAPFILEHEADER{UINT16 bfType; //2Bytes,必须为"BM",即0x424D 才是Windows位图⽂件DWORD bfSize; //4Bytes,整个BMP⽂件的⼤⼩UINT16 bfReserved1; //2Bytes,保留,为0UINT16 bfReserved2; //2Bytes,保留,为0DWORD bfOffBits; //4Bytes,⽂件起始位置到图像像素数据的字节偏移量} BITMAPFILEHEADER;BMP⽂件头数据表如下:变量名地址偏移⼤⼩作⽤说明bfType0000h2Bytes⽂件标识符,必须为"BM",即0x424D 才是Windows位图⽂件‘BM’:Windows 3.1x, 95, NT,… ‘BA’:OS/2 Bitmap Array ‘CI’:OS/2 Color Icon ‘CP’:OS/2 Color Pointer ‘IC’:OS/2 Icon ‘PT’:OS/2 Pointer因为OS/2系统并没有被普及开,所以在编程时,你只需判断第⼀个标识“BM”就⾏bfSize0002h4Bytes整个BMP⽂件的⼤⼩(以位B为单位)bfReserved10006h2Bytes保留,必须设置为0bfReserved20008h2Bytes保留,必须设置为0bfReserved20008h2Bytes0bfOffBits000Ah4Bytes0000h开始到图像像素Bytes为四.BMP信息头BMP信息头结构体定义如下:typedef struct _tagBMP_INFOHEADER{DWORD biSize; //4Bytes,INFOHEADER结构体⼤⼩,存在其他版本I NFOHEADER,⽤作区分LONG biWidth; //4Bytes,图像宽度(以像素为单位)LONG biHeight; //4Bytes,图像⾼度,+:图像存储顺序为Bottom2Top,-:Top2Bottom WORD biPlanes; //2Bytes,图像数据平⾯,BMP存储RGB数据,因此总为1WORD biBitCount; //2Bytes,图像像素位数DWORD biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4DWORD biSizeImage; //4Bytes,4字节对齐的图像数据⼤⼩LONG biXPelsPerMeter; //4 Bytes,⽤象素/⽶表⽰的⽔平分辨率LONG biYPelsPerMeter; //4 Bytes,⽤象素/⽶表⽰的垂直分辨率DWORD biClrUsed; //4 Bytes,实际使⽤的调⾊板索引数,0:使⽤所有的调⾊板索引DWORD biClrImportant; //4 Bytes,重要的调⾊板索引数,0:所有的调⾊板索引都重要}BMP_INFOHEADER;BMP信息头数据表如下:变量名地址偏移⼤⼩作⽤说明biSize000Eh4Bytes BNP信息头即BMP_INFOHEADER结构体所需要的字节数(以字节为单位)biWidth0012h4Bytes说明图像的宽度(以像素为单位)biHeight0016h4Bytes说明图像的⾼度(以像素为单位)。
几种基本图片格式的区别与不同(bmp,jpg,png,gif,tif)
⼏种基本图⽚格式的区别与不同(bmp,jpg,png,gif,tif)Hello,我们⼜见⾯了!本⽂为的原创博客,转载请注明出处。
位图bmp/jpg/png/gif/tif我们从⽂件的⼤⼩(从⼤到⼩)上来说吧。
bmp格式bmp(bitmap)格式,标准的位图格式,缺点是完全不压缩,体积极⼤,且⼀旦压缩有可能掉颜⾊,优点是完全⽆损保存。
运⽤不多,基本不应⽤于⽹络,但是Windows系统的标准图⽚格式,(⼏乎)所有Windows看图/编辑软件应该都⽀持。
tif/tiff格式tiff(Tag Image File Format)是⼀种压缩图⽚格式,最早由Aldus和Microsoft公司⼀起开发,七⼋⼗年代就有了,但是压缩⽐很低,所以和bmp并差不了多少,同样保真度也很⾼。
现在基本上是看不到了,⽐bmp还少。
png格式PNG(Portable Network Graphics,便捷式⽹络图形),可以做到⼏乎⽆损的压缩,⽽且压缩⽐挺⾼的,⼤概是Bmp的10⼏或⼏⼗分之⼀吧,质量很⾼,⽀持透明,90年代出现,⾄今⽤途⼴泛,常⽤于Internet,和jpg和gif都是⽹络图⽚格式。
⼩编我个⼈最喜欢的图⽚格式。
jpg/jpeg格式JPEG格式由联合图像专家组(Joint Photographic Experts Group)开发,JPEG是常见的⼀种图像格式,。
JPEG⽂件的扩展名为.jpg或.jpeg,它⽤有损压缩⽅式去除冗余的图像和彩⾊数据,在获得极⾼的压缩率的同时能展现⼗分丰富⽣动的图像,即可以⽤较少的磁盘空间得到较好的图⽚质量(但稍逊⾊于png)。
gif格式GIF的全称是Graphics Interchange Format,图形交换格式,⽤于以HTML的⽅式显⽰索引彩⾊图像,在因特⽹和其他在线服务系统上得到⼴泛应⽤。
GIF是⼀种公⽤的图像⽂件格式标准,版权归Compu Serve公司所有。
压缩率⾮常⾼,但质量实在是说不出⼝啊。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BMP图像格式分析BMP图像文件格式是微软公司为其Windows环境设置的标准图像格式,而且 Windows系统软件中还同时内含了一系列支持BMP图像处理的API函数,随着Windows 在世界范围内的不断普及,BMP文件格式无疑也已经成为PC机上的流行图像文件格式。
它的主要特点可以概括为:文件结构与PCX文件格式类似,每个文件只能存放一幅图像;图像数据是否采用压缩方式存放,取决于文件的大小与格式,即压缩处理成为图像文件的一个选项,用户可以根据需要进行选择。
其中,非压缩格式是BMP图像文件所采用的一种通用格式。
但是,如果用户确定将BMP文件格式压缩处理,则Windows设计了两种压缩方式:如果图像为16色模式,则采用RLE4压缩方式,若图像为256色模式,则采用RLE8压缩方式。
同时,BMP 图像文件格式可以存储单色、16色、256色以及真彩色四种图像数据,,其数据的排列顺序与一般文件不同,它以图像的左下角为起点存储图像,而不是以图像的左上角为起点;而且BMP图像文件格式中还存在另外一个与众不同的特点,即其调色板数据所采用的数据结构中,红、绿、蓝三种基色数据的排列顺序也恰好与其它图像文件格式相反。
总之,BMP图像文件格式拥有许多适合于Windows环境的新特色,而且随着Windows版本的不断更新,微软公司也在不断改进其BMP 图像文件格式,例如:当前BMP图像文件版本中允许采用32位颜色表,而且针对32位Windows 的产生,相应的API 函数也在不断地报陈出新,这些无疑都同时促成了BMP文件格式的不断风靡。
但由于BMP文件格式只适合于Windows上的应用软件,而对于DOS环境中的各种应用软件则无法提供相应的支持手段,因此这无疑是阻碍BMP文件格式的流通程度超过PCX文件格式的一个重要因素。
Windows中定义了两种位图文件类型,即一般位图文件格式与设备无关位图文件格式。
其中,由于设备无关位图(DIB)文件格式具有更强的灵活性与完整的图像数据、压缩方式等定义。
BMP图像文件的结构可以分为如下三个部分:文件头、调色板数据以及图像数据。
其中文件头的长度为固定值54个字节;调色板数据对所有不超过256色的图像模式都需要进行设置,即使是单色图像模式也不例外,但是对于真彩色图像模式,其对应的BMP文件结构中却不存在相应调色板数据的设置信息;图像数据既可以采用一定的压缩算法进行处理,也可以不必对图像数据进行压缩处理,这不仅与图像文件的大小相关,而且也与对应的图像处理软件是否支持经过压缩处理的BMP图像文件相关。
以下将分别介绍BMP图像文件结构中的这三个重要组成部分。
特别值得注意的是:BMP 图像文件结构设计得相当简单,这无疑有利于图像文件的处理速度,但是同时也使得 BMP图像文件格式具有一定的局限性,即一个BMP图像文件只能存储一幅图像。
BMP图像文件的文件头定义Windows中将BMP图像文件的文件头分成两个数据结构,其中一个数据结构中包含BMP文件的类型、大小和打印格式等信息,称为BITMAPFILEHEADERl另外一个数据结构中则包含BMP文件的尺寸定义等信息,称为BITMAPINFOHEADERl 如果图像文件还需要调色板数据,则将其存放在文件头信息之后。
BITMAPFIlEHEADER数据结构在Windows.h中的定义为:typedef struCttagBITMAPFIlEHEADER{WORD bftype;DWORD bfsiZe:WORD bfReservedl;WORD bgReserved2:DWORD bfoffBits:}BITMAPFILEHEADER;其中,bfrype在图像文件存储空间中的数据地址为0,数据类型为unsignedchar,内容为固定值“BM”,用于标志文件格式,表示该图像文件为BMP文件。
bfsize的数据地址为2,类型为unsignedlong,它以字节为单位,定义位图文件的大小。
bfReservedl与bfReserved2的数据地址分别为6和8,数据类型则都为unsignedint,二者都是BMP文件的保留字,没有任何意义,其值必须为0.bfoffBits的数据地址为10,数据类型为unsignedlong,它以字节为单位,指示图像数据在文件内的起始地址,即图像数据针对文件头的偏移量。
BITMAPINFOHEADER数据结构用于说明位图的大小,其定义为:type struttagBITMAPINFOHEADER{DWORD biSize:DWORD biWldth;DWORD biHeight;WORD biPlanes:WORD biBitCount:DWORD biCOmpression;DWORD biSiZelmage;DWORD biXPelsPerMeter:DWORD biYPelsPerMeter:DWORD biClrUsed;DWORD biClrlmportant;}BITMAPINFOHEADER;其中,biSize的数据地址为14,数据类型为unsignedlong,它以字节为单位指定数据结构BITMAPINFOHEADER所占用的存储容量,固定值为40。
biWidth与biHeight的数据地址分别为18和22,数据类型都是unsignedlong,它们分别以像素为单位,给出该BMP 文件所描述位图的宽度与高度。
若biHeight的取值为正数,则表明位图为bottom—up类型的DIB位图,而且位图原点为左下角。
若biHeight的取值为负数,则表明位图为top—down类型的DIB位图,而且位图原点为左上角。
注意:一般位图定义中,这两个字段的取值必须为正数。
biPlanes的数据地址为26,类型为unsignedint,它代表目标设备的平面数必须为1。
biBitCount的数据地址为28,类型为utlsigned Int,它确定每个像素所需要的位数。
当图像为单色时,该字段的取值为1;当图像为16色时,该字段的取值为4;当图像为256 色时,该字段的取值为8;当图像为真彩色时,该字段的取值为24。
biCompression的数据地址为30,类型为unsignedlong,它代表bottom—up类型位图的压缩类型(注意:top—down 类型位图不能进行压缩处理),其可能取值及其含义分别为:若该字段的取值为BI—RGB,则表示文件内的图像数据没有经过压缩处理;若该字段的取值为BI—RLE8,则表示所压缩的图像数据是256色,采用的压缩方法是RLE8;若该字段的取值为BI—RLE4,则表示所压缩的图像数据是16色,采用的压缩方法是RLE4;若该字段的取值为BI—BITFIELDS,则表明图像文件内的数据没有经过压缩处理,而且颜色表由分别表示每个像素点的红、绿、蓝三原色的双字组成。
注意:BMP文件格式在处理单色或者真彩色图像时,不论图像数据多么庞大,都不对图像数据进行任何压缩处理。
biSizelmage的数据地址为34,类型为unsignedlong7它以字节为单位,给出该BMP 内图像数据占用的空间大小。
若图像文件描述BI—RGB位图,则该字段的值必须设置为0。
biXPelsPerMeter字段与biYPelsPerMeter字段的数据地址分别为38与42,类型都是 unsignedlong,它们分别以每米像素数为单位,给出位图目的设备水平以及垂直方向的分辨率;其中,应用程序可以根据biXPelsPerMeter字段的值,从源位图组中选择与当前设备特点最匹配的位图。
biCkUsed的数据地址为46,类型为unsignedlong,给出位图实际使用的颜色表中的颜色变址数。
如果该字段的取值为0,则代表本位图使用了biBitCount字段值所代表的最大颜色值,其中biBitCount字段的取值与biCompression所指定的压缩方法相关。
例如:如果图像为16色,而该字段的取值为10,则代表本位图共使用了12种颜色;如果该字段的取值非零,而且biBitCount字段的取值小于16,则该字段指定图像或者设备驱动器存取的实际颜色数。
若biBitCount字段的取值大于或者等于16,则该字段指定使Window 系统调色板达到最优性能的颜色表大小。
biChlmportant的数据地址为50,数据类型为unsignedlong,它给出位图显示过程中重要颜色的变址数。
若该字段的取值为0,则表示所有使用的颜色都是重要颜色。
调色板数据如果位图的描述还需要调色板数据,则应该在BMP文件头之后定义一个颜色表,它包含若干个表项。
其中,每一个表项定义了一种颜色,Windows将其定义为如下的 RGBQUAD结构:typedef tagRGBQUAD{BYTE rgbBlue;BYTE rgbGreen;BYTE rgbRed;BYTE rgbReserved;}RGBQUAD;注意:RGBQUAD数据结构中,增加了一个保留字段rgbReserved,它不代表任何意义,必须取固定值00同时,RGBQUAD 结构定义的颜色值中,红色、绿色与蓝色的排列顺序与一般图像文件的颜色数据排列顺序恰好相反,即:蓝色的亮度由rgbBlue字段定义、绿色的亮度由rgbGreen字段定义,红色的亮度由rgbRed字段定义。
若位图中某个像素点的颜色描述为“00,00,FF,00”,则表示该点的颜色为纯红色,而不是纯蓝色。
综上,在DIB位图文件组成中,紧随BITMAPFILEHEADER结构其后的数据结构为 BITMAPINFO,两者共同构成完整的位图文件。
Windows将BITMAPINFO结构定义为:tyPedef stmCt tagBITMAPINFO{BITMAPINFOHEADER bmiHeader:RGBQUAD bmiC010ur[1];}BITMAPINFO;其中,bmiHeader字段指向包含位图颜色格式以及大小定义的 BITMAPHEADERINFO结构。
bmiCo1our[1]字段指向RGBQUAD结构数组或者定义位图颜色值的双字数据结构,它定义了BMP图像文件的颜色表,它包含多少个表项是由 BITMAPINFOHEADER数据结构中的biBitCount字段定义的:若该字段的取值为1,则颜色表中共包含两个表项;若该字段的取值为4,则颜色表中共包含16个表项;若该字段的取值为8,则颜色表中共包含256个表项;若该字段的取值为16,而且 BITMAPINFOHEADER结构定义中指定bmiColors字段的取值为BI_RGB,则颜色表中的表项为空,位图阵列中每个字代表一个像素,字中每5位上的值代表该像素点一种基色的亮度,其中最低5位代表蓝色亮度,依次为绿色与红色,字的最高位没有任何意义。