diff options
| author | Pablo MartÃnez <[email protected]> | 2023-07-07 14:09:17 +0200 | 
|---|---|---|
| committer | GitHub <[email protected]> | 2023-07-07 22:09:17 +1000 | 
| commit | 6bdd8e27825c4468008ba07dd0e553afeb4318f7 (patch) | |
| tree | 5dd027fafb3071d8ec0037bc680b5125a803ae96 /lib/python | |
| parent | 3142f2dfdfc600e9164bbcd6f437c28e6bd1b624 (diff) | |
| download | qmk_firmware-6bdd8e27825c4468008ba07dd0e553afeb4318f7.tar.gz qmk_firmware-6bdd8e27825c4468008ba07dd0e553afeb4318f7.zip | |
[Refactor] Python-ify QP's converter code (#20102)
Diffstat (limited to 'lib/python')
| -rw-r--r-- | lib/python/qmk/painter.py | 38 | 
1 files changed, 14 insertions, 24 deletions
| diff --git a/lib/python/qmk/painter.py b/lib/python/qmk/painter.py index 48310c8961..381a996443 100644 --- a/lib/python/qmk/painter.py +++ b/lib/python/qmk/painter.py @@ -191,6 +191,12 @@ def convert_requested_format(im, format):      return im +def rgb_to565(r, g, b): +    msb = ((r >> 3 & 0x1F) << 3) + (g >> 5 & 0x07) +    lsb = ((g >> 2 & 0x07) << 5) + (b >> 3 & 0x1F) +    return [msb, lsb] + +  def convert_image_bytes(im, format):      """Convert the supplied image to the equivalent bytes required by the QMK firmware.      """ @@ -248,41 +254,25 @@ def convert_image_bytes(im, format):      if image_format == 'IMAGE_FORMAT_RGB565':          # Take the red, green, and blue channels -        image_bytes_red = im.tobytes("raw", "R") -        image_bytes_green = im.tobytes("raw", "G") -        image_bytes_blue = im.tobytes("raw", "B") -        image_pixels_len = len(image_bytes_red) +        red = im.tobytes("raw", "R") +        green = im.tobytes("raw", "G") +        blue = im.tobytes("raw", "B")          # No palette          palette = None -        bytearray = [] -        for x in range(image_pixels_len): -            # 5 bits of red, 3 MSb of green -            byte = ((image_bytes_red[x] >> 3 & 0x1F) << 3) + (image_bytes_green[x] >> 5 & 0x07) -            bytearray.append(byte) -            # 3 LSb of green, 5 bits of blue -            byte = ((image_bytes_green[x] >> 2 & 0x07) << 5) + (image_bytes_blue[x] >> 3 & 0x1F) -            bytearray.append(byte) +        bytearray = [byte for r, g, b in zip(red, green, blue) for byte in rgb_to565(r, g, b)]      if image_format == 'IMAGE_FORMAT_RGB888':          # Take the red, green, and blue channels -        image_bytes_red = im.tobytes("raw", "R") -        image_bytes_green = im.tobytes("raw", "G") -        image_bytes_blue = im.tobytes("raw", "B") -        image_pixels_len = len(image_bytes_red) +        red = im.tobytes("raw", "R") +        green = im.tobytes("raw", "G") +        blue = im.tobytes("raw", "B")          # No palette          palette = None -        bytearray = [] -        for x in range(image_pixels_len): -            byte = image_bytes_red[x] -            bytearray.append(byte) -            byte = image_bytes_green[x] -            bytearray.append(byte) -            byte = image_bytes_blue[x] -            bytearray.append(byte) +        bytearray = [byte for r, g, b in zip(red, green, blue) for byte in (r, g, b)]      if len(bytearray) != expected_byte_count:          raise Exception(f"Wrong byte count, was {len(bytearray)}, expected {expected_byte_count}") | 
