Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,74 @@
|
|||
from collections import deque
|
||||
|
||||
image_file = "image.png"
|
||||
fill_color = color(250, 0, 0)
|
||||
tolerance = 15
|
||||
allowed = False
|
||||
|
||||
def setup():
|
||||
global img
|
||||
size(600, 400)
|
||||
img = loadImage(image_file)
|
||||
fill(0, 0, 100)
|
||||
textSize(18)
|
||||
show()
|
||||
|
||||
def show():
|
||||
image(img, 0, 0, width, height)
|
||||
text("Tolerance = {} (Use mouse wheel to change)".format(tolerance),
|
||||
100, height - 30)
|
||||
text("Right click to reset", 100, height - 10)
|
||||
|
||||
def draw():
|
||||
global allowed
|
||||
if allowed:
|
||||
show()
|
||||
allowed = False
|
||||
|
||||
def mousePressed():
|
||||
global allowed, img
|
||||
if mouseButton == RIGHT:
|
||||
img = loadImage(image_file)
|
||||
else:
|
||||
img.loadPixels()
|
||||
flood(mouseX, mouseY)
|
||||
img.updatePixels()
|
||||
allowed = True
|
||||
|
||||
def mouseWheel(event):
|
||||
global allowed, tolerance
|
||||
e = event.getCount()
|
||||
tolerance += 2 * e
|
||||
if tolerance > 128:
|
||||
tolerance = 128
|
||||
if tolerance < 0:
|
||||
tolerance = 0
|
||||
allowed = True
|
||||
|
||||
def flood(x, y):
|
||||
target_color = img.pixels[pixel_position(mouseX, mouseY)]
|
||||
if target_color != fill_color:
|
||||
queue = deque()
|
||||
queue.append((x, y))
|
||||
while len(queue) > 0:
|
||||
p_x, p_y = queue.popleft()
|
||||
if (check(p_x, p_y, target_color)):
|
||||
queue.append((p_x, p_y - 1))
|
||||
queue.append((p_x, p_y + 1))
|
||||
queue.append((p_x - 1, p_y))
|
||||
queue.append((p_x + 1, p_y))
|
||||
|
||||
def pixel_position(x, y):
|
||||
return x + (y * img.width)
|
||||
|
||||
def check(x, y, target_color):
|
||||
if x < 0 or y < 0 or y >= img.height or x >= img.width:
|
||||
return False
|
||||
pp = img.pixels[pixel_position(x, y)]
|
||||
test_tolerance = (abs(green(target_color) - green(pp)) < tolerance
|
||||
and abs(red(target_color) - red(pp)) < tolerance
|
||||
and abs(blue(target_color) - blue(pp)) < tolerance)
|
||||
if not test_tolerance:
|
||||
return False
|
||||
img.pixels[pixel_position(x, y)] = fill_color
|
||||
return True
|
||||
Loading…
Add table
Add a link
Reference in a new issue