BufferedImage para InputStream [RESOLVIDO]

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:

http://docs.oracle.com/javase/6/docs/api/java/awt/image/BufferedImage.html#getRGB(int, int, int, int, int[], int, int)

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 :slight_smile:

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?