Advertisement
here2share

# tk_full_gradient_cycle.py

Dec 5th, 2024 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.85 KB | None | 0 0
  1. # tk_full_gradient_cycle2.py
  2.  
  3. from PIL import Image, ImageTk
  4. import tkinter as tk
  5.  
  6. WW, HH = 640, 640
  7. WWo, HHo = WW // 8, HH // 8
  8.  
  9. o255 = [i for i in range(256)]
  10. o255 = o255[1:-1] + o255[::-1]
  11. L = len(o255)
  12.  
  13. root = tk.Tk()
  14. canvas = tk.Canvas(root, width=WW, height=HH)
  15. root.geometry("%dx%d+10+10" % (WW, HH))
  16. canvas.pack()
  17.  
  18. img = Image.new("RGB", (WWo, HHo))
  19. pixels = img.load()
  20.  
  21. grid_colors = {
  22.     (0, 0): (255, 255, 255),  # White
  23.     (0, 1): (255, 255, 0),    # Yellow
  24.     (0, 2): (0, 255, 0),      # Green
  25.     (1, 0): (255, 165, 0),    # Orange
  26.     (1, 1): (128, 128, 128),  # Gray (midpoint)
  27.     (1, 2): (0, 0, 255),      # Blue
  28.     (2, 0): (255, 0, 0),      # Red
  29.     (2, 1): (128, 0, 128),    # Purple
  30.     (2, 2): (0, 0, 0)         # Black
  31. }
  32.  
  33. def interpolate_color(color1, color2, factor):
  34.     return tuple(int(color1[i] + (color2[i] - color1[i]) * factor) for i in range(3))
  35.  
  36. for j in range(HHo):
  37.     for i in range(WWo):
  38.         x = i / (WWo - 1) * 2
  39.         y = j / (HHo - 1) * 2
  40.         x0, y0 = int(x), int(y)
  41.         x1, y1 = min(x0 + 1, 2), min(y0 + 1, 2)
  42.         fx, fy = x - x0, y - y0
  43.  
  44.         color_top = interpolate_color(grid_colors[(x0, y0)], grid_colors[(x1, y0)], fx)
  45.         color_bottom = interpolate_color(grid_colors[(x0, y1)], grid_colors[(x1, y1)], fx)
  46.         color = interpolate_color(color_top, color_bottom, fy)
  47.        
  48.         pixels[i, j] = color
  49.  
  50. def update_pixels(v):
  51.     return o255[v]
  52.  
  53. rgb = img.split()
  54. img = img.resize((WW, HH), Image.ANTIALIAS)
  55. gradient_photo = ImageTk.PhotoImage(img)
  56. canvas.create_image(0, 0, anchor=tk.NW, image=gradient_photo)
  57. canvas.update()
  58.  
  59. while 1:
  60.     for n in range(L):
  61.         rgb1 = [p.point(lambda v: update_pixels(v - n)) for p in rgb]
  62.         img1 = Image.merge("RGB", rgb1)
  63.        
  64.         img1 = img1.resize((WW, HH), Image.ANTIALIAS)
  65.  
  66.         gradient_photo.paste(img1)
  67.         canvas.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement