Pixels repetidos

Pixels repetidos

por Fabio Brzostek Muller -
Número de respostas: 2

Olá,

Recentemente alterei minhas funções regioesImagem e pixelsRegiao para resolver algumas falhas e, aparentemente, meu programa funciona sem problemas.

Acontece que, ao mandar ele imprimir as regiões e seus respectivos números de pixels, eu vi que o número de pixels em cada região é bem maior do que deveria (tanto comparando com o executável como fazendo a conta de quantos pixels a imagem tem no total).

Como o programa não dá segFault e as mudanças de cores e exibições das regiões e etc. funcionam normalmente, acho que dá pra concluir que o programa está pondo em cada lista de pixels de uma região os mesmos pixels mais de uma vez (afinal, se fossem pixels não existentes daria segFault ou qualquer erro, e se fossem os que não são dessa região, as trocas não funcionariam corretamente, certo?).

Já procurei no programa onde isso poderia estar acontecendo, se a condição de o pixel ter sido visitado estava sendo checada e tudo, mas ainda não achei nada... É isso mesmo que devo procurar? E, se for o caso, alguém tem mais alguma ideia do motivo disso estar acontecendo?

EDIT: Consegui resolver o problema, mas não entendi muito bem porque... No começo da pixelsRegiao, eu checava quais das direções tinham vizinhos não visitados (da mesma cor que o pixel que "chamou" a função) e guardava essa informação, para depois fazer as chamadas recursivas de acordo com isso. 

Fui por uma condição redundante (já que isso já era checado no começo) antes de fazer as chamadas recursivas para cada região, checando se de fato ela não havia sido visitada, e isso resolveu o problema... 

Em resposta à Fabio Brzostek Muller

Re: Pixels repetidos

por Gabriel Ogawa -

Acontecia pois, por exemplo, se você fazia a recursiva de um pixel pra cima, esse pixel provavelmente chamaria os das diagonais superiores, do original, e quando você voltasse para o original ele chamaria as diagonais de novo por não checar novamente se elas haviam sido visitadas após a chamada recursiva.