位图文件的哪一部分是元数据?

Dak*_*ras 3 image image-processing

我一直在修改位图文件,我得到了一些非常奇怪的结果.我想我可能会意外地改变部分元数据.哪个部分是元数据,所以我知道将它从我正在进行的二进制操作中删除?

我正在寻找一个答案,告诉我哪些字节是元数据的一部分,无论它们是在文件的开头还是结尾.元数据是指任何不属于像素的东西.

Dav*_*ann 8

简单细分

Windows Bitmap文件有两种:

  • DDB - 设备相关位图(位图版本1)
  • DIB - 设备无关位图(位图版本2-5)

DDB

DDB文件有两个部分:

  • 头/元数据
  • 像素数据

通过以下方式检测DDB文件和偏移:

  • 第一个WORD = 0x0000
  • 像素数据的偏移量始终为= 10

DIB

DIB文件有三个部分:

  • 头/元数据
  • 数据
  • 颜色配置文件(仅限第5版)

标题/元数据有三个部分

  • DIB文件信息
  • DIB图片信息
  • 颜色表

通过以下方式检测DIB文件和偏移:

  • 第一个WORD = 0x4D42
  • 像素数据的偏移量存储在字节10DWORD
  • DIB版本基于位于字节14DWORD中的标头大小
    • 版本2 = 12
    • 版本3 = 40
    • 版本4 = 108
    • 版本5 = 124
  • 如果DIB是版本5,请检查字节116处的DWORD 以获取颜色配置文件的像素数据/偏移的结束.

参考


Mar*_*som 6

文件的字节10到13 .bmp包含4字节整数,该整数是像素数据开始的偏移量.文件中偏移量之前的所有内容都是元数据,该偏移量之后或之后的所有内容都是像素数据或未使用的填充.