carregar imagem de arquivo para um panel  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
luistiagos
GUJ Expert
[Avatar]

Membro desde: 10/07/2006 10:37:23
Mensagens: 3161
Offline

ola gostaria de carregar uma imagem de um arquivo para um panel... porem não posso usar a rotina pronta do java para fazer isto ImageIO.read retornado um BufferedImage e passando para o g.drawImage... ou seja tenho que fazer isto na unha... sem usar nada dessas apis... no maximo do maximo a classe File... como posso fazer isto alguem tem alguma ideia?




SCJP 1.5
SCJA 1.0
IBM DB2 Associate
[Email] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

1. Procure a documentação do formato de imagem que você quer usar.
2. Abra o arquivo, usando um InputStream qualquer e analise os dados.
3. Você será obrigado a usar o método Graphics pelo menos para pintar os pontos da imagem na tela.

@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
[WWW]
luistiagos
GUJ Expert
[Avatar]

Membro desde: 10/07/2006 10:37:23
Mensagens: 3161
Offline

mas pegando o InputStream como faço para pegar suas informações para pinta-la com o Graphics?




SCJP 1.5
SCJA 1.0
IBM DB2 Associate
[Email] [MSN]
knik
JavaTeenager
[Avatar]

Membro desde: 03/04/2006 19:16:59
Mensagens: 192
Offline

Como disse o ViniGodoy.
Só tem um jeito de se fazer isto, assim:

Primeiro crie uma classe que estenda JPanel:

Em seguida, crie o JFrame que vai exibir este painel:

Assim nem precisa de File ou InputStream. Você simplesmete coloca este método na sua classe que estenda JPanel.
Não tem erro, vai funcionar logo na primeira tentativa!

This message was edited 1 time. Last update was at 27/11/2009 11:24:36

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Acho que ele quer pintar na unha, sem o ImageIcon.

No caso de um BMP, você teria que decodificar o cabeçalho e depois ler os valores RGB presentes em cada pixel. Com isso vc gera um color e pinta um ponto na posição do pixel:
http://en.wikipedia.org/wiki/BMP_file_format

O BMP é um formato bastante direto. 3 bytes de cor são gravados lado-a-lado. E os pixels são gravados em sequencia. Não há compactação.

Se você lidar com jpeg, gif, ou png, terá que lidar com a compactação. Nesse caso, além do cabeçalho, terá que buscar pelo algoritmo que faz isso. É um processo um pouco mais complexo.

@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
[WWW]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

O modelo jpeg suporta várias informações no arquivo como o exif. A melhor maneira de lidar com imagens digitais é saber como funcionam os formatos, e estudar a sua parte matemática.

Aqui o datasheet do formato jpeg.

http://en.wikipedia.org/wiki/JPEG

O BMP é o mais simples, pois não há nenhuma estrutura complexa por detráz dele. Apenas sequências de bytes.

www.citrox.com.br
luistiagos
GUJ Expert
[Avatar]

Membro desde: 10/07/2006 10:37:23
Mensagens: 3161
Offline

ViniGodoy wrote:Acho que ele quer pintar na unha, sem o ImageIcon.

No caso de um BMP, você teria que decodificar o cabeçalho e depois ler os valores RGB presentes em cada pixel. Com isso vc gera um color e pinta um ponto na posição do pixel:
http://en.wikipedia.org/wiki/BMP_file_format

O BMP é um formato bastante direto. 3 bytes de cor são gravados lado-a-lado. E os pixels são gravados em sequencia. Não há compactação.

Se você lidar com jpeg, gif, ou png, terá que lidar com a compactação. Nesse caso, além do cabeçalho, terá que buscar pelo algoritmo que faz isso. É um processo um pouco mais complexo.


Exatamente... como o Vinni disse eu quero pintar na unha...




SCJP 1.5
SCJA 1.0
IBM DB2 Associate
[Email] [MSN]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

luistiagos wrote:eu quero pintar na unha...




Deixando de brincadeiras:

Vai ser bem lento; acho que é melhor você ler sobre os algoritmos e entendê-los, em vez de fazer as coisas "no braço".

Até porque boa parte dos algoritmos nem em Java é implementado, mas sim em C com algumas partes em assembly.
luistiagos
GUJ Expert
[Avatar]

Membro desde: 10/07/2006 10:37:23
Mensagens: 3161
Offline

sim eu percebi... usam jni na api da sun... até ai sem problemas faço a coisa em C depois só chamo ele no java...
mas o que eu preciso e saber como fazer...




SCJP 1.5
SCJA 1.0
IBM DB2 Associate
[Email] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team