From ec0c195ad4aa0e2f8450461194fa51f33335e6a5 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sun, 14 Mar 2021 13:52:45 -0500 Subject: [PATCH 1/2] pcf: Use `bitmaptools.readinto` to load font data if available --- adafruit_bitmap_font/pcf.py | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/adafruit_bitmap_font/pcf.py b/adafruit_bitmap_font/pcf.py index 94bf9c6..7d8d2e1 100644 --- a/adafruit_bitmap_font/pcf.py +++ b/adafruit_bitmap_font/pcf.py @@ -30,6 +30,11 @@ from fontio import Glyph from .glyph_cache import GlyphCache +try: + from bitmaptools import readinto as _bitmap_readinto +except ImportError: + _bitmap_readinto = None # pylint: disable=invalid-name + _PCF_PROPERTIES = const(1 << 0) _PCF_ACCELERATORS = const(1 << 1) _PCF_METRICS = const(1 << 2) @@ -380,12 +385,22 @@ def load_glyphs(self, code_points): height = metrics.character_ascent + metrics.character_descent bitmap = bitmaps[i] - words_per_row = (width + 31) // 32 - buf = bytearray(4 * words_per_row) - start = 0 - for _ in range(height): - self.file.readinto(buf) - for k in range(width): - if buf[k // 8] & (128 >> (k % 8)): - bitmap[start + k] = 1 - start += width + + if _bitmap_readinto: + _bitmap_readinto( + bitmap, + self.file, + bits_per_pixel=1, + element_size=4, + reverse_pixels_in_element=True, + ) + else: + words_per_row = (width + 31) // 32 + buf = bytearray(4 * words_per_row) + start = 0 + for _ in range(height): + self.file.readinto(buf) + for k in range(width): + if buf[k // 8] & (128 >> (k % 8)): + bitmap[start + k] = 1 + start += width From c2e71ce10a905d436e5e3a6ad771ec3a6246722d Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sun, 14 Mar 2021 14:55:54 -0500 Subject: [PATCH 2/2] run black --- adafruit_bitmap_font/pcf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_bitmap_font/pcf.py b/adafruit_bitmap_font/pcf.py index 7d8d2e1..3964cc1 100644 --- a/adafruit_bitmap_font/pcf.py +++ b/adafruit_bitmap_font/pcf.py @@ -33,7 +33,7 @@ try: from bitmaptools import readinto as _bitmap_readinto except ImportError: - _bitmap_readinto = None # pylint: disable=invalid-name + _bitmap_readinto = None # pylint: disable=invalid-name _PCF_PROPERTIES = const(1 << 0) _PCF_ACCELERATORS = const(1 << 1)