Converter java.awt.Image para InputStream

É possível converter um java.awt.Image ou um ImageInputStream para um InputStream? Engraçado que apesar do nome, ImageInputStream e InputStream não são compatíveis…

Sim é possível. Para que você quer fazer isso?

Procure por ImageIO, ByteArrayOutputStream, ByteArrayOutputStream.toByteArray() e ByteArrayInputStream.

Eu tinha um utilitário de manipulação de imagem que esperava um ImageInputStream, não um Image, mas eu só tinha o Image. Na verdade meu problema era manipular um Bitmap em Java. Não sei porque não lia o arquivo corretamente, mas descobri uma API da Sun(Oracle ? :D) que me salvou. http://java.sun.com/javase/technologies/desktop/media/jai/

Segue abaixo código para caso alguém encontre o artigo via google =)

Image image = ...
BufferedImage bi = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);  
Graphics bg = bi.getGraphics();
bg.drawImage(image, 0, 0, null);  
bg.dispose(); 

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos );
baos.flush();

byte[] imageInByte = baos.toByteArray();
baos.close();

InputStream is = new ByteArrayInputStream(imageInByte);