Conversão de BufferedImage

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();

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

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…

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:

[quote=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:

[/quote]

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.

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.

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.