]> Repositories - hackapet/Adafruit_Blinka_Displayio.git/commitdiff
Brought back rgba for color correction
authorMelissa LeBlanc-Williams <melissa@adafruit.com>
Sat, 23 May 2020 06:59:09 +0000 (23:59 -0700)
committerMelissa LeBlanc-Williams <melissa@adafruit.com>
Sat, 23 May 2020 06:59:09 +0000 (23:59 -0700)
displayio/palette.py
displayio/test.png [new file with mode: 0644]
displayio/tilegrid.py

index 4fe63a2edfcc95fcd61611de517230b7d1bce86b..1812dbf93c19f6eeac426b471596d4e3cf514dca 100644 (file)
@@ -51,11 +51,23 @@ class Palette:
         self._colors = []
         for _ in range(color_count):
             self._colors.append(self._make_color(0))
+            self._update_rgba(len(self._colors) - 1)
+
+    def _update_rgba(self, index):
+        color = self._colors[index]["rgb888"]
+        transparent = self._colors[index]["transparent"]
+        self._colors[index]["rgba"] = (
+            color >> 16,
+            (color >> 8) & 0xFF,
+            color & 0xFF,
+            0 if transparent else 0xFF,
+        )
 
     def _make_color(self, value, transparent=False):
         color = {
             "transparent": transparent,
             "rgb888": 0,
+            "rgba": (0, 0, 0, 255),
         }
         if isinstance(value, (tuple, list, bytes, bytearray)):
             value = (value[0] & 0xFF) << 16 | (value[1] & 0xFF) << 8 | value[2] & 0xFF
@@ -83,6 +95,7 @@ class Palette:
         """
         if self._colors[index]["rgb888"] != value:
             self._colors[index] = self._make_color(value)
+            self._update_rgba(index)
 
     def __getitem__(self, index):
         if not 0 <= index < len(self._colors):
@@ -92,7 +105,9 @@ class Palette:
     def make_transparent(self, palette_index):
         """Set the palette index to be a transparent color"""
         self._colors[palette_index]["transparent"] = True
+        self._update_rgba(palette_index)
 
     def make_opaque(self, palette_index):
         """Set the palette index to be an opaque color"""
         self._colors[palette_index]["transparent"] = False
+        self._update_rgba(palette_index)
diff --git a/displayio/test.png b/displayio/test.png
new file mode 100644 (file)
index 0000000..dca5f07
Binary files /dev/null and b/displayio/test.png differ
index c68fe9d370fca1e83cd5a7badbc833e8c03c5555..76d3b2c587d9b0baf16e54aeb17d04f281b5dd1e 100644 (file)
@@ -200,22 +200,23 @@ class TileGrid:
         x = self._x
         y = self._y
 
-        for tile_x in range(0, self._width):
-            for tile_y in range(0, self._height):
+        for tile_x in range(self._width):
+            for tile_y in range(self._height):
                 tile_index = self._tiles[tile_y * self._width + tile_x]
                 tile_index_x = tile_index % tile_count_x
                 tile_index_y = tile_index // tile_count_x
                 for pixel_x in range(self._tile_width):
                     for pixel_y in range(self._tile_height):
-                        image_x = tile_x * self._tile_width + pixel_x
-                        image_y = tile_y * self._tile_height + pixel_y
-                        bitmap_x = tile_index_x * self._tile_width + pixel_x
-                        bitmap_y = tile_index_y * self._tile_height + pixel_y
+                        image_x = (tile_x * self._tile_width) + pixel_x
+                        image_y = (tile_y * self._tile_height) + pixel_y
+                        bitmap_x = (tile_index_x * self._tile_width) + pixel_x
+                        bitmap_y = (tile_index_y * self._tile_height) + pixel_y
                         pixel_color = self._pixel_shader[
                             self._bitmap[bitmap_x, bitmap_y]
                         ]
-                        if not pixel_color["transparent"]:
-                            image.putpixel((image_x, image_y), pixel_color["rgb888"])
+                        # if not pixel_color["transparent"]:
+                        image.putpixel((image_x, image_y), pixel_color["rgba"])
+
         if self._absolute_transform is not None:
             if self._absolute_transform.scale > 1:
                 image = image.resize(