From f1981fbd52098a19617652018b89c6a6f5a14311 Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Fri, 22 May 2020 23:59:09 -0700 Subject: [PATCH] Brought back rgba for color correction --- displayio/palette.py | 15 +++++++++++++++ displayio/test.png | Bin 0 -> 865 bytes displayio/tilegrid.py | 17 +++++++++-------- 3 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 displayio/test.png diff --git a/displayio/palette.py b/displayio/palette.py index 4fe63a2..1812dbf 100644 --- a/displayio/palette.py +++ b/displayio/palette.py @@ -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 index 0000000000000000000000000000000000000000..dca5f078c857167f7b2c1a09571234ac6842cc27 GIT binary patch literal 865 zcmeAS@N?(olHy`uVBq!ia0y~yV02($VEDkn#=yW(sJl0tfq_}W)5S5QV$RzuhKvjf zJO?&3)}L2Mb{A&dTlI|B;nH0`h8sx@4$~N!BH1`nBo!v4j&erBU?ipk`S56_`yXPT S-)3N7VDNPHb6Mw<&;$Sn7U3`e literal 0 HcmV?d00001 diff --git a/displayio/tilegrid.py b/displayio/tilegrid.py index c68fe9d..76d3b2c 100644 --- a/displayio/tilegrid.py +++ b/displayio/tilegrid.py @@ -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( -- 2.49.0