Estoy tratando de obtener una salida de captura de pantalla como una cadena codificada en base64 pero sin llegar muy lejos. El código que tengo hasta ahora utiliza una biblioteca de base 64 (http://iharder.sourceforge.net/current/java/base64/):Java BufferedImage to PNG format 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");
Cada vez que funciono esto, "número" es siempre una cadena vacía, pero no entiendo por qué. ¿Algunas ideas?
Nota: No quiero tener que escribir el png en un archivo en el disco.
¿Tiene una imagen de ejemplo? 'ImageIO.write()' llama a 'close()' en el 'ImageOutputStream' subyacente que debe cerrar el' Base64.EncOutputStream' que debe escribir todos los bytes restantes en el 'OutputStream' envuelto. Me gustaría saber dónde me equivoco. – xehpuk
@xehpuk Creo que puede estar equivocado, 'ImageIO.write()' establece explícitamente que no llama 'close()' en 'OutputStream': *** Este método no cierra el' OutputStream' proporcionado después de la la operación de escritura se ha completado; es la responsabilidad de la persona que llama para cerrar la secuencia, si lo desea. *** –
Sé que no cierra la secuencia. Cierra la transmisión que crea internamente. – xehpuk