Qt-BMP文件详细分析

BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式
图像分类:设备相关位图(DDB)和设备无关位图(DIB)
存储方式:采用位映射存储格式
图像特点:图像深度可选、不压缩、占用的空间大
图像深度:BMP文件的图像深度可选lbit、4bit、8bit及24bit。
扫描方式:BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

BMP格式的文件从头到尾依次是如下信息:
bmp文件头(bmp file header):共14字节;
位图信息头(bitmap information):共40字节;
调色板(color palette):可选;
位图数据;

举例:
24位图,所谓的24位图,就是说一个像素的颜色信息用24位来表示,也就是说,对于三原色BRG,每一个颜色都用以字节(8)位来表示。
除了24位图,还有1位(单色),2位(4色,CGA),4位(16色,VGA),8位(256色),16位(增强色),24位(真彩色)和32位等。
https://www.baidu.com/link?url=B3AdYxfXOjTMTbL43cVOP4cQFr-FiwBfj0I3VFQHN9UzyQ-z3C-lfT8ZeRSYAe8dow0N-reUfobn-pDSih3jrewAieH4Qtu4TcHDH7iYlWO&wd=&eqid=dad73cd300000da80000000263311acc
https://blog.csdn.net/u012877472/article/details/50272771
https://www.baidu.com/link?url=b_vkYcCCHzILkE7j9SdQplvrd8K2ZFGv0_knzKI-MCvSzmls0VRox_s-iX9OohEUQViGwc0wNMqDNeS0c1p9RsVnCEFryCfje7n5z_BH9Ka&wd=&eqid=a37a655a000010350000000263313fe9

bmp文件头包含如下信息:
bfType:2字节,文件类型;
bfSize:4字节,文件大小;
bfReserved1:2字节,保留,必须设置为0;
bfReserved2:2字节,保留,必须设置为0;
bfOffBits:4字节,从头到位图数据的偏移;

一共14字节,下面逐个解释。
0-1:bfType,表示文件类型,BMP格式的文件这两个字节是0x4D42,10进制就是19778,字符显示就是‘BM’;
2-5:bfSize,表示文件的大小,这里的是0x0004B436,十进制是308278,也就是301kb,检查文件信息,验证正确;
6-7:bfReserved1,保留位,必须设置为0;
8-9:bfReserved2,保留位,必须设置为0;
a-d:bfOffBits,4字节的偏移,表示从文件头到位图数据的偏移,这里是0x00000436,十进制是1078,后面会做验证;

位图信息头(bitmap information)
位图信息头一共40字节,包含如下内容:
biSize:4字节,信息头的大小,即40;
biWidth:4字节,以像素为单位说明图像的宽度;
biHeight:4字节,以像素为单位说明图像的高度,同时如果为正,说明位图倒立(即数据表示从图像的左下角到右上角),如果为负说明正向;
biPlanes:2字节,为目标设备说明颜色平面数,总被设置为1;
biBitCount:2字节,说明比特数/像素数,值有1、2、4、8、16、24、32;
biCompression:4字节,说明图像的压缩类型,最常用的就是0(BI_RGB),表示不压缩;
biSizeImages:4字节,说明位图数据的大小,当用BI_RGB格式时,可以设置为0;
biXPelsPerMeter:表示水平分辨率,单位是像素/米,有符号整数;
biYPelsPerMeter:表示垂直分辨率,单位是像素/米,有符号整数;
biClrUsed:说明位图使用的调色板中的颜色索引数,为0说明使用所有;
biClrImportant:说明对图像显示有重要影响的颜色索引数,为0说明都重要;

一共40字节,解释如下:
0e-11:4字节的biSize,这里是0x28,即十进制的40,验证正确;
12-15:4字节的biWidth,这里是0x00000280,即十进制的640,用像素表示图像的宽度,查看文件信息验证正确;
16-19:4字节的biHeight,这里是0x000001E0,即十进制的480,用像素表示图像的高度,查看文件信息验证正确;同时,这是一个正数,表示图像是倒立的,即图像数据是从左下角到右上角排列的;
1a-1b:2字节的biPlanes,值为0x0001;
1c-1d:2字节的biBitCount,值是0x0008,即8,表示每个像素用8位表示,一共有256个颜色;
1e-21:4字节的biCompression,值是0,即BI_RGB格式,不压缩;
22-25:4字节的biSizeImage,图像的大小,值是0x0004B000,十进制为307200,由上面的bfSize(文件大小)和bfOffBits(文件头到数据的偏移)分别是308278和1078可以得到,biSizeImage=bfSize-bfOffBits,即图像大小=文件大小-偏移量;
26-29:4字节的biXPelsPerMeter,水平分辨率,值是0x00000EC4,十进制3780;
2a-2d:4字节的biYPelsPerMeter,垂直分辨率,值是0x00000EC4,十进制3780;
2e-31:4字节的biClrUsed,使用的颜色索引数,值是0x00000100,十进制256,与1c-1d得到的结论一致;
32-35:4字节的biClrImportant,重要的颜色索引数,值是0x00000100,十进制256;

posted on 2022-10-18 10:41  疯狂delphi  阅读(312)  评论(0编辑  收藏  举报

导航