Skip to content

Commit a73fe3b

Browse files
authored
Merge pull request #45 from kmatch98/master
Add option for using bitmaptools.readinto for indexed bitmap loads
2 parents cf6f2fc + e716587 commit a73fe3b

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

adafruit_imageload/bmp/indexed.py

100644100755
+29-13
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717

1818
import sys
1919

20+
try:
21+
from bitmaptools import readinto as _bitmap_readinto
22+
except ImportError:
23+
_bitmap_readinto = None # pylint: disable=invalid-name
24+
2025

2126
def load(
2227
file,
@@ -57,7 +62,7 @@ def load(
5762
minimum_color_depth *= 2
5863

5964
if sys.maxsize > 1073741823:
60-
# pylint: disable=import-outside-toplevel
65+
# pylint: disable=import-outside-toplevel, relative-beyond-top-level
6166
from .negative_height_check import negative_height_check
6267

6368
# convert unsigned int to signed int when height is negative
@@ -81,18 +86,29 @@ def load(
8186
range3 = 1
8287

8388
if compression == 0:
84-
chunk = bytearray(line_size)
85-
for y in range(range1, range2, range3):
86-
file.readinto(chunk)
87-
pixels_per_byte = 8 // color_depth
88-
offset = y * width
89-
90-
for x in range(width):
91-
i = x // pixels_per_byte
92-
pixel = (
93-
chunk[i] >> (8 - color_depth * (x % pixels_per_byte + 1))
94-
) & mask
95-
bitmap[offset + x] = pixel
89+
90+
if _bitmap_readinto:
91+
_bitmap_readinto(
92+
bitmap,
93+
file,
94+
bits_per_pixel=color_depth,
95+
element_size=4,
96+
reverse_pixels_in_element=False,
97+
reverse_rows=True,
98+
)
99+
else: # use the standard file.readinto
100+
chunk = bytearray(line_size)
101+
for y in range(range1, range2, range3):
102+
file.readinto(chunk)
103+
pixels_per_byte = 8 // color_depth
104+
offset = y * width
105+
106+
for x in range(width):
107+
i = x // pixels_per_byte
108+
pixel = (
109+
chunk[i] >> (8 - color_depth * (x % pixels_per_byte + 1))
110+
) & mask
111+
bitmap[offset + x] = pixel
96112
elif compression in (1, 2):
97113
decode_rle(
98114
bitmap=bitmap,

0 commit comments

Comments
 (0)