Đây là câu trả lời hoàn chỉnh cho bitmap đơn sắc.
import math, struct
mult4 = lambda n: int(math.ceil(n/4))*4
mult8 = lambda n: int(math.ceil(n/8))*8
lh = lambda n: struct.pack("<h", n)
li = lambda n: struct.pack("<i", n)
def bmp(rows, w):
h, wB = len(rows), int(mult8(w)/8)
s, pad = li(mult4(wB)*h+0x20), [0]*(mult4(wB)-wB)
s = li(mult4(w)*h+0x20)
return (b"BM" + s + b"\x00\x00\x00\x00\x20\x00\x00\x00\x0C\x00\x00\x00" +
lh(w) + lh(h) + b"\x01\x00\x01\x00\xff\xff\xff\x00\x00\x00" +
b"".join([bytes(row+pad) for row in reversed(rows)]))
Ví dụ:
FF XXXXXXXX
81 X......X
A5 X.X..X.X
81 X......X
A5 X.X..X.X
BD X.XXXX.X
81 X......X
FF XXXXXXXX
Vì vậy, mã hóa này là một loạt các hàng:
smile = [[0xFF], [0x81], [0xA5], [0x81], [0xA5], [0xBD], [0x81], [0xFF]]
Render nó với:
bmp(smile, 8)
Lưu ý rằng đó là trách nhiệm của lập trình viên để đảm bảo rằng các yêu cầu nu mber byte có mặt trong mỗi hàng được cung cấp.
Màu đen được chỉ định trong \ xff \ xff \ xff và màu trắng được chỉ định trong \ x00 \ x00 \ x00 sau, nếu bạn muốn thay đổi chúng.
Xem mô-đun ['struct'] (http://docs.python.org/library/struct.html). –
Ngoài ra, hãy kiểm tra [chuỗi diễn đàn này] (http://pseentertainmentcorp.com/smf/index.php?topic=2034.0). – Chewie
Cảm ơn, Chewie, đó chính xác là những gì tôi cần –