Ler imagens

alguem sabe uma maneira pratica de ler imagens tipo BMP sem usar nenhuma solução do jáva tipo JAI ou coisas assim?

BufferedImage suaImagem = ImageIO.read(getClass().getResource("imagens/seuBmp.bmp"));

Isso vai estar num try, que terá alguns catchs. Para mais informações:
http://java.sun.com/docs/books/tutorial/2d/images/loadimage.html

E aí, fera!
Maninho, você quer apenas ler e armazenar numa BufferedImage, como o mestre ViniGodoy indicou, ou você precisa também visualizá-la? Parece meio óbvia a pergunta, mas tenho que perguntar, já que você não mencionou. E se precisar visualizar, qual tipo de interface você está usando?
É só dizer o que mais quer fazer que a gente dá uma forcinha, rsrsrsrs…
Um abraço!

ah sim, detalhe que esqueci hehe

quero ler esta imagem para capturar suas infomrações de RGB e depois criar um Histograma dela, trabaçho da faculdade

Obrigado a todos pela ajuda :slight_smile:

Dá-lhe, fera!
Cara, capturar as informações RGB é facil, é só usar Raster para varrer a imagem pixel a pixel registrando as cores Red Green e Blue em vetores para cada uma… Recentemente tive que modificar determinadas ocorrências de cores e foi assim que eu varri a imagem para saber onde estavam as cores a serem modificadas; funcionará perfeitamente para você… É isso mesmo que precisa (armazenar os códigos RGB da imagem pixel a pixel)?

isso mesmo :slight_smile:

mto obrigado, só espero agora ue o professor aceite esta maneira, hehe

Valeu a todos!

uma resposta assim talvez seja melhor

try
{
JFileChooser busca_foto = new JFileChooser();
busca_foto.setCurrentDirectory(new File("/Zeus/imagens/"));
busca_foto.setDialogTitle(“Carregar imagem da Cidade”);
busca_foto.showOpenDialog(this);
String foto = “”+busca_foto.getSelectedFile().getName();
tf_foto.setText(foto);
lbl_imagem.setIcon(new ImageIcon("/Zeus/imagens/"+tf_foto.getText()));
}
catch(Exception erro)
{
JOptionPane.showMessageDialog(null,“Nao foi possível carregar a foto.”);

a linha abaixo vai no seu resultset…
lbl_imagem.setIcon(new ImageIcon("/Zeus/imagens/"+tf_foto.getText()));
}

esta ultima linha serve para o a imgem ser atualizada toda vez que mudar de registro

Melhor ainda se a resposta for formatada seguindo essas dicas:
http://www.guj.com.br/posts/list/50115.java

:wink:

Aí vai dar para a gente ler.

[quote=jessetsilva]isso mesmo :slight_smile:
mto obrigado, só espero agora ue o professor aceite esta maneira, hehe[/quote]
Brother, se você fizer direitinho não vai ter como ele não aceitar, rsrsrssrs…
Para te ajudar, vai aí um exemplo de como fazer o que eu falei…

[code]BufferedImage imagem;
Raster raster; // se precisar alterar os pixels ao invés de só captura-los,
// use WritableRaster no lugar de Raster…
try {
imagem = ImageIO.read(new File(“imagens/seuBmp.bmp”));
}
catch (IOException ex) {
ex.printStackTrace(); // claro que você pode fazer um tratamento de erros menos sujo, rsrsr
}

raster = imagem.getRaster();
int cores[] = new int[255];
// esse vetor “cores[]” vai armazenar as cores RGB
// [0] será Red®, [1] será Green(G) e [2] será Blue(B)

for (int x = 0; x < imagem.getWidth(); x++) {
for (int y = 0; y < imagem.getHeight(); y++) {
raster.getPixel(x, y, cores); // captura da combinação de cor do pixel
System.out.println(“R(”+cores[0]+") G("+cores[1]+") B("+cores[2]+")");
// essa saída é só pra você testar e ver que dá certo, rsrrs
// lembrando que isso vai fazer o processo ficar bem mais lento
}
}
// esses laços varrem todo o objeto “imagem”,
// saindo do eixo 0,0 até o último pixel da mesma[/code]
Aí você faz o que quiser com os pixels, brother, rsrsrsrsrs…
Deu até vontade de fazer um histograma também, se eu tivesse um tempinho, rsrsrs…
Testa aí e me diz se te ajuda…
Um abração!

Ahhh, esqueci de lhe falar…
Se você usar “getClass().getResource(“imagens/seuBmp.bmp”)” ao invés de “new File(“imagens/seuBmp.bmp”)”, as imagens deverão estar no diretório de sua aplicação com definição no classpath… Caso queira implementar um JFileChooser para possibilitar ao usuário a seleção de qualquer imagem em qualquer diretório use new File…
Um abraço!

[quote=parcon]uma resposta assim talvez seja melhor

try
{
JFileChooser busca_foto = new JFileChooser();
busca_foto.setCurrentDirectory(new File("/Zeus/imagens/"));
busca_foto.setDialogTitle(“Carregar imagem da Cidade”);
busca_foto.showOpenDialog(this);
String foto = “”+busca_foto.getSelectedFile().getName();
tf_foto.setText(foto);
lbl_imagem.setIcon(new ImageIcon("/Zeus/imagens/"+tf_foto.getText()));
}
catch(Exception erro)
{
JOptionPane.showMessageDialog(null,“Nao foi possível carregar a foto.”);

a linha abaixo vai no seu resultset…
lbl_imagem.setIcon(new ImageIcon("/Zeus/imagens/"+tf_foto.getText()));
}[/quote]
Parece que isso não responde o tópico… Esse código implementa a visualização de uma imagem em um jLabel, mas a intenção é mais complexa pois se trata de analisar a imagem e traçar propriedades de cores com o histograma, como o amigo já disse…
Um abraço!

vou experimentar e depois doum um retorno. Obrigado mais uma vez a todos pela ajuda!

Queria aproveitar esse tópico pra pedir uma forcinha tbm :).

