.bmp ファイルから色を収集してパレットを作成するために、一度に 4 バイトの bmp ファイルを読み込んでいます。ファイルを読むと、b'\x8b\xc3\**x00J**\x00'
. このファイルを 16 進エディタで開くと、バイト文字列はb'\x8b\xc3\**x4a**\x00
. に入れようとすると、その特定のバイトがプログラムを壊しますdispalyio.palette
。私の理解では、Python は (有効な ascii 表現を持つ) バイトを ascii に自動デコードします。
最終的には、そのファイルからデコードせずに、一度に 4 バイトの生のバイト文字列を取得したいだけです。私のコードは次のようになります。
palette = displayio.Palette(2)
with open("images/f.bmp", "rb") as f:
f.seek(137)
for val in range(0, 1):
try:
c_bytes = f.read(4)
#print(c_bytes[0:2])
print(b''.join([c_bytes[3:4], c_bytes[2:3], c_bytes[0:2]]))
palette[0] = b''.join([c_bytes[3:4], c_bytes[1:3], c_bytes[0:2]])
except Exception as e:
print(e)
これは、モジュールを使用した CircuitPython 6.3.0 上にありdisplayio
ます。なじみのない CircuitPython は、MCU 向けの Python のスリム化されたバージョンであり、Python 3 をベースとして使用します。