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
"""
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):
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)
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(