| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/07/2008 14:41:38
|
Linkel
JavaEvangelist
![[Avatar]](/images/avatar/ff4c48e9995f076b26fb2a90ae28d5aa.jpg)
Membro desde: 09/08/2007 10:51:16
Mensagens: 476
Offline
|
Olá, galera!
Implementei um JPanel para visualizar a imagem de um boné, no formato .png...
O problema é que preciso modificar as cores de cada parte do boné, conforme o usuário for definindo...
Tipo, o usuário define a cor da toca do boné de Vermelho e então o bonezinho desenhado no JPanel fica com a toca em Vermelho... O usuário define a cor da toca para Azul e no mesmo desenho é pintada a aba em Azul, e assim por diante...
Pensei em criar vários desenhos de bonés, um para cada cor disponível e para cada parte que poderá ser modificada a cor, deixando as outras partes transparentes para então adicionar a imagem com a cor correta ao JPanel em cima da(s) outra(s) já definida(s), formando assim, ao final, o boné com várias imagens definindo as cores e o modelo... Mas, da forma que eu pinto a imagem no JPanel não consigo colocar uma por cima da outra...
Pensei também em criar isso em Flash para que eu pudesse gerar a imagem e guarda-la no banco, porém não imagino como vou guardar também as informações sobre os atributos definidos separados nos outros campos do banco de dados e nem como integrar isso ao swing...
E então pensei em Pintar apenas os pixels da região que estiver modificando a cor (seria a melhor opção para mim, porque não precisaria ficar desenhando centenas de imagens com todas as possibilidades de cores e modelos requeridos pelo usuário final)...
Mas eu não sei como fazer isso!
Alguém sabe como pintar uma determinada área da imagem (tipo BufferedImage) com as cores que eu quiser???
Se sim, sabe também se tem como definir a área respeitando exatamente os limites das partes do boné?
E ainda, alguém sabe outras formas para solucionar o meu problema?
Aguardo respostas.
Grato.
This message was edited 3 times. Last update was at 11/07/2008 14:52:49
|
http://intelectolivre.blogspot.com "A liberdade dominando a mente!"
__
Lindoélio Lázaro
Pós-graduado em Desenvolvimento de Sistemas para a Web |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2008 11:30:30
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
O ideal é criar várias imagens, uma para cada parte do boné, e então junta-las.
Você cria uma série de imagens de abas, com fundo transparente, uma de cada cor.
Depois cria uma série de imagens da parte de cima do boné, com fundo transparente.
E então, monta uma bufferedImage que nada mais é do que as duas combinadas. Essa imagem final você exibe no seu painel.
|
@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) 14/07/2008 11:39:01
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
Há ainda uma forma de mudar para qualquer cor.
Ainda com 2 imagens separadas:
Crie uma imagem da parte de cima do boné, mas ponha a cor dele com uma cor conhecida, como verde (0,255,0). Certifique-se que só a área que será pintada tem essa cor.
Faça o mesmo para aba.
Essas imagens serão sua matriz.
Faça um método que, dado uma imagem, uma cor de origem e uma cor de destino, substitua todas as ocorrências da cor de origem pela cor de destino. Assim você pode pintar as áreas verdes da cor que quiser. Para isso, você vai ter que percorrer a imagem original com um raster:
http://javaboutique.internet.com/tutorials/rasters/
http://javaboutique.internet.com/tutorials/rasters2/
Finalmente, aplique essa função tanto para a aba, quanto para o boné em si. Depois junte as duas imagens numa só e exiba para seu usuário.
|
@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) 14/07/2008 15:34:13
|
Linkel
JavaEvangelist
![[Avatar]](/images/avatar/ff4c48e9995f076b26fb2a90ae28d5aa.jpg)
Membro desde: 09/08/2007 10:51:16
Mensagens: 476
Offline
|
Aí, brother...
Sabia que iria me ajudar, rsrsrsr... Agradeço muito!
ViniGodoy disse: "O ideal é criar várias imagens, uma para cada parte do boné, e então junta-las.
Você cria uma série de imagens de abas, com fundo transparente, uma de cada cor.
Depois cria uma série de imagens da parte de cima do boné, com fundo transparente.
E então, monta uma bufferedImage que nada mais é do que as duas combinadas. Essa imagem final você exibe no seu painel."
Estive calculando por alto quantas imagens eu teria que criar para satisfazer todas as possibilidades que deveriam ser cedidas com essa forma de implementação e o resultado é estonteante! Isso, porque tenho que dar a possibilidade de modificar as cores de cada gomo que formam a toca do boné, do botão que fica na parte superior, da parte superior da aba, bem como da inferior, do sutache da aba (quando tiver), da cor da fivela (para cada modelo de fivela), da cor do suador; além de ter que mostrar o bonezinho em 5 ângulos diferentes para todos os modelos, respeitando todas as cores definidas! Assim, dá pra imaginar a quantidade de imagens que teria que criar com cada cor...
ViniGodoy disse: Faça um método que, dado uma imagem, uma cor de origem e uma cor de destino, substitua todas as ocorrências da cor de origem pela cor de destino. Assim você pode pintar as áreas verdes da cor que quiser. Para isso, você vai ter que percorrer a imagem original com um raster(...)
Finalmente, aplique essa função tanto para a aba, quanto para o boné em si. Depois junte as duas imagens numa só e exiba para seu usuário.
Essa seria, pelo meu ver, a solução mais viável! Assim eu poderia criar um método que aceite qualquer cor RGB obtida por um JColorChoose, por exemplo, sem me limitar a uma determinada lista de imagens, e sem a trabalheira de ter que criar esse tanto de imagens... Seria perfeito! Eu poderia atribuir cores mais "singulares" para cada componente do boné e reservá-las, utilizando-as para todos os ângulos; assim eu teria que criar apenas uma imagem para cada ângulo de visão e para cada modelo, e apenas modificar as cores reservadas de origem pelas de destino que o usário selecionar através do JColorChooser, criando uma BufferedImage com as cores reservadas e modificando essa bufferedImage com as cores selecionadas... Não é mesmo? Mas eu não entendi como trabalhar com raster (apanho muito por ser iniciante); não conseguir visualizar como vou pegar a cor de referência e substituir pela nova cor...
Você sabe mexer com raster? Pode me dar uma força???
|
http://intelectolivre.blogspot.com "A liberdade dominando a mente!"
__
Lindoélio Lázaro
Pós-graduado em Desenvolvimento de Sistemas para a Web |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2008 16:55:33
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
Posso sim, não é tão difícil quanto parece. Basicamente é só usar os gets e sets que ele fornece.
Leia os tutoriais ali em cima e qualquer dúvida posta aqui.
|
@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) 14/07/2008 18:01:17
|
Linkel
JavaEvangelist
![[Avatar]](/images/avatar/ff4c48e9995f076b26fb2a90ae28d5aa.jpg)
Membro desde: 09/08/2007 10:51:16
Mensagens: 476
Offline
|
Então, brother...
Sei que parece apelação, mas eu não consegui usar esses geters e seters para o que preciso...
Tentei assim:
Mas dá erro no método getPixels()...
Como pode ver, não sakei muito isso não...
Como eu vou fazer para comparar as cores dos pixels da imagem com uma determinada cor???
E como vou mudar essa cor?
|
http://intelectolivre.blogspot.com "A liberdade dominando a mente!"
__
Lindoélio Lázaro
Pós-graduado em Desenvolvimento de Sistemas para a Web |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2008 18:04:19
|
Linkel
JavaEvangelist
![[Avatar]](/images/avatar/ff4c48e9995f076b26fb2a90ae28d5aa.jpg)
Membro desde: 09/08/2007 10:51:16
Mensagens: 476
Offline
|
Eu lí os tutorias que me passou, mas não consegui extrair direito como vou fazer isso...
Helpe-me, please!!!!!!!!
|
http://intelectolivre.blogspot.com "A liberdade dominando a mente!"
__
Lindoélio Lázaro
Pós-graduado em Desenvolvimento de Sistemas para a Web |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2008 19:00:51
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
Que erro dá?
|
@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) 14/07/2008 19:04:41
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
Use o método sem a altura e a largura da imagem.
Caso contrário, você estará tentando pegar os dados de todos os pixels da imagem inteira... o que exige um array gigantesco. É mais fácil e mais prático trabalhar pixel a pixel.
|
@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) 14/07/2008 19:21:43
|
Linkel
JavaEvangelist
![[Avatar]](/images/avatar/ff4c48e9995f076b26fb2a90ae28d5aa.jpg)
Membro desde: 09/08/2007 10:51:16
Mensagens: 476
Offline
|
Brother... Não tinha visto suas últimas dicas, mas fiz exatamente o que você disse (eu acho) usando Raster ao invés de WritableRaster, depois de ler com mais detalhes os tutoriais... Bom, consegui reconhecer as cores da imagem, e até comparar, porém não consegui mudar essas cores para a BufferedImage...
Dê uma olhada no que fiz e diz se está certo...
Estou usando setRGB() para atribuir as cores mas não estou conseguindo mudar a cor...
Na saída no terminal consigo visualizar as cores dos pixels como implementei com System.out.println(), mas a cor não muda e não acontece nada, nenhum erro, e a velocidade está bem lenta...
Como vou mudar as cores?
Sabe me dizer?
|
http://intelectolivre.blogspot.com "A liberdade dominando a mente!"
__
Lindoélio Lázaro
Pós-graduado em Desenvolvimento de Sistemas para a Web |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2008 19:27:37
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
O system.out deve estar deixando lento.
Depois de alterar a imagem, você chamou o invalidate no painel para ele repinta-la?
|
@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) 14/07/2008 23:01:41
|
Linkel
JavaEvangelist
![[Avatar]](/images/avatar/ff4c48e9995f076b26fb2a90ae28d5aa.jpg)
Membro desde: 09/08/2007 10:51:16
Mensagens: 476
Offline
|
Fera, acho que a saída com System.out.println() não tem nada haver não... Creio que o problema está no método setRGB da classe BufferedImage, porque quando desabilito essa linha o processamento é quase instantâneo... Não estou sabendo usar esse método... Como pôde perceber, varri a imagem inteira para comparar os pixels, mas não estou conseguindo mudar a cor na BufferedImage...
Faz ideia do que estou fazendo de errado e de como deve ser???
Acho que até aqui já foi um grande avanço, mas não posso desistir...
Aguardo...
|
http://intelectolivre.blogspot.com "A liberdade dominando a mente!"
__
Lindoélio Lázaro
Pós-graduado em Desenvolvimento de Sistemas para a Web |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2008 23:03:26
|
Linkel
JavaEvangelist
![[Avatar]](/images/avatar/ff4c48e9995f076b26fb2a90ae28d5aa.jpg)
Membro desde: 09/08/2007 10:51:16
Mensagens: 476
Offline
|
Ah, e tudo isso eu faço antes de pintar a imagem no JPanel...
|
http://intelectolivre.blogspot.com "A liberdade dominando a mente!"
__
Lindoélio Lázaro
Pós-graduado em Desenvolvimento de Sistemas para a Web |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2008 00:02:06
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
Você deve usar o método setPixel do Raster, não o setRGB do BufferedImage.
Mas o caminho é esse mesmo.
|
@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) 15/07/2008 00:13:47
|
Linkel
JavaEvangelist
![[Avatar]](/images/avatar/ff4c48e9995f076b26fb2a90ae28d5aa.jpg)
Membro desde: 09/08/2007 10:51:16
Mensagens: 476
Offline
|
Então, nesse caso eu crio um WritableRaster ao invés de Raster, porque o Raster não me permite o método setPixel()... Mas quais informações eu devo passar como parâmetros para o método... Sim, porque ví na doc que é (X, Y, Largura, Altura, arrayRGB, Offset, scansize), mas não sei o que é esse Offset, nem esse scansize...
O que é?
Como eu completo esse código?
|
http://intelectolivre.blogspot.com "A liberdade dominando a mente!"
__
Lindoélio Lázaro
Pós-graduado em Desenvolvimento de Sistemas para a Web |
|
|
 |
|
|