From e74fe846ba3e3e56a808082a963c18a4e7d38a2e Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sun, 21 Mar 2021 08:24:37 -0500 Subject: [PATCH 1/2] readinto fallback for missing argument --- adafruit_imageload/bmp/indexed.py | 36 ++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/adafruit_imageload/bmp/indexed.py b/adafruit_imageload/bmp/indexed.py index c277475..2dc7129 100755 --- a/adafruit_imageload/bmp/indexed.py +++ b/adafruit_imageload/bmp/indexed.py @@ -88,14 +88,34 @@ def load( if compression == 0: if _bitmap_readinto: - _bitmap_readinto( - bitmap, - file, - bits_per_pixel=color_depth, - element_size=4, - reverse_pixels_in_element=False, - reverse_rows=True, - ) + try: + _bitmap_readinto( + bitmap, + file, + bits_per_pixel=color_depth, + element_size=4, + reverse_pixels_in_element=False, + reverse_rows=True, + ) + except TypeError: + # catch unexpected argument, try python read code. + # this can be removed after a release is made that + # includes bitmapttools.readinto() with all arguments + # used above. + chunk = bytearray(line_size) + for y in range(range1, range2, range3): + file.readinto(chunk) + pixels_per_byte = 8 // color_depth + offset = y * width + + for x in range(width): + i = x // pixels_per_byte + pixel = ( + chunk[i] + >> (8 - color_depth * (x % pixels_per_byte + 1)) + ) & mask + bitmap[offset + x] = pixel + else: # use the standard file.readinto chunk = bytearray(line_size) for y in range(range1, range2, range3): From 869c38d4a153feebfd4d6099fdbcd17950ab5eda Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sun, 21 Mar 2021 13:59:24 -0500 Subject: [PATCH 2/2] note the release version of readinto argument issue --- adafruit_imageload/bmp/indexed.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/adafruit_imageload/bmp/indexed.py b/adafruit_imageload/bmp/indexed.py index 2dc7129..40d1eb5 100755 --- a/adafruit_imageload/bmp/indexed.py +++ b/adafruit_imageload/bmp/indexed.py @@ -99,9 +99,9 @@ def load( ) except TypeError: # catch unexpected argument, try python read code. - # this can be removed after a release is made that - # includes bitmapttools.readinto() with all arguments - # used above. + # This issue affects only CircuitPython 6.2.0-beta.4. + # The try/except block here should be removed when + # a newer release is made. chunk = bytearray(line_size) for y in range(range1, range2, range3): file.readinto(chunk)