| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/08/2009 14:12:08
|
alexcostars
JavaTeenager
Membro desde: 10/01/2009 13:08:13
Mensagens: 183
Localização: Rio Grande do Sul
Offline
|
Pessoal, será que existe alguma classe Java (mesmo que seja de terceiros (externa)) que verifique mudanças drásticas em imagens? Vou explicar melhor:
Queria desenvolver um aplicativo que comparasse imagens e que se as duas imagens comparadas fossem diferentes ele daria um sinal. Resolvi usar a classe Robot que já vem com o Java para analisar pixel a pixel (nela tem um método que verifica a cor do pixel). O problema é que esse método no Robot analisa o pixel do monitor e não de uma imagem, e como eu gostaria de analisar as imagens sem que o usuário precisa-se ver-las, não funcionaria. Caso alguém saiba como analisar o pixel de uma imagem, será que poderia me dizer?
Acredito que não exista mesmo, mas não custa tentar perguntar, já vi tanta coisa no Java que não duvido de mais nada
Muito Obrigado
|
 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/08/2009 19:33:19
|
alexcostars
JavaTeenager
Membro desde: 10/01/2009 13:08:13
Mensagens: 183
Localização: Rio Grande do Sul
Offline
|
alexcostars wrote:Pessoal, será que existe alguma classe Java (mesmo que seja de terceiros (externa)) que verifique mudanças drásticas em imagens? Vou explicar melhor:
Queria desenvolver um aplicativo que comparasse imagens e que se as duas imagens comparadas fossem diferentes ele daria um sinal. Resolvi usar a classe Robot que já vem com o Java para analisar pixel a pixel (nela tem um método que verifica a cor do pixel). O problema é que esse método no Robot analisa o pixel do monitor e não de uma imagem, e como eu gostaria de analisar as imagens sem que o usuário precisa-se ver-las, não funcionaria. Caso alguém saiba como analisar o pixel de uma imagem, será que poderia me dizer?
Acredito que não exista mesmo, mas não custa tentar perguntar, já vi tanta coisa no Java que não duvido de mais nada
Muito Obrigado
Galera, como eu realmente não acredito que exista como, eu fiz pela classe Robot mesmo. Para que eu possa analisar eu preciso colocar a imagem na tela (eu coloco ela como um ícone de Label), o problema é que eu não sei em que posição X-Y da tela o componente está. Será que existe alguma maneira que eu possa descobrir em qual X e Y (em pixels) os componentes de meu jFrame começam?
vlw
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2009 08:21:49
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Você pode pegar ambas as imagens e efetuar uma operação aritmética sobre elas (tipicamente XOR). Se algo aparecer que for diferente de 0, então é um pixel diferente.
Rode o programa Java2Demo (que é um programa que está em <diretório do JDK>\demo\jfc\Java2D ) e veja o demo do tab Composite que se chama AC Rules. Há uma figura que é a XOR; quando você faz XOR de 2 figuras exatamente iguais, o resultado deve ser um bitmap preto. Se elas forem diferentes por um pixel (por exemplo), deve aparecer um pixel em uma cor diferente de preto.
Os fontes estão nesse mesmo diretório (Java2Demo.)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2009 08:47:19
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline
|
Voce tem que pegar o WritableRaster da Bufferedimage que quer analizar.
|
Facebook @MarkyHitchhiker +Mark WP: MarkyTech's
Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais
DefaultTableModel?! PARE! Não faça isso! Faça melhor!
Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)
Develop games is fantastic, with words you can make worlds!!!
DON'T PANIC!
MarkyHitchhiker's Blog! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2009 09:30:28
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20576
Localização: Curitiba/PR
Offline
|
Usar Robot foi uma péssima idéia. O ideal é usar o Java2D para trabalhar com imagens, como o Mark falou, através da classe BufferedImage. Este tutorial explica como trabalhar com a classe: http://java.sun.com/docs/books/tutorial/2d/images/index.html E esses aqui falam mais sobre o uso de rasters, que permitem fazer o que você quer (analisar pixel-a-pixel): http://javaboutique.internet.com/tutorials/rasters/ http://javaboutique.internet.com/tutorials/rasters2/ Agora, é sempre bom definir o que você entende por uma imagem "muito diferente" da outra. Pois, dependendo do que você queira analisar, esse pode ser um trabalho muito complexo ou muito simples.
This message was edited 1 time. Last update was at 17/08/2009 09:33:06
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2009 10:00:15
|
KWill
Virtual Machine Man
![[Avatar]](/images/avatar/042aec9e604155f2f06c0a16c5f9ba06.jpg)
Membro desde: 18/09/2006 10:05:46
Mensagens: 609
Offline
|
Minha sugestão: use a classe PixelGrabber ou esta classe aqui que é ainda melhor para ter uma representação da imagem ou parte de imagem como um vetor de inteiros, onde cada elemento desse vetor de inteiros representa exatamente 1 pixel dessa imagem ou subimagem. A partir dessas representações acho que dá para ir comparando as coisas.
Inté.
|
"Só estou certo de que não possuo outras certezas" - KWill
"Não penso, mas Googlo, logo existo!" - Geração Copy-Cola |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2009 17:01:23
|
alexcostars
JavaTeenager
Membro desde: 10/01/2009 13:08:13
Mensagens: 183
Localização: Rio Grande do Sul
Offline
|
Rode o programa Java2Demo (que é um programa que está em <diretório do JDK>\demo\jfc\Java2D ) e veja o demo do tab Composite que se chama AC Rules. Há uma figura que é a XOR; quando você faz XOR de 2 figuras exatamente iguais, o resultado deve ser um bitmap preto. Se elas forem diferentes por um pixel (por exemplo), deve aparecer um pixel em uma cor diferente de preto.
Os fontes estão nesse mesmo diretório (Java2Demo.)
Bah kra, gostei disso que vc falou, entrei lá e rodei certinho, até achei o "ícone" lá, o problema é que não descobri onde escolher as imagens para dar uma testada (se é que tem como). Será que vc podia me passar uns links sobre esse XOR porque pesquisei no Google mas a maioria era outro assunto, os poucos que encontrei apenas falavam para que servia, mas nenhum ensinava a usar "via código".
Muito Obrigado!
|
 |
|
|
 |
|
|