Bitmap/Flood fill: Difference between revisions

Content added Content deleted
Line 2,023: Line 2,023:
<lang Python>from collections import deque
<lang Python>from collections import deque


tolerance = 15
fill_color = color(250, 0, 0)
fill_color = color(250, 0, 0)
tolerance = 15
allowed = False
allowed = False


Line 2,042: Line 2,042:
if allowed:
if allowed:
image(img, 0, 0, width, height)
image(img, 0, 0, width, height)
text("Tolerance = {} (Use mouse wheel to change)".format(tolerance), 100, height - 30)
text("Tolerance = {} (Use mouse wheel to change)".format(
tolerance), 100, height - 30)
text("Right click to reset", 100, height - 10)
text("Right click to reset", 100, height - 10)
allowed = False
allowed = False


def mousePressed():
def mousePressed():
global img, allowed
global allowed, img
img.loadPixels()
flood(mouseX, mouseY)
img.updatePixels()
allowed = True
if mouseButton == RIGHT:
if mouseButton == RIGHT:
img = loadImage("image.png")
img = loadImage("image.png")
else:
img.loadPixels()
flood(mouseX, mouseY)
img.updatePixels()
allowed = True


def mouseWheel(event):
def mouseWheel(event):
Line 2,059: Line 2,061:
e = event.getCount()
e = event.getCount()
tolerance += 2 * e
tolerance += 2 * e
if tolerance > 256:
if tolerance > 128:
tolerance = 256
tolerance = 128
if tolerance < 0:
if tolerance < 0:
tolerance = 0
tolerance = 0
Line 2,067: Line 2,069:
def flood(x, y):
def flood(x, y):
target_color = img.pixels[pixel_position(mouseX, mouseY)]
target_color = img.pixels[pixel_position(mouseX, mouseY)]
if target_color != fill_color:
queue = deque()
queue.append((x, y))
queue = deque()
queue.append((x, y))
while len(queue) > 0:
p_x, p_y = queue.popleft()
while len(queue) > 0:
if (check(p_x, p_y, target_color)):
p_x, p_y = queue.popleft()
queue.append((p_x, p_y - 1))
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, p_y + 1))
queue.append((p_x + 1, p_y))
queue.append((p_x - 1, p_y))
queue.append((p_x + 1, p_y))


def pixel_position(x, y):
def pixel_position(x, y):