gpt4 book ai didi

python - 如何在 Python 中使用位图 header ?

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:13 25 4
gpt4 key购买 nike

我正在尝试将位图图像文件转换为灰度并使用位图 header 方法。我有以下代码:

BMHEADER = bytearray([
66, 77, # BM identifier
102, 117, 0, 0, # size of file in bytes
0, 0, 0, 0, # unused
54, 0, 0, 0, # offset where the data can be found
40, 0, 0, 0, # no. of bytes in DIB header from here
400, 0, 0, 0, # bitmap width in pixels
296, 0, 0, 0, # bitmap height in pixels
1, 0, # number of colour planes
24, 0, # number of bits per pixel (R=G=B=8 bits)
0, 0, 0, 0, # no compression
48, 117, 0, 0, # size of the raw data
18, 11, 0, 0, # horizontal resolution
18, 11, 0, 0, # vertical resolution
0, 0, 0, 0, # number of colours in the palette
0, 0, 0, 0, # all colours important
])
bmp = open(file, 'wb')
bmp.write(BMHEADER) # write header
pixel = bytearray([0, 0, 255]) # blue, green, red
for x in range (400):
for y in range (296):

我正在尝试弄清楚如何设置 header 以使其正常工作。我知道我的宽度和高度是正确的,但我收到以下错误:

    0, 0, 0, 0,  # all colours important
ValueError: byte must be in range(0, 256)

有什么想法我应该在线上放置什么值才能使其发挥作用吗?

最佳答案

您的字节数组中有两个值大于或等于 256:400 和 296。您必须将它们拆分为高字节和低字节。您应该使用 144,1,0,0 而不是 400,0,0,0 而不是 296,0,0,0您应该使用40,1,0,0

如果您想导出这些数字而不是对其进行硬编码,请使用:

400&0xff, 400>>8, 0, 0,
296&0xff, 296>>8, 0, 0,

这适用于最大 65535 的值。任何大于该值的值,您都必须对高字节使用更复杂的表达式。

要以更安全的方式执行此操作,请查看 struct module .

关于python - 如何在 Python 中使用位图 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20278581/

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