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;
欢迎关注我,一起进步!扫描下方二维码即可加我


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2016-10-18 Android实例-实现扫描二维码并生成二维码(XE8+小米5)