Bitmap/Flood fill: Difference between revisions
Content added Content deleted
(Added Kotlin) |
(Added Julia language) |
||
Line 1,558: | Line 1,558: | ||
} |
} |
||
}</lang> |
}</lang> |
||
=={{header|Julia}}== |
|||
{{works with|Julia|0.6}} |
|||
Inspired to [[#Python | Python]] version. |
|||
<lang julia>using Images, FileIO |
|||
function floodfill!(img::Matrix{<:Color}, initnode::CartesianIndex{2}, target::Color, replace::Color) |
|||
img[initnode] != target && return img |
|||
# constants |
|||
north = CartesianIndex(-1, 0) |
|||
south = CartesianIndex( 1, 0) |
|||
east = CartesianIndex( 0, 1) |
|||
west = CartesianIndex( 0, -1) |
|||
queue = [initnode] |
|||
while !isempty(queue) |
|||
node = pop!(queue) |
|||
if img[node] == target |
|||
wnode = node |
|||
enode = node + east |
|||
end |
|||
# Move west until color of node does not match target color |
|||
while checkbounds(Bool, img, wnode) && img[wnode] == target |
|||
img[wnode] = replace |
|||
if checkbounds(Bool, img, wnode + north) && img[wnode + north] == target |
|||
push!(queue, wnode + north) |
|||
end |
|||
if checkbounds(Bool, img, wnode + south) && img[wnode + south] == target |
|||
push!(queue, wnode + south) |
|||
end |
|||
wnode += west |
|||
end |
|||
# Move east until color of node does not match target color |
|||
while checkbounds(Bool, img, enode) && img[enode] == target |
|||
img[enode] = replace |
|||
if checkbounds(Bool, img, enode + north) && img[enode + north] == target |
|||
push!(queue, enode + north) |
|||
end |
|||
if checkbounds(Bool, img, enode + south) && img[enode + south] == target |
|||
push!(queue, enode + south) |
|||
end |
|||
enode += east |
|||
end |
|||
end |
|||
return img |
|||
end |
|||
img = Gray{Bool}.(load("data/unfilledcircle.png")) |
|||
floodfill!(img, CartesianIndex(100, 100), Gray(false), Gray(true)) |
|||
save("data/filledcircle.png", img)</lang> |
|||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |