Percorrer matriz

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…

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++) {

[quote=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++) { [/quote]

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.

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.