--- /dev/null
+from PIL import Image
+
+import display
+
+class Renderer:
+ def __init__(self) -> None:
+ self.width = display.EPD_HEIGHT
+ self.height = display.EPD_WIDTH
+ self.display = display.Display()
+
+ def render(self, image: Image):
+ hsv_image = image.convert("HSV")
+
+ black_image = image.copy()
+ red_image = Image.new('L', (self.width, self.height), 'white')
+
+ for x in range(self.width):
+ for y in range(self.height):
+ h, s, v = hsv_image[x,y]
+ red_hue_val = max(0, 255 - h*6, (h-212)*6)
+ red_val = red_hue_val * s * v / 256 / 256
+ if red_val > 0:
+ red_image[x, y] = 255 - red_val
+ black_image[x, y] = (v, v, v)
+
+ black_image.transpose(Image.Transpose.ROTATE_270)
+ red_image.transpose(Image.Transpose.ROTATE_270)
+ self.display.render(black_image, red_image)
+