elvisclaudino / flood-fill-java

Estrutura de Dados (4° período): O algoritmo de Flood Fill é usado para preencher áreas em imagens, como em softwares de desenho e jogos. Ele altera nós conectados, preenchendo-os com uma cor específica. A implementação pode usar pilha e fila para percorrer e modificar pixels em uma região contígua, substituindo a cor atual pela nova cor.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Flood Fill

Flood Fill é um algoritmo que tem como objetivo alterar a informação de nós (nodes) que estão conectados. Esse algoritmo é utilizado na ferramenta “balde” de softwares de desenho (como paint) e pode ser utilizado também em jogos como Go e Campo Minado para determinar quais posições serão limpas.

Imagine que cada quadrado na imagem é um pixel de uma imagem qualquer. No exemplo a imagem possui um fundo inteiro branco, e uma linha preta na diagonal. Essa imagem pode ser representada por uma matriz de pixels no nosso código.

image

Informamos ao programa uma coordenada inicial para obter um ponto de partida e guardamos a cor de fundo em uma variável. Esse ponto é armazenado numa Pilha/Fila e então começa o nosso loop de repetição. O ponto inicial é desempilhado/desenfileirado e preenchido com a nova cor. Em seguida, empilhamos/enfileiramos os 4 vizinhos laterais deste ponto.

image

Começamos o loop novamente, e então pintamos o pixel que foi desempilhado/desenfileirado. É importante que sempre ocorra uma verificação para checar se o pixel não está ultrapassando o limite da matriz (Index Out Of Bounds) e se a cor é igual a cor de fundo que foi armazenada no início do programa em uma variável (no caso desse exemplo, branco). Só iremos pintar o pixel caso essa condição seja atendida. Esse processo continua se repetindo enquanto a condição for atendida.

image

Pixels de cores diferentes do que a cor de fundo armazenada inicialmente são empilhados/enfileirados, mas nunca são pintados, pois não atendem as condições da checagem que é realizada dentro do loop (descrita anteriormente). O mesmo acontece com pixels inexistentes na imagem (fora da matriz).

image

Por não atenderem as condições de checagem, seus vizinhos também nunca são empilhados/enfileirados.

image

O algoritmo encerra quando todos os pixels tiverem sido preenchidos.

image

About

Estrutura de Dados (4° período): O algoritmo de Flood Fill é usado para preencher áreas em imagens, como em softwares de desenho e jogos. Ele altera nós conectados, preenchendo-os com uma cor específica. A implementação pode usar pilha e fila para percorrer e modificar pixels em uma região contígua, substituindo a cor atual pela nova cor.


Languages

Language:Java 100.0%