here2share

# tk_rgb_to_deg.py

Sep 4th, 2026
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.81 KB | None | 0 0
  1. # tk_rgb_to_deg.py
  2.  
  3. import tkinter as tk
  4. from PIL import Image, ImageTk, ImageDraw, ImageFilter
  5. import itertools
  6.  
  7. DISPLAY_SIZE = 640
  8.  
  9. vals = [0, 12, 24]
  10. combos = list(itertools.product(vals, repeat=3))
  11.  
  12. combos = sorted(combos, key=lambda t: max(t))
  13.  
  14. grid_colors = {
  15.     (0, 0): (255, 255, 255),   # white
  16.     (0, 1): (255, 255, 0),     # yellow
  17.     (0, 2): (0, 255, 0),       # green
  18.  
  19.     (1, 0): (255, 165, 0),     # orange
  20.     (1, 1): (200, 200, 200),   # gray
  21.     (1, 2): (0, 0, 255),       # blue
  22.  
  23.     (2, 0): (255, 0, 0),       # red
  24.     (2, 1): (128, 0, 128),     # purple
  25.     (2, 2): (0, 0, 0)          # black
  26. }
  27.  
  28. tiny_img = Image.new("RGB", (3, 3))
  29. px = tiny_img.load()
  30.  
  31. for x in range(3):
  32.     for y in range(3):
  33.         px[x, y] = grid_colors[(x, y)]
  34.  
  35. palette_img = tiny_img.resize((19, 19), Image.LANCZOS)
  36. draw = ImageDraw.Draw(palette_img)
  37. draw.line((0, 18, 18, 18), fill=(0, 0, 0))
  38. draw.line((18, 0, 18, 18), fill=(0, 0, 0))
  39. palette_img = palette_img.filter(ImageFilter.GaussianBlur(2))
  40. px = palette_img.load()
  41.  
  42. rgb_to_deg = {}
  43. deg_to_rgb = {}
  44. seen = []
  45. deg = 0
  46.  
  47. def plot(xx):
  48.     global deg
  49.     for x in xx:
  50.         rgb = px[x, y]
  51.         r, g, b = [v // 8 * 8 for v in rgb]
  52.         for (rx, gx, bx) in combos:
  53.             rgb = (rx + r, gx + g, bx + b)
  54.             if rgb not in seen:
  55.                 seen.append(rgb)
  56.                 break
  57.         px[x, y] = rgb
  58.         rgb_to_deg[rgb] = deg
  59.         deg_to_rgb[deg] = rgb
  60.         deg += 1
  61.         print(rgb)
  62.    
  63. for y in range(11):
  64.     plot(range(19))
  65. for y in range(18, 10, -1):
  66.     plot(range(19)[::-1])
  67.  
  68. display_img = palette_img.resize((DISPLAY_SIZE, DISPLAY_SIZE), Image.NEAREST)
  69.  
  70. root = tk.Tk()
  71. root.geometry(f"{DISPLAY_SIZE}x{DISPLAY_SIZE}+10+10")
  72.  
  73. canvas = tk.Canvas(root, width=DISPLAY_SIZE, height=DISPLAY_SIZE)
  74. canvas.pack()
  75.  
  76. photo = ImageTk.PhotoImage(display_img)
  77. canvas.create_image(0, 0, anchor=tk.NW, image=photo)
  78.  
  79. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment