gpt4 book ai didi

image - 如何解释 1 bpp BMP 文件中的像素阵列

转载 作者:行者123 更新时间:2023-12-02 15:30:40 24 4
gpt4 key购买 nike

在以下情况下我找不到解释像素数组的方法:我在 Windows 7 上使用 MS Paint 创建了一个 2x2 像素的 BMP 图像。将其保存为单色 BMP(我认为这意味着颜色深度为每像素 1 位的 BMP)

这是图像缩放后的样子(黑色像素,白色像素,白色像素,黑色像素) enter image description here

然后我用十六进制编辑器打开 bmp,我可以看到以下信息:

00: 424d 4600 0000 0000 0000 3e00 0000 2800  BMF.......>...(.
10: 0000 0200 0000 0200 0000 0100 0100 0000 ................
20: 0000 0800 0000 0000 0000 0000 0000 0000 ................
30: 0000 0000 0000 0000 0000 3f3f 3f00 3f00 ..........???.?.
40: 0000 4000 0000 0a ..@....

据我在维基百科文章中读到的有关 BMP 格式 ( https://en.wikipedia.org/wiki/BMP_file_format ) 的内容,这部分是像素数组:

3f00 0000 4000 0000

像素数组中的值的含义是什么? 3F值有什么特殊含义吗?

最佳答案

您发布的十六进制转储与您发布的图像不太对应。这是我得到的:

00000000 42 4D 46 00 00 00 00 00 00 00 3E 00 00 00 28 00 BMF.......>...(.
00000010 00 00 02 00 00 00 02 00 00 00 01 00 01 00 00 00 ................
00000020 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 80 00 ................
00000040 00 00 40 00 00 00 ..@...

颜色表从 0x36 开始。那里有两个 RGBQUAD。第一个 0x00000000 对应于黑色。接下来,0x00FFFFFF,对应于白色。

像素数据在此之后开始。每个像素由一位表示。尽管图像的每一行只需要两位,但每一行都与四字节边界对齐。因此第一行是 0x80000000,第二行是 0x40000000。某些应用程序可能懒得清除填充位。

行数据按字节进行解释,从每个字节的最高有效位到最低有效位。

0x8 的高位是 1 和 0,我们应该在底行看到颜色 1(白色),然后是颜色 0(黑色)。其余位将被忽略,因为它们对应于宽度超过 2 的像素,接下来的三个字节的存在只是为了确保后续行与 4 字节边界对齐。

0x4 的高位是 0 和 1,因此我们应该在下一行看到颜色 0(黑色),然后是颜色 1(白色)。和以前一样,其余位将被忽略。

在您的十六进制转储中,颜色表为黑色 (0x00000000) 和灰色 (0x003F3F3F)。没什么大不了。像素数据在第一(底部)行上具有高位 0 和 0,在第二(顶部)行上具有 0 和 1。其他位是用于填充的随机垃圾。

(0x3F 与灰度值相似的事实表明编码器可能不会费心清除在写入颜色表后重新使用的变量或寄存器。)

关于image - 如何解释 1 bpp BMP 文件中的像素阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35862660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com