Percorrer matriz

3 respostas
M

pessoal estou tentando percorrer uma matriz, mas não estou conseguindo.
a principio de tudo tenho desconfiança se minha lógica esta certa, mas mesmo assim esta dando um erro de estouro da matriz, mas não estou identificando o porque?

int novamatriz[][] = new int [3000][4000];  
int w=0,h=0; 
int cx=0, cy=0;
        for (int x = 1; x < imagem.getWidth(); x++) {      //laço para montar o tamanho da tabela  
           for (int y = 1; y < imagem.getHeight(); y++) {  
             if (matriz[x][y]==255) {                  //se o pixel é branco faça
                do  {  
              w++; h++;   //contadores da novamatriz
              cx=x;      //variável para controle da coordenada x
              cy=y;      // variável para controle da coordenada y

                      if ((matriz[x][y-1])==255) {   //aqui verifica o pixel vizinho se tb é branco                             
                            novamatriz[w][h]=(matriz[x][y-1]);    //joga o conteúdo do pixel para nova matriz
                            cx=x;                     //recebe a coordenada x
                            cy=y-1;                   //recebe a coordenada y
                      } else                       //se for true a anterio, pula os if restantes
                      if ((matriz[x+1][y-1])==255) { 
                           novamatriz[w][h]=(matriz[x+1][y-1]); 
                            cx=x+1;
                            cy=y-1;
                      } else  
                      if ((matriz[x][y-1])==255){    
                           novamatriz[w][h]=(matriz[x][y-1]); 
                            cx=x;
                            cy=y-1;
                      } else  
                      if ((matriz[x+1][y])==255){  
                            novamatriz[w][h]=(matriz[x+1][y]); 
                            cx=x+1;
                            cy=y;
                      } else  

                      if ((matriz[x+1][y+1])==255){     
                            novamatriz[w][h]=(matriz[x+1][y+1]);   
                            cx=x+1;
                            cy=y+1;
                      } else  
                      if ((matriz[x][y+1])==255){    
                           novamatriz[w][h]=(matriz[x][y+1]);  
                            cx=x;
                            cy=y+1;
                      }                
                 }  while ((novamatriz[w][h])==255);    //fazer enquanto a nova matriz for igual a branco               
System.out.println(novamatriz[x][y]);
System.out.print("coluna: "+cx);
System.out.println(" linha: "+cy);   
             }   // fim do if  
            
        }    // fim do for
   }    //fim do for

os valores da matriz são: 0, 255 e 110. já estão pré-definidos anteriormente… estou tentando percorrer a vizinhança dos valores dessa matriz…
o erro que aparece a principio é:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3000   //estouro da matriz
        at processamentojai.areadaimagem.<init>(areadaimagem.java:28)   //aqui ele se a refere a linha 28

não estou entendendo o porque deste erro…

3 Respostas

V

Bem, se você vai percorrer nos índices "x+1" e "y+1", então seu for não pode ir até o último índice da matriz…

Assim como você começa no 1, tem que terminar no width()-1 e no height()-1.

for (int x = 1; x &lt; imagem.getWidth()-1; x++) { //laço para montar o tamanho da tabela for (int y = 1; y &lt; imagem.getHeight()-1; y++) {

M

ViniGodoy:
Bem, se você vai percorrer nos índices "x+1" e "y+1", então seu for não pode ir até o último índice da matriz…

Assim como você começa no 1, tem que terminar no width()-1 e no height()-1.

for (int x = 1; x &lt; imagem.getWidth()-1; x++) { //laço para montar o tamanho da tabela for (int y = 1; y &lt; imagem.getHeight()-1; y++) {

ViniGodoy
mudei o código, e continua dando o mesmo erro…
estoura a matriz…
então mudei o restante pra tentar algo diferente:

if ((matriz[x][y-1])==255) {                            
                            novamatriz[w][h]=255;     
                            cx=x;                       
                            cy=y-1;                     
                      } else                         
                      if ((matriz[x+1][y-1])==255) {   
                           novamatriz[w][h]=255;   
                            cx=x+1;  
                            cy=y-1;  
                      } else    
                      if ((matriz[x][y-1])==255){      
                           novamatriz[w][h]=255;   
                            cx=x;  
                            cy=y-1;  
                      } else    
//e o restante...

e também continua dando o erro…
inicializei a variavel nova matriz com valor null, e tb não deu certo…
sempre continua o erro de exceder a matriz… fiz com vetor e ficou na mesma.
não entendendo porque continua dando o mesmo erro.

J

Verifica a profundidade de pixels da imagem. Se for 24 bits,(3 bytes), precisa criar uma matriz cuja largura e altura sejam multiplos de 3.

Agora não entendi porque usar um vetor bidimensional. Uma imagem pode ser muito bem representada com uma úcica dimensão.

Criado 28 de novembro de 2009
Ultima resposta 30 de nov. de 2009
Respostas 3
Participantes 3