3

我一直在修改位图文件,并且得到了一些非常奇怪的结果。我想我可能不小心更改了部分元数据。哪一部分是元数据,所以我知道将其排除在我正在做的二进制操作之外?

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

4

2 回答 2

10

简单故障

有两种 Windows 位图文件:

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

数据库

DDB 文件有两个部分:

  • 标头/元数据
  • 像素数据

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

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

DIB

DIB 文件包含三个部分:

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

Header/Metadata 包含三个部分

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

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

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

参考

于 2013-06-13T21:05:08.170 回答
6

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

于 2013-06-13T20:20:53.587 回答