Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_full_gradient_cycle2.py
- from PIL import Image, ImageTk
- import tkinter as tk
- WW, HH = 640, 640
- WWo, HHo = WW // 8, HH // 8
- o255 = [i for i in range(256)]
- o255 = o255[1:-1] + o255[::-1]
- L = len(o255)
- root = tk.Tk()
- canvas = tk.Canvas(root, width=WW, height=HH)
- root.geometry("%dx%d+10+10" % (WW, HH))
- canvas.pack()
- img = Image.new("RGB", (WWo, HHo))
- pixels = img.load()
- 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): (128, 128, 128), # Gray (midpoint)
- (1, 2): (0, 0, 255), # Blue
- (2, 0): (255, 0, 0), # Red
- (2, 1): (128, 0, 128), # Purple
- (2, 2): (0, 0, 0) # Black
- }
- def interpolate_color(color1, color2, factor):
- return tuple(int(color1[i] + (color2[i] - color1[i]) * factor) for i in range(3))
- for j in range(HHo):
- for i in range(WWo):
- x = i / (WWo - 1) * 2
- y = j / (HHo - 1) * 2
- x0, y0 = int(x), int(y)
- x1, y1 = min(x0 + 1, 2), min(y0 + 1, 2)
- fx, fy = x - x0, y - y0
- color_top = interpolate_color(grid_colors[(x0, y0)], grid_colors[(x1, y0)], fx)
- color_bottom = interpolate_color(grid_colors[(x0, y1)], grid_colors[(x1, y1)], fx)
- color = interpolate_color(color_top, color_bottom, fy)
- pixels[i, j] = color
- def update_pixels(v):
- return o255[v]
- rgb = img.split()
- img = img.resize((WW, HH), Image.ANTIALIAS)
- gradient_photo = ImageTk.PhotoImage(img)
- canvas.create_image(0, 0, anchor=tk.NW, image=gradient_photo)
- canvas.update()
- while 1:
- for n in range(L):
- rgb1 = [p.point(lambda v: update_pixels(v - n)) for p in rgb]
- img1 = Image.merge("RGB", rgb1)
- img1 = img1.resize((WW, HH), Image.ANTIALIAS)
- gradient_photo.paste(img1)
- canvas.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement