Problema ao contar pixels com laço for. (RESOLVIDO)

Boa tarde senhores,

Estou tentando desenvolver um pequeno software de leitura de cartão resposta. Bom sou iniciante em java, por tanto se ele parecer rudimentar e logo de cara voces perceberem que há 1000 outras formas melhores de fazê-lo, é porque eu estou tentando fazer ele com o pouco conhecimento em java que eu tenho.

Enfim minha dúvida é bem simples, nesta classe, eu pego uma imagem do disco, e vou “varrendo” pixel a pixel descobrindo seu valor RGB para identificar o que é preto e o que é branco. Simples assim.

Porém no laço for do método showpixels(), ele não vai até o final do valor da variavel. Por exemplo são 2 laços for, um dentro do outro, que incrementam +1 nas variaveis altura e largura, carregando uma imagem com 800x600, o laço está parando em 599 x 599.

[code]

//…devidos imports…

public class Imagem{
public void showpixels()
{
try{
File arquivo = escolherArquivos();
BufferedImage imagem = ImageIO.read(arquivo);
int altura = imagem.getHeight();
int largura = imagem.getWidth();

    System.out.println("Altura, Largura:"+altura+","+largura);

    for (int i = 0; i < altura; i++){     // o problema está aqui 
       for (int j = 0; j < largura; j++){
           int pixel = imagem.getRGB(i, j); // eu reparei o seguinte aqui se eu comento esta linha o laço conta normalmente até o final.
           System.out.println(i+","+j);
           printpixels(pixel);  }
                                    }
}catch(IOException e){
    e.printStackTrace();}
}

public void printpixels(int pixel){

int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
System.out.println("argb: " + red + ", " + green + ", " + blue);

}
public File escolherArquivos()throws IOException {

    File arquivos  = null;
    JFileChooser fc = new JFileChooser();
    fc.setDialogTitle("Escolha o(s) arquivo(s)...");
    fc.setDialogType(JFileChooser.OPEN_DIALOG);
    fc.setApproveButtonText("OK");
    fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
    fc.setMultiSelectionEnabled(true);
    int resultado = fc.showOpenDialog(fc);
    if (resultado == JFileChooser.CANCEL_OPTION){
      return null;}
    arquivos = fc.getSelectedFile();
      return arquivos;
}

}[/code]

Enfim, revisei várias vezes, mas não cheguei ao porque isso está acontecendo… se puderem me ajudar, fico mto agradecido, abs!

getRGB tem 2 parâmetros, x e y. Só que você está usando “i” e “j” e isso é que confundiu sua cabeça. Se você tivesse feito isto aqui:

        for (int x = 0; x < largura; x++){     // o problema está aqui   
           for (int y = 0; y < altura; y++){  
               int pixel = imagem.getRGB(x, y); 
               System.out.println(x+","+y);  
               printpixels(pixel);  }  
                                        } 

teria percebido a burrada.

Então kra, assim eu li mas não entendi muito bem oq voce quiz dizer, meu racionio foi : o getRGB pede 2 parametros do tipo int. Eu fui lá e coloquei 2 variáveis do tipo int. Ai q eu não entendi sua explicação, qual a diferença do i,j para o x,y (considerando todas como variáveis) ???

É que se você tivesse usado “x” e “y”, teria visto que x tem de percorrer os valores de 0 até a largura, não a altura, e assim por diante.

Como você usou “i” e “j”, você não conseguiu associar que '“i” tinha de percorrer os valores de 0 até a largura, não a altura.

Usando nomes mais significativos, como “x” ou “y”, é mais fácil você fazer as coisas corretas.

Po kra… agora eu entendi onde foi minha confuzão… vlw kra muito obrigado pela explicação…