From: Melissa LeBlanc-Williams Date: Sat, 23 May 2020 06:59:09 +0000 (-0700) Subject: Brought back rgba for color correction X-Git-Tag: 0.2.0~2^2 X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka_Displayio.git/commitdiff_plain/f1981fbd52098a19617652018b89c6a6f5a14311?hp=-c Brought back rgba for color correction --- f1981fbd52098a19617652018b89c6a6f5a14311 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 0000000..dca5f07 Binary files /dev/null and b/displayio/test.png differ 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(