【问题标题】:Understanding .bmp file了解 .bmp 文件
【发布时间】:2015-11-02 17:46:10
【问题描述】:

我有一个 .bmp 文件

我有点明白也有点不明白。我知道前 14 个字节是我的 Bitmapfileheader。我还知道我的 Bitmapinfoheader 也包含有关位图的信息,并且大约 40 字节大(在版本 3 中)。

我不明白的是,信息是如何存储在那里的。 我有这张图片:

为什么所有颜色信息都存储在“FF”中?我知道“00”是“垃圾字节”。我不明白的是,为什么“FF”里什么都有?!

此外,我不明白那是什么类型的“编码”? 42 4D 等于做“BM”。那是什么?如何将我看到的内容翻译成颜色、字母或数字?!

在这种情况下我能读到什么:

位图文件头

前 2 个字节。 BM 如果是 .bmp 文件:42 4D = BM(但是 42 4D 转换为 BM)

下一个 4 字节:位图的大小。 BA 01 00 00。不知道应该是什么尺寸。

接下来的 4 个字节:保留的内容。

Next 4 Bytes: Offset(不太明白)

位图信息标题

接下来的 4 字节:位图信息头的大小。 6C 00 00 00 在这里。

接下来的 4 个字节:.bmp 的宽度。 0A 00 00 00。我知道自从我创建该文件以来,它必须是 10px。

接下来的 4 个字节:.bmp 的高度。 0A 00 00 00。我知道自从我创建该文件以来,它必须是 10px。

接下来的 2 个字节:来自另一种文件格式的内容。

接下来的两个字节:颜色深度。 18 00 00 00。我以为只能是1,2,4,8,16,24,32?

【问题讨论】:

  • BMP 文件有不同的子格式。但是标题中会有多少颜色级别等参数。您是否仔细研究了所有标题参数以及它们的含义和暗示其余数据的表示方式?
  • @lurker 我添加了一些信息
  • 字节顺序是小端。所以BA 01 00 00 是十六进制的000001BA,也就是 442(十进制)。任何表示大小或其他单个值(不是像素)的多字节值都需要以这种方式解释。第二个示例中的颜色深度是十六进制 00000018,即 24(十进制)位。在您的第二个示例中,标题的大小也是十六进制 0000006C,或十进制 108。
  • @lurker 太棒了,谢谢。我对所有这些东西都很陌生,不知道如何开始。到处都有这么多的信息。我现在将从基本的数字系统开始。我将如何解释颜色呢?!只有FFs?!
  • 你给出的链接详细解释了如何区分垃圾字节,请仔细阅读。

标签: image bitmap bitmapimage bmp


【解决方案1】:

您看到“42 4D”的前 2 个字节信息就是我们所说的幻数。它们是文件的签名,42 4d 是二进制 01000010 01001101 的十六进制表示法。 每个文件都有一个,.jpg,.gif。你懂的。

这是一张图片,说明了 54 字节(24 位 BMP)的 BMP 完整标头。

BMP Header

BMP的总大小是通过header的大小+ BMP.width x BMP.height * 3(红色1个字节,绿色1个字节,蓝色1个字节-在8bits信息的情况下)每个通道)+ 填充(如果存在)。

您提到的垃圾字节是填充,如果每个扫描线(行)的大小不是 4 的倍数,则需要它们。

如果ffffff,则为十六进制表示的白色,即前两个红色、绿色和蓝色。 而在十进制表示中,每个通道的值都是 255,因为 2^8(8 位)-1 = 255。

希望这可以为您清除一点(非预期的双关语)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多