Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_rgb_to_deg.py
- import tkinter as tk
- from PIL import Image, ImageTk, ImageDraw, ImageFilter
- import itertools
- DISPLAY_SIZE = 640
- vals = [0, 12, 24]
- combos = list(itertools.product(vals, repeat=3))
- combos = sorted(combos, key=lambda t: max(t))
- grid_colors = {
- (0, 0): (255, 255, 255), # white
- (0, 1): (255, 255, 0), # yellow
- (0, 2): (0, 255, 0), # green
- (1, 0): (255, 165, 0), # orange
- (1, 1): (200, 200, 200), # gray
- (1, 2): (0, 0, 255), # blue
- (2, 0): (255, 0, 0), # red
- (2, 1): (128, 0, 128), # purple
- (2, 2): (0, 0, 0) # black
- }
- tiny_img = Image.new("RGB", (3, 3))
- px = tiny_img.load()
- for x in range(3):
- for y in range(3):
- px[x, y] = grid_colors[(x, y)]
- palette_img = tiny_img.resize((19, 19), Image.LANCZOS)
- draw = ImageDraw.Draw(palette_img)
- draw.line((0, 18, 18, 18), fill=(0, 0, 0))
- draw.line((18, 0, 18, 18), fill=(0, 0, 0))
- palette_img = palette_img.filter(ImageFilter.GaussianBlur(2))
- px = palette_img.load()
- rgb_to_deg = {}
- deg_to_rgb = {}
- seen = []
- deg = 0
- def plot(xx):
- global deg
- for x in xx:
- rgb = px[x, y]
- r, g, b = [v // 8 * 8 for v in rgb]
- for (rx, gx, bx) in combos:
- rgb = (rx + r, gx + g, bx + b)
- if rgb not in seen:
- seen.append(rgb)
- break
- px[x, y] = rgb
- rgb_to_deg[rgb] = deg
- deg_to_rgb[deg] = rgb
- deg += 1
- print(rgb)
- for y in range(11):
- plot(range(19))
- for y in range(18, 10, -1):
- plot(range(19)[::-1])
- display_img = palette_img.resize((DISPLAY_SIZE, DISPLAY_SIZE), Image.NEAREST)
- root = tk.Tk()
- root.geometry(f"{DISPLAY_SIZE}x{DISPLAY_SIZE}+10+10")
- canvas = tk.Canvas(root, width=DISPLAY_SIZE, height=DISPLAY_SIZE)
- canvas.pack()
- photo = ImageTk.PhotoImage(display_img)
- canvas.create_image(0, 0, anchor=tk.NW, image=photo)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment