gpt4 book ai didi

c++ - 尝试逐个像素地理解位图

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:26 25 4
gpt4 key购买 nike

下面是位图中的十六进制数据

424d 46000000 0000 0000 0000 3E000000 28000000000000000000000000000000000000000000000000000000.000000.0000000000000000000000000000来010000000000来010000000000来0.000000000000000000000000000000来零000000000000000000000000000000000000000000000000来小000000.000000.00000000000000000000000000来

我需要了解所有值代表什么,尤其是像素值。这是用 mspaint 保存的位图,是单色位图。以下是我的理解/误解...其中大部分是您从 wiki 和搜索 bmp 获得的信息。这只是我试图分解我的 bmp,它在顶部有两个黑色像素,在底部有两个白色像素。

42 4d       is BM
46 00 00 00 size of entire file
00 00 reserved 1
00 00 reserved 2
3e 00 00 00 offset to where pixel data can be found

28 00 00 00 # of bytes in this header
02 00 00 00 width of bmp
02 00 00 00 height of bmp
01 00 # of planes
01 00 # of bits per pixel
00 00 00 00 compression
08 00 00 00 size of raw data in pixel array in bytes
00 00 00 00 horizontal resolution pix/m
00 00 00 00 vertical resolution pix/m
00 00 00 00 number of colors
00 00 00 00 important colors
00 00 00 00 x=1 y=2 pixel value? is supposed to be white
ff ff ff 00 x=2 y=2 pixel value? is supposed to be white
c0 00 00 00 x=1 y=1 pixel value? is supposed to be black
00 00 00 00 x=2 y=1 pixel value? is supposed to be black

最后一个像素值真的很令人困惑,我看不出它们如何等于它们应该等于的值,而且我认为 rgb 或 bgr 数据只有 3 个字节?此外,可以找到像素数据的偏移量超过位图中最后一个字节的 2 个字节......我觉得我正在解码它完全错误或其他东西。

最佳答案

00 00 00 00
ff ff ff 00

这些字节是调色板。由于您的每像素位数设置为 1,因此调色板中只能有两种颜色。第一种颜色是黑色 (00 00 00 00),第二种颜色是白色 (ff ff ff 00)。每种颜色的最后一个字节只是填充符,并且始终设置为 00

c0 00 00 00
00 00 00 00

这是实际的像素数据。每行像素都必须填充到最接近的可以包含数据的 4 个字节。所以在这里,第一行是像素的底部行,第二行是像素的顶部行(因为 BMP 像素顺序是自下而上的)。由于我们每个像素使用 1 位,因此我们应该在字节级别查看它。具体来说,第一行像素由下式给出:

1100 0000  0000 0000  0000 0000  0000 0000

由于我们在每行像素中只有两个像素,并且每个像素只有 1 位,因此只有前两位很重要。在本例中,11 指定前两个像素是调色板中的第二种颜色 (1)。现在对于第二行,我们有:

0000 0000  0000 0000  0000 0000  0000 0000

同样,我们只需要查看前两个像素,00。这意味着接下来的像素是调色板中的第一种颜色 (0)。

关于c++ - 尝试逐个像素地理解位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16387993/

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