]> Repositories - hackapet/Adafruit_Blinka_Displayio.git/blobdiff - bitmaptools/__init__.py
implement arrayblit
[hackapet/Adafruit_Blinka_Displayio.git] / bitmaptools / __init__.py
index 4b18c456fd7fc0648e63ba42ee9956b276cfd327..e3490f653531a700887e2d7f593a1e40cec364fd 100644 (file)
@@ -216,3 +216,24 @@ def rotozoom(
             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