Bitmap/Flood fill: Difference between revisions
Content added Content deleted
(→{{header|Processing}}: adding Processing Python mode) |
|||
Line 2,015: | Line 2,015: | ||
return true; |
return true; |
||
}</lang> |
}</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}}== |
=={{header|PureBasic}}== |