Primeiro, uma dúvida com o seguinte código:

BufferedImage imagem;  
Raster raster; // se precisar alterar os pixels ao invés de só captura-los,  
                     // use WritableRaster no lugar de Raster...  
try {  
    imagem = ImageIO.read(new File("imagens/seuBmp.bmp"));  
}  
catch (IOException ex) {  
    ex.printStackTrace(); // claro que você pode fazer um tratamento de erros menos sujo, rsrsr  
}  
  
raster = imagem.getRaster();  
int cores[] = new int[255];  
// esse vetor "cores[]" vai armazenar as cores RGB  
// [0] será Red(R), [1] será Green(G) e [2] será Blue(B)  
  
for (int x = 0; x < imagem.getWidth(); x++) {  
    for (int y = 0; y < imagem.getHeight(); y++) {  
        raster.getPixel(x, y, cores); // captura da combinação de cor do pixel  
        System.out.println("R("+cores[0]+") G("+cores[1]+") B("+cores[2]+")");  
        // essa saída é só pra você testar e ver que dá certo, rsrrs  
        // lembrando que isso vai fazer o processo ficar bem mais lento  
    }  
}  
// esses laços varrem todo o objeto "imagem",   
// saindo do eixo 0,0 até o último pixel da mesma 

Esse vetor de 255 posições poderia ter apenas 3 posições, ou estou enganado?

Agora, queria pedir ajuda no seguinte:

Preciso ler uma imagem que já está em “grayscale”, pixel por pixel, e armezenar o número que representa cada pixel numa matriz…alguém me dá uma luz?

[quote=rod.attack]Queria aproveitar esse tópico pra pedir uma forcinha tbm :).

Primeiro, uma dúvida com o seguinte código:

BufferedImage imagem;  
Raster raster; // se precisar alterar os pixels ao invés de só captura-los,  
                     // use WritableRaster no lugar de Raster...  
try {  
    imagem = ImageIO.read(new File("imagens/seuBmp.bmp"));  
}  
catch (IOException ex) {  
    ex.printStackTrace(); // claro que você pode fazer um tratamento de erros menos sujo, rsrsr  
}  
  
raster = imagem.getRaster();  
int cores[] = new int[255];  
// esse vetor "cores[]" vai armazenar as cores RGB  
// [0] será Red(R), [1] será Green(G) e [2] será Blue(B)  
  
for (int x = 0; x < imagem.getWidth(); x++) {  
    for (int y = 0; y < imagem.getHeight(); y++) {  
        raster.getPixel(x, y, cores); // captura da combinação de cor do pixel  
        System.out.println("R("+cores[0]+") G("+cores[1]+") B("+cores[2]+")");  
        // essa saída é só pra você testar e ver que dá certo, rsrrs  
        // lembrando que isso vai fazer o processo ficar bem mais lento  
    }  
}  
// esses laços varrem todo o objeto "imagem",   
// saindo do eixo 0,0 até o último pixel da mesma 

Esse vetor de 255 posições poderia ter apenas 3 posições, ou estou enganado?

Agora, queria pedir ajuda no seguinte:

Preciso ler uma imagem que já está em “grayscale”, pixel por pixel, e armezenar o número que representa cada pixel numa matriz…alguém me dá uma luz?
[/quote]

Brother,
Respondendo sua primeira pergunta, eu tb achei que 3 posições bastariam, já que só extraio 3 posições do vetor, porém, quando defino apenas as 3 posições então tenho um erro quanto à quantidade insuficiente de posições do vetor… Tentei outros valores mais próximos a 3 e dependendo da imagem dava certo e outras não… Não fiz um teste, mas imaginei então que esse vetor deve guardar outras informações em outras posições e resolvi usar um valor alto e simbólico, para ter certeza que nunca falharia, e por isso usei 255… Se alguém souber explicar direitinho isso, seria legal…

Agora, não entendi o sou problema.
1 - Você quer fazer a mesma leitura RGB da imagem, só que ela estando em escala de cinza?
2 - Voce quer criar uma matriz para saber quantas linhas e colunas se obtem de uma dada imagem em escala de cinza?
3 - Ou o que?

Estamos ai…

Então, é o seguinte:

Eu preciso de um jeito de percorrer uma imagem que já está em grayscale pixel por pixel. Na verdade, preciso ser capaz de armazenar numa matriz ou vetor o número inteiro que representa o tom de cinza de cada pixel…como a imagem está em grayscale, preciso que cada pixel seja representado por um valor entre 0 e 255.
Esse é um software que lê um radiografia e dependendo do range em que estiver o tom de cinza do pixel, ele indica que ali há uma probabilidade maior de se ter um tumor…

Editando:

Ops, a net caiu e acabei mandando a mesma mensagem duas vezes :slight_smile: