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…
[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???
[/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.
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.