Conversão de BufferedImage

6 respostas
D

ola, gostaria de saber se alguem sabe como eu converto um DataBufferInt em um DataBufferByte ?? ou em um Array de byte?? ou array de int para array de char?
o problema mais alto nível é que eu tenho que pegar uma gráfico gerado pelo JFreeChart e converter pra um array de byte…

dai já tenho como tranformar esse gráfico em um DataBufferInt, e se passar para DataBufferByte eu consigo facilmente passar pra array de byte dessa forma…

byte[] a = ((DataBufferInt)bufferedImage.getRaster().getDataBuffer()).getData();

6 Respostas

V

Acho que o jeito mais fácil de transformar um BufferedImage num array de bytes é esse:

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, "jpg", buffer); return buffer.toByteArray();

Mas… para que você precisa fazer isso?
Dificilmente é necessário gerar um array de bytes.

Se você quiser um formato de bytes mais “direto”, pode usar bmp no lugar de jpg.
Mas cuidado, a ausência de compactação pode gerar um arquivo gigantesco. Outros formatos suportados são png, gif e wbmp.
A lista completa está aqui: http://java.sun.com/javase/6/docs/api/javax/imageio/package-summary.html

D

opa… valeu… é isso msm, na verdade eu preciso realmente dela em array de byte pq é uma aplicação web em que toda imagem e arquivo é enviado para apresentação em um AtributoArquivo cujo tem um array de byte[], não pode ser diferente… mais funcionou blza, obrigado cara…

N

Por que? Há outra forma de salvar no banco de dados sem gerar um “array de bytes” de uma image???

Queria aprender…

Alguém pode me ensinar??? :stuck_out_tongue:

V

neeryck:
Por que? Há outra forma de salvar no banco de dados sem gerar um “array de bytes” de uma image???

Queria aprender…

Alguém pode me ensinar??? :stuck_out_tongue:

Sim, você pode usar os streams diretamente. Usando o método setBinaryStream da classe PreparedStatement.
Outra opção é usar os métodos ImageIO.write para gravar no OutputStream do seu campo blob.

V

Eis um exemplo:

File imgFile = new File("imagem.jpg");
BufferedInputStream imagem = new BufferedInputStream(new FileInputStream(imgFile));

PreparedStament ps = conn.prepareStatement("INSERT INTO Images(name) VALUES(?)");
ps.setBinaryStream("name", imagem, imgFile.length());
ps.executeUpdate();

Claro, falta mostrar como cria a conexão, colocar os finallys para fecha-la e o statement, etc. Mas preferi deixar o “boilerplate” de fora, já que é o mesmo que qualquer aplicação BD comum.

N

Bom! Creio que esse tópico aqui deixa absolutamente CLARO como gravar uma imagem no BD!!

ViniGodoy manja muito!!

Obrigado velhão!!

Vou testar o código!

Um abraço.

Criado 27 de agosto de 2009
Ultima resposta 7 de set. de 2009
Respostas 6
Participantes 3