Sto cercando di ottenere uno screenshot come stringa codificata in base64 ma non molto lontano. Il codice che ho finora utilizza una libreria Base64 (http://iharder.sourceforge.net/current/java/base64/):Java BufferedImage in formato PNG Base64 String
Robot robot = new Robot();
Rectangle r = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage bi = robot.createScreenCapture(r);
ByteArrayOutputStream os = new ByteArrayOutputStream();
OutputStream b64 = new Base64.OutputStream(os);
ImageIO.write(bi, "png", os);
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.writeTo(b64);
String result = out.toString("UTF-8");
Ogni volta che corro questo "risultato" è sempre una stringa vuota, ma non capisco perché. Qualche idea?
Nota: non voglio dover scrivere il png su un file su disco.
Hai un'immagine di esempio? 'ImageIO.write()' chiama 'close()' sul sottostante 'ImageOutputStream' che dovrebbe chiudere' Base64.EncOutputStream' che dovrebbe scrivere tutti i restanti byte nell'output 'OutputStream'. Mi piacerebbe sapere dove mi sto sbagliando. – xehpuk
@xehpuk Penso che potresti sbagliare, 'ImageIO.write()' afferma esplicitamente che non chiama 'close()' su 'OutputStream': *** Questo metodo non chiude il' OutputStream' fornito dopo il operazione di scrittura completata; è responsabilità del chiamante chiudere il flusso, se lo si desidera. *** –
So che non chiude il flusso. Chiude il flusso che crea internamente. – xehpuk