Bitmap/Flood fill: Difference between revisions

→‎{{header|Processing}}: adding Processing Python mode
(→‎{{header|Processing}}: adding Processing Python mode)
Line 2,015:
return true;
}</lang>
 
==={{header|Processing Python mode}}===
<lang Python>from collections import deque
 
tolerance = 15
allowed = False
 
def setup():
global img, fill_color
size(600, 400)
img = loadImage("image.png")
fill_color = color(250, 0, 0)
fill(0, 0, 100)
 
image(img, 0, 0, width, height)
textSize(18)
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:
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)
allowed = False
 
def mousePressed():
global img, allowed
img.loadPixels()
flood(mouseX, mouseY)
img.updatePixels()
allowed = True
if mouseButton == RIGHT:
img = loadImage("image.png")
 
def mouseWheel(event):
global allowed, tolerance
e = event.getCount()
tolerance += 2 * e
if tolerance > 256:
tolerance = 256
if tolerance < 0:
tolerance = 0
allowed = True
 
def flood(x, y):
target_color = img.pixels[pixel_position(mouseX, mouseY)]
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</lang>
 
=={{header|PureBasic}}==
Anonymous user