]> Repositories - hackapet/Adafruit_Blinka_Displayio.git/commitdiff
Merge pull request #98 from FoamyGuy/add_bitmap_blit
authorMelissa LeBlanc-Williams <melissa@adafruit.com>
Fri, 11 Nov 2022 16:29:46 +0000 (08:29 -0800)
committerGitHub <noreply@github.com>
Fri, 11 Nov 2022 16:29:46 +0000 (08:29 -0800)
adding blit implementation to Bitmap

1  2 
displayio/_bitmap.py

diff --combined displayio/_bitmap.py
index 08b383ec92b5e9aeda1fb0422127916e5d2033c1,12e20afb48ea07c552d16d53cc1238173a2f1e55..b0e36559b8151c6dddbf104d3ca2a383e19f1401
@@@ -22,7 -22,7 +22,7 @@@ from typing import Union, Tupl
  from PIL import Image
  from ._structs import RectangleStruct
  
 -__version__ = "0.0.0-auto.0"
 +__version__ = "0.0.0+auto.0"
  __repo__ = "https://github.com/adafruit/Adafruit_Blinka_displayio.git"
  
  
@@@ -131,7 -131,46 +131,46 @@@ class Bitmap
      ) -> None:
          # pylint: disable=unnecessary-pass, invalid-name
          """Inserts the source_bitmap region defined by rectangular boundaries"""
-         pass
+         if x2 is None:
+             x2 = source_bitmap.width
+         if y2 is None:
+             y2 = source_bitmap.height
+         # Rearrange so that x1 < x2 and y1 < y2
+         if x1 > x2:
+             x1, x2 = x2, x1
+         if y1 > y2:
+             y1, y2 = y2, y1
+         # Ensure that x2 and y2 are within source bitmap size
+         x2 = min(x2, source_bitmap.width)
+         y2 = min(y2, source_bitmap.height)
+         for y_count in range(y2 - y1):
+             for x_count in range(x2 - x1):
+                 x_placement = x + x_count
+                 y_placement = y + y_count
+                 if (self.width > x_placement >= 0) and (
+                     self.height > y_placement >= 0
+                 ):  # ensure placement is within target bitmap
+                     # get the palette index from the source bitmap
+                     this_pixel_color = source_bitmap[
+                         y1
+                         + (
+                             y_count * source_bitmap.width
+                         )  # Direct index into a bitmap array is speedier than [x,y] tuple
+                         + x1
+                         + x_count
+                     ]
+                     if (skip_index is None) or (this_pixel_color != skip_index):
+                         self[  # Direct index into a bitmap array is speedier than [x,y] tuple
+                             y_placement * self.width + x_placement
+                         ] = this_pixel_color
+                 elif y_placement > self.height:
+                     break
  
      def dirty(self, x1: int = 0, y1: int = 0, x2: int = -1, y2: int = -1) -> None:
          # pylint: disable=unnecessary-pass, invalid-name