Olá a todos,
já procurei em vários lugares e não consegui achar…
eu estou precisando converter uma BufferedImage em um InputStream ou e um array de bytes… alguém saberia como posso fazer isso?
Agradeço desde já!
Olá a todos,
já procurei em vários lugares e não consegui achar…
eu estou precisando converter uma BufferedImage em um InputStream ou e um array de bytes… alguém saberia como posso fazer isso?
Agradeço desde já!
Você pode usar o método getRGB() para obter um array de bytes com os pixels da imagem:
Assim você converte, e ainda escolhe o formato da imagem:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(suaImagem, "png", bos);
byte[] imagem = bos.toByteArray();
Os formatos suportados pelo Java são png, gif, jpeg e bmp.
O método do roger é mais indicado se você precisar trabalhar com os dados na forma de RGB, ou seja, manipular a imagem. Aí vc usa ele em combinação com o setRGB. Entretanto, é um método prático, portanto, pouco econômico em termos de memória, e lento em termos de performance (seria rápido se você usasse um método quase equivalente diretamente no Raster).
Se você só precisar armazenar a imagem num banco, o ideal é usar o método que postei, associado a um formato de arquivo com compressão, como o png.
ViniGodoy funcionou muito bem
eu não sabia que pelo write eu poderia escolher o formato tambem!
Muito obrigado!
Sei que ja faz um tempo, porem não consigo achar a resposta. Recebo um byte[](que é uma figura do tipo TIFF) e quero converter em bufferedImage [] consigo fazer isso escrevendo no disco porem estou tentando buscar outra maneira de fazer sem ter que escrever . meu codigo:
[code]
public byte[] ChangeTiffProperti(byte[] file) {
InputStream inputStream;
try {
inputStream = new ByteArrayInputStream(file);
ImageDecoder iDecoder = ImageCodec.createImageDecoder("TIFF", inputStream, null);
BufferedImage[] read = new BufferedImage[iDecoder.getNumPages()];
for (int bytePage = 0; bytePage < iDecoder.getNumPages(); bytePage++) {
read[bytePage] = ImageIO.read(inputStream);
}
for (int bufferedPage = 0; bufferedPage < read.length; bufferedPage++) {
double image_width = read[bufferedPage].getWidth();
double image_height = read[bufferedPage].getHeight();
read[bufferedPage] = new BufferedImage((int) image_width, (int) image_height, BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = read[bufferedPage].createGraphics();
g.drawImage(read[bufferedPage], 0, 0, read[bufferedPage].getWidth(null), read[bufferedPage].getHeight(null), null);
g.dispose();
}
ChangeTiffParameters(read);
} catch (Exception e) {
e.printStackTrace();
}
return file;
}[/code]
o problema esta em read só recebe null !!! alguém pode me ajudar?