• QtBMP文件详细分析


    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;

  • 相关阅读:
    Java读源码之ReentrantLock(2)
    Java读源码之ReentrantLock
    Java8新特性之Stream
    Spring Cloud Contract 微服务契约测试
    Springboot + 持久层框架JOOQ
    Groovy语法糖以及DSL
    Java自定义注解
    Java8新特性之接口defualt,static方法
    Nginx + uWSGI + Python + Django构建必应高清壁纸站
    Kafka,RocketMQ,RabbitMQ部署与使用体验
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/16801834.html
Copyright © 2020-2023  润新知