zoukankan      html  css  js  c++  java
  • 24/16/8位bmp图片文件头、信息头的二进制数据

    不知道第几次看这个了,今天再次看的时候 发现又回到了晕晕乎乎的感觉

    用PS新建了10*10像素的24位bmp图片,用UE打开仔细瞧瞧

    -------------------------------------------------------------以下文件头

    42 4D              BM一直不变

    78 01 00 00    图片大小

    00 00               保留为0

    00 00               保留为0

    36 00 00 00   偏移  非索引图是54 、索引图不固定
    位图文件头 共14个字节(从0计数)


    WORD bfType(第0、1字节):
    42 4d代表BM(42-B,4d-M)
    存储顺序是424d,存储的是低字节在前,高字节在后,所以程序中判断是否为BM需要反着写 


     if(header.bfType == 0x4d42) {}
    DWORD bfSize(第2、3、4、5字节):
    78 01 00 00    即0x178(十进制376)字节,右键属性中显示的整个图片文件的大小
    WORD bfReserved1(第6、7字节):
    00 00 保留字节 为0
    WORD bfReserved2(第8、9字节):
    00 00 保留字节 为0
    DWORD bfOffBits(第10、11、12、13字节):
    36 00 00 00   即0x36(十进制54),位图数据的起始位置是第54字节
    (24位图,文件信息头(14字节)和位图信息头(40字节)之后就是位图数据,没有调色板)
    -----------------------------------------------------------以下信息头

    28 00 00 00    一直不变

    0A 00 00 00    宽

    0A 00 00 00    长

    01 00                一直不变

    18 00                多少位图

    00 00 00 00    无压缩 一直不变
    42 01 00 00    像素数据大小

    20 2E 00 00   水平分辨率

    20 2E 00 00   垂直分辨率

    00 00 00 00    后两个双字用在索引图 

    00 00 00 00
    位图信息头,共40个字节


    DWORD biSize(第14、15、16、17字节)
    28 00 00 00  即0x28(十进制40),位图信息头占40字节


    LONG  biWidth(第18、19、20、21字节)
    0a 00 00 00  即0x0a(十进制10),位图的宽度是10像素


    LONG  biHeight(第22、23、24、25字节)
    0a 00 00 00  即0x0a(十进制10),位图的高度是10像素


    WORD  biPlanes(第26、27字节)
    01 00        即0x01(十进制1),目标设备级别,为1


    WORD  biBitCount(第28、29字节)
    18 00       即0x18(十进制24) 图标是24位图


    DWORD biCompression(第30,31,32,33字节)
    00 00 00 00  即十进制0 ,表示图片未压缩


    DWORD biSizeImage(第34、35、36、37字节)
    42 01 00 00 即0x00000142(十进制322) 图片中像素数据的大小(整个图片的大小减去位图
    文件头和位图信息头的大小,376-14-40=322)


    LONG biXPelsPerMeter(第38、39、40、41字节)
    20 2E 00 00 即0x00002E20(十进制11808) 位图水平分辨率,每米11808像素


    LONG biYPelsPerMeter(第42、43、44、45字节)
    20 2E 00 00 即0x00002E20(十进制11808) 位图垂直分辨率,每米11808像素


    DWORD biClrUsed(第46、47、48、49字节)
    00 00 00 00 即0,位图使用颜色表中的颜色数是0,
    DWORD biClrImportant(第50、51、52、53字节)
    00 00 00 00 即 0 位图显示过程中重要的颜色数是0

    -----------------------------------------------------------------------------------------------------补一个16位10*10的bmp文件头、信息头

    ----------------------------------以下文件头

    42 4D

    00 01 00 00 

    00 00 

    00 00

    36 00 00 00
    位图文件头 共14个字节(从0计数)


    WORD bfType(第0、1字节):
    42 4d代表BM(42-B,4d-M)
    存储顺序是424d,存储的是低字节在前,高字节在后,所以程序中判断是否为BM需要反着写 
     if(header.bfType == 0x4d42) {}


    DWORD bfSize(第2、3、4、5字节):

    00 01 00 00    即0x100(十进制256)字节,右键属性中显示的整个图片文件的大小

    WORD bfReserved1(第6、7字节):
    00 00 保留字节 为0
    WORD bfReserved2(第8、9字节):
    00 00 保留字节 为0
    DWORD bfOffBits(第10、11、12、13字节):
    36 00 00 00   即0x36(十进制54),位图数据的起始位置是第54字节
    (16位图,文件信息头(14字节)和位图信息头(40字节)之后就是位图数据,没有调色板)
    -----------------------------------------------------------以下信息头
    28 00 00 00 
    0A 00 00 00 
    0A 00 00 00 
    01 00
    10 00 
    00 00 00 00 
    CA 00 00 00 
    20 2E 00 00 
    20 2E 00 00 
    00 00 00 00 
    00 00 00 00
    位图信息头,共40个字节


    DWORD biSize(第14、15、16、17字节)
    28 00 00 00  即0x28(十进制40),位图信息头占40字节


    LONG  biWidth(第18、19、20、21字节)
    0A 00 00 00  即0x0a(十进制10),位图的宽度是10像素


    LONG  biHeight(第22、23、24、25字节)
    0A 00 00 00  即0x0a(十进制10),位图的高度是10像素


    WORD  biPlanes(第26、27字节)
    01 00        即0x01(十进制1),目标设备级别,为1


    WORD  biBitCount(第28、29字节)
    10 00       即0x0010(十进制16) 图标是16位图


    DWORD biCompression(第30,31,32,33字节)
    00 00 00 00  即十进制0 ,表示图片未压缩


    DWORD biSizeImage(第34、35、36、37字节)
    CA 00 00 00 即0x000000CA(十进制202) 图片中像素数据的大小(整个图片的大小减去位图


    文件头和位图信息头的大小,256-14-40=202)


    LONG biXPelsPerMeter(第38、39、40、41字节)
    20 2E 00 00 即0x00002E20(十进制11808) 位图水平分辨率,每米11808像素


    LONG biYPelsPerMeter(第42、43、44、45字节)
    20 2E 00 00 即0x00002E20(十进制11808) 位图垂直分辨率,每米11808像素


    DWORD biClrUsed(第46、47、48、49字节)
    00 00 00 00 即0,位图使用颜色表中的颜色数是0,
    DWORD biClrImportant(第50、51、52、53字节)
    00 00 00 00 即 0 位图显示过程中重要的颜色数是0

    ------------------------------------------------------------------------------------------------再补一个8位的10*10像素的bmp图文件头、信息头二进制

    -------------------------------------文件头

    42 4D 
    D8 00 00 00 
    00 00 
    00 00 
    5E 00 00 00 
    位图文件头 共14个字节(从0计数)
    WORD bfType(第0、1字节):
    42 4d代表BM(42-B,4d-M)
    存储顺序是424d,存储的是低字节在前,高字节在后,所以程序中判断是否为BM需要反着写 
     if(header.bfType == 0x4d42) {}


    DWORD bfSize(第2、3、4、5字节):
    D8 00 00 00     即0xD8(十进制216)字节,右键属性中显示的整个图片文件的大小


    WORD bfReserved1(第6、7字节):
    00 00 保留字节 为0
    WORD bfReserved2(第8、9字节):
    00 00 保留字节 为0
    DWORD bfOffBits(第10、11、12、13字节):
    5E 00 00 00   即0x5E(十进制94),位图数据的起始位置是第94字节
    (8位图,文件信息头(14字节)和位图信息头(40字节)之后就是调色板(40字节))
    (后面知道使用颜色表的颜色数是10,每个4字节,10*4=40=调色板大小)
    ----------------------------------------------------------- 以下信息头
    28 00 00 00 
    0A 00 00 00 
    0A 00 00 00 
    01 00 
    08 00 
    00 00 00 00 
    7A 00 00 00 
    20 2E 00 00 
    20 2E 00 00 
    0A 00 00 00 
    0A 00 00 00
    位图信息头,共40个字节


    DWORD biSize(第14、15、16、17字节)
    28 00 00 00  即0x28(十进制40),位图信息头占40字节


    LONG  biWidth(第18、19、20、21字节)
    0A 00 00 00  即0x0a(十进制10),位图的宽度是10像素


    LONG  biHeight(第22、23、24、25字节)
    0A 00 00 00  即0x0a(十进制10),位图的高度是10像素


    WORD  biPlanes(第26、27字节)
    01 00        即0x01(十进制1),目标设备级别,为1


    WORD  biBitCount(第28、29字节)
    08 00       即0x0008(十进制8) 图标是8位图


    DWORD biCompression(第30,31,32,33字节)
    00 00 00 00  即十进制0 ,表示图片未压缩


    DWORD biSizeImage(第34、35、36、37字节)
    7A 00 00 00 即0x0000007A(十进制122) 图片中像素数据的大小(整个图片的大小减去位图

    文件头和位图信息头和调色板(10*4)的大小,216-14-40-40=122)


    LONG biXPelsPerMeter(第38、39、40、41字节)
    20 2E 00 00 即0x00002E20(十进制11808) 位图水平分辨率,每米11808像素


    LONG biYPelsPerMeter(第42、43、44、45字节)
    20 2E 00 00 即0x00002E20(十进制11808) 位图垂直分辨率,每米11808像素


    DWORD biClrUsed(第46、47、48、49字节)
    0A 00 00 00   即0x0A(十进制10),位图使用颜色表中的颜色数是10,
    DWORD biClrImportant(第50、51、52、53字节)
    0A 00 00 00   即0x0A(十进制10), 位图显示过程中重要的颜色数是10

    ---------------------------------------之后是40字节调色板

  • 相关阅读:
    python中以带mixin命名的类有什么特点?
    php使用redis做缓存和使用redis保存session
    python连接hive数据库count查询慢的解决办法
    内网环境数据库查看工具使用笔记支持hive edismysql
    深入mysql的视图复习笔记
    Laravel 整合IOS苹果授权登录(JWT验证模式)
    PHP 读取PDF文件内容之PdfParser
    git发生冲突:error: Your local changes to the following files would be overwritten by merge
    PHP 创建GUID唯一标识
    Laravel 模型关联、关联查询、预加载使用实例
  • 原文地址:https://www.cnblogs.com/ezhong/p/2171455.html
Copyright © 2011-2022 走看看