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
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
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
Aí vai dar para a gente ler.
[quote=jessetsilva]isso mesmo
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