Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_flood_zoom_step50.py
- import tkinter as tk
- from PIL import Image, ImageTk
- import math
- WW, HH = 640, 640
- CX, CY = WW // 2, HH // 2
- root = tk.Tk()
- root.title("# tk_flood_zoom.py")
- canvas = tk.Canvas(root, width=WW, height=HH)
- root.geometry("+10+10")
- canvas.pack()
- img = Image.new('RGB', (WW, HH), "white")
- rgb_list = {}
- rgb_list_max = {}
- step = 50
- max_value = 1000
- for r in range(0, 256, step):
- for g in range(0, 256, step):
- for b in range(0, 256, step):
- rgb_list[(r, g, b)] = max_value
- Lrgb = len(rgb_list)
- rgb_list_max = rgb_list.copy()
- rgb_cue = list(rgb_list)
- cXY = []
- inner = {}
- for j in range(HH):
- for i in range(WW):
- distance = ((CX - i) ** 2 + (CY - j) ** 2) ** 0.5
- xy2 = math.atan2(i - CX, j - CY)
- if distance < 50:
- cXY.append(((int(distance), xy2), i, j))
- for j in (CY-1, CY, CY+1):
- for i in (CX-1, CX, CX+1):
- inner[(i, j)] = 0
- def idx_base(idx, length, base=Lrgb):
- result = []
- for pos in range(length):
- divisor = base ** (length - pos - 1)
- digit = (idx // divisor) % base
- result.append(digit)
- return result
- cXY.sort()
- cXY = [(x, y) for z, x, y in cXY]
- LXY = len(cXY)
- def call_rgb(rgb):
- rgb = tuple([(value + 10) // step * step for value in rgb])
- return rgb_list[rgb], rgb
- quad = []
- def plot(i):
- global quad
- for j in range(i, LXY, n * 2):
- x, y = cXY[j]
- if (x, y) in inner:
- if not quad:
- quad = [rgb_cue[(i + q) % Lrgb] for i in idx_base(q, 9)]
- rgb = quad.pop()
- else:
- neighbors = [img.getpixel((x + x0, y + y0)) for x0 in (-1, 1) for y0 in (-1, 1)]
- value, rgb = min([call_rgb(rgb) for rgb in neighbors])
- if value > 0:
- value = value - 1
- else:
- rgb_list_max[rgb] += 5
- value = rgb_list_max[rgb]
- rgb_list[rgb] = value
- img.putpixel((x, y), rgb)
- scale = 32
- n = 16
- oXY = [i if i % 2 else n * 2 - i - 2 for i in range(n * 2)]
- q = 0
- while True:
- for i in oXY:
- canvas.delete('all')
- img = img.crop((scale, scale, WW - scale, HH - scale))
- img = img.resize((WW, HH), Image.ANTIALIAS)
- photo = ImageTk.PhotoImage(img)
- canvas.create_image(0, 0, image=photo, anchor=tk.NW)
- root.update()
- plot(i)
- q = (q + 29)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement