From 1f80d22e722d091a13b8e40f534f19344e11c7de Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sat, 29 Jul 2023 03:51:32 +0000 Subject: [PATCH] tools/png_to_nbpp: add support for 1bpp --- tools/png_to_nbpp.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tools/png_to_nbpp.py b/tools/png_to_nbpp.py index 00c804f..c870acd 100644 --- a/tools/png_to_nbpp.py +++ b/tools/png_to_nbpp.py @@ -6,13 +6,13 @@ from PIL import Image from palette import intensity_to_index 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_row = 8 bits_per_byte = 8 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 buf = bytearray(width * height // px_per_byte) @@ -21,14 +21,17 @@ def convert(image, bpp): for cell_x in range(width//8): for y in range(8): for x in range(8): - px = im.getpixel((cell_x * 8 + x, cell_y * 8 + y)) - index = intensity_to_index(px) + px = image.getpixel((cell_x * 8 + x, cell_y * 8 + y)) + if image.mode == 'L': + 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[buf_ix] |= (index << bpp * ((px_per_byte - 1) - (x % px_per_byte))) return buf 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_row = 8 bits_per_byte = 8