tools/png_to_nbpp: add support for 1bpp
This commit is contained in:
parent
ab4d133820
commit
1f80d22e72
@ -6,13 +6,13 @@ from PIL import Image
|
|||||||
from palette import intensity_to_index
|
from palette import intensity_to_index
|
||||||
|
|
||||||
def convert(image, bpp):
|
def convert(image, bpp):
|
||||||
assert bpp in {8, 4, 2}, bpp
|
assert bpp in {8, 4, 2, 1}, bpp
|
||||||
px_per_byte = 8 // bpp
|
px_per_byte = 8 // bpp
|
||||||
px_per_row = 8
|
px_per_row = 8
|
||||||
bits_per_byte = 8
|
bits_per_byte = 8
|
||||||
bytes_per_row = (px_per_row // (bits_per_byte // bpp))
|
bytes_per_row = (px_per_row // (bits_per_byte // bpp))
|
||||||
|
|
||||||
assert image.mode == 'L', image.mode
|
assert image.mode in {'L', '1'}, image.mode
|
||||||
width, height = image.size
|
width, height = image.size
|
||||||
|
|
||||||
buf = bytearray(width * height // px_per_byte)
|
buf = bytearray(width * height // px_per_byte)
|
||||||
@ -21,14 +21,17 @@ def convert(image, bpp):
|
|||||||
for cell_x in range(width//8):
|
for cell_x in range(width//8):
|
||||||
for y in range(8):
|
for y in range(8):
|
||||||
for x in range(8):
|
for x in range(8):
|
||||||
px = im.getpixel((cell_x * 8 + x, cell_y * 8 + y))
|
px = image.getpixel((cell_x * 8 + x, cell_y * 8 + y))
|
||||||
|
if image.mode == 'L':
|
||||||
index = intensity_to_index(px)
|
index = intensity_to_index(px)
|
||||||
|
elif image.mode == '1':
|
||||||
|
index = int(px != 0)
|
||||||
buf_ix = x//px_per_byte + (bytes_per_row * (cell_x * 8 + (cell_y * width) + y))
|
buf_ix = x//px_per_byte + (bytes_per_row * (cell_x * 8 + (cell_y * width) + y))
|
||||||
buf[buf_ix] |= (index << bpp * ((px_per_byte - 1) - (x % px_per_byte)))
|
buf[buf_ix] |= (index << bpp * ((px_per_byte - 1) - (x % px_per_byte)))
|
||||||
return buf
|
return buf
|
||||||
|
|
||||||
def debug(buf, bpp):
|
def debug(buf, bpp):
|
||||||
assert bpp in {8, 4, 2}, bpp
|
assert bpp in {8, 4, 2, 1}, bpp
|
||||||
px_per_byte = 8 // bpp
|
px_per_byte = 8 // bpp
|
||||||
px_per_row = 8
|
px_per_row = 8
|
||||||
bits_per_byte = 8
|
bits_per_byte = 8
|
||||||
|
Loading…
x
Reference in New Issue
Block a user