Galera, tenho um método que é chamado dentro de um while o qual roda centenas de vezes, pois estou fazendo o processamento de uma imagem através de 4 vizinhança.
Dentro desse método, vou empilhando pontos que indicam as posições x e y de um pixel da imagem.
Enfim, por haver um while loopando centenas de vezes tá enchendo a memória.
Alguém poderia me dar uma idéia de otimização!?!?!
Grato
public void verificaPonto(int[][] matriz, int largura, int altura, Integer[] ponto){
if(matriz[0][0] == 1 && ponto[0] > 0 && ponto[1] > 0){
if(image.getRGB(ponto[0]-1, ponto[1]-1) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0]-1;
pont[1] = ponto[1]-1;
lista.add(pont);
pont = null;
}
}
if(matriz[1][0] == 1 && ponto[1] > 0){
if(image.getRGB(ponto[0], ponto[1]-1) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0];
pont[1] = ponto[1]-1;
lista.add(pont);
pont = null;
}
}
if(matriz[2][0] == 1 && ponto[0] < largura-1 && ponto[1] > 0){
if(image.getRGB(ponto[0]+1, ponto[1]-1) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0] + 1;
pont[1] = ponto[1] - 1;
lista.add(pont);
pont = null;
}
}
if(matriz[0][1] == 1 && ponto[0] > 0){
if(image.getRGB(ponto[0]-1, ponto[1]) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0] - 1;
pont[1] = ponto[1];
lista.add(pont);
pont = null;
}
}
if(matriz[1][1] == 1){
if(image.getRGB(ponto[0], ponto[1]) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0];
pont[1] = ponto[1];
lista.add(pont);
pont = null;
}
}
if(matriz[1][2] == 1 && ponto[1] < altura-1){
if(image.getRGB(ponto[0], ponto[1]+1) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0];
pont[1] = ponto[1]+1;
lista.add(pont);
pont = null;
}
}
if(matriz[0][2] == 1 && ponto[0] > 0 && ponto[1] < altura-1){
if(image.getRGB(ponto[0]-1, ponto[1]+1) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0]-1;
pont[1] = ponto[1]+1;
lista.add(pont);
pont = null;
}
}
if(matriz[2][1] == 1 && ponto[0] < largura-1){
if(image.getRGB(ponto[0]+1, ponto[1]) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0];
pont[1] = ponto[1]+1;
lista.add(pont);
pont = null;
}
}
if(matriz[2][2] == 1 && ponto[0] < largura-1 && ponto[1] < altura-1){
if(image.getRGB(ponto[0]+1, ponto[1]+1) == Color.BLACK.getRGB()){
Integer[] pont = new Integer[2];
pont[0] = ponto[0]+1;
pont[1] = ponto[1]+1;
lista.add(pont);
pont = null;
}
}
int x = lista.get(lista.size()-1)[0];
int y = lista.get(lista.size()-1)[0];
saida.setRGB(x,y,Color.BLACK.getRGB());
image.setRGB(x,y,Color.WHITE.getRGB());
lista.remove(lista.size()-1);
}