Domanda

Come posso ottenere un InputStream da un oggetto BufferedImage? Ho provato questo, ma ImageIO.createImageInputStream () restituisce sempre NULL

BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);

La miniatura dell'immagine è stata generata correttamente poiché posso dipingere bigImage su un JPanel con successo.

Grazie.

È stato utile?

Soluzione

Se stai provando a salvare l'immagine in un file prova:

ImageIO.write(thumb, "jpeg", new File(....));

Se vuoi solo ai byte prova a fare la chiamata di scrittura ma passale un ByteArrayOutputStream da cui puoi estrarre l'array di byte e farne quello che vuoi.

Altri suggerimenti

Da http: //usna86-techbits.blogspot .com / 2010/01 / inputstream-da-url-bufferedimage.html

Funziona benissimo!

  

Ecco come puoi crearne uno   InputStream per un'immagine con buffer:

URL url = new URL("http://www.google.com/intl/en_ALL/images/logo.gif");
BufferedImage image = ImageIO.read(url);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "gif", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());

Sovrascrivendo il metodo inByteArray () , restituendo lo stesso buf (non copiando), è possibile evitare problemi relativi alla memoria. Questo condividerà lo stesso array, non creando un altro della dimensione corretta. L'importante è usare il metodo size () per controllare il numero di byte validi nell'array.

final ByteArrayOutputStream output = new ByteArrayOutputStream() {
    @Override
    public synchronized byte[] toByteArray() {
        return this.buf;
    }
};
ImageIO.write(image, "png", output);
return new ByteArrayInputStream(output.toByteArray(), 0, output.size());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top