]> Repositories - hackapet/Adafruit_Blinka_Displayio.git/commitdiff
implement arrayblit
authorfoamyguy <foamyguy@gmail.com>
Wed, 16 Apr 2025 00:51:04 +0000 (19:51 -0500)
committerfoamyguy <foamyguy@gmail.com>
Wed, 16 Apr 2025 00:51:04 +0000 (19:51 -0500)
bitmaptools/__init__.py

index 4b18c456fd7fc0648e63ba42ee9956b276cfd327..e3490f653531a700887e2d7f593a1e40cec364fd 100644 (file)
@@ -216,3 +216,24 @@ def rotozoom(
             v += dv_row
         rowu += du_col
         rowv += dv_col
             v += dv_row
         rowu += du_col
         rowv += dv_col
+
+
+def arrayblit(
+        bitmap: Bitmap,
+        data: circuitpython_typing.ReadableBuffer,
+        x1: int = 0, y1: int = 0,
+        x2: int | None = None, y2: int | None = None,
+        skip_index: int | None = None):
+
+    if x2 is None:
+        x2 = bitmap.width
+    if y2 is None:
+        y2 = bitmap.height
+
+    _value_count = 2 ** bitmap._bits_per_value
+    for y in range(y1, y2):
+        for x in range(x1, x2):
+            i = y * (x2 - x1) + x
+            value = int(data[i] % _value_count)
+            if skip_index is None or value != skip_index:
+                bitmap[x, y] = value