- self._colors[palette_index]["transparent"] = False
- self._update_rgba(palette_index)
-
- def _get_palette(self):
- """Generate a palette for use with PIL"""
- palette = []
- for color in self._colors:
- palette += color["rgba"][0:3]
- return palette
-
- def _get_alpha_palette(self):
- """Generate an alpha channel palette with white being
- opaque and black being transparent"""
- palette = []
- for color in self._colors:
- for _ in range(3):
- palette += [0 if color["transparent"] else 255]
- return palette
+ self._colors[palette_index].transparent = False
+ self._needs_refresh = True
+
+ def _get_color(
+ self,
+ colorspace: Colorspace,
+ input_pixel: InputPixelStruct,
+ output_color: OutputPixelStruct,
+ ):
+ palette_index = input_pixel.pixel
+ if palette_index > len(self._colors) or self._colors[palette_index].transparent:
+ output_color.opaque = False
+ return
+
+ color = self._colors[palette_index]
+ if (
+ not self._dither
+ and color.cached_colorspace == colorspace
+ and color.cached_colorspace_grayscale_bit == colorspace.grayscale_bit
+ and color.cached_colorspace_grayscale == colorspace.grayscale
+ ):
+ output_color.pixel = self._colors[palette_index].cached_color
+ return
+
+ rgb888_pixel = input_pixel
+ rgb888_pixel.pixel = self._colors[palette_index].rgb888
+ ColorConverter._convert_color( # pylint: disable=protected-access
+ colorspace, self._dither, rgb888_pixel, output_color
+ )
+ if not self._dither:
+ color.cached_colorspace = colorspace
+ color.cached_color = output_color.pixel
+ color.cached_colorspace_grayscale = colorspace.grayscale
+ color.cached_colorspace_grayscale_bit = colorspace.grayscale_bit