我试图将屏幕截图输出为一个Base64编码的字符串,但是进展不顺。目前我的代码使用了一个Base64库(http://iharder.sourceforge.net/current/java/base64/):
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");
每次我运行这个程序,"result"总是空字符串,但我不明白为什么。有什么想法吗?注意:我不想把png写入磁盘文件。
ImageIO.write()
调用底层的ImageOutputStream
上的close()
方法,该方法应关闭Base64.EncOutputStream
并将所有剩余的字节写入包装的OutputStream
。我想知道我的错误在哪里。 - xehpukImageIO.write()
明确说明它不会在OutputStream
上调用close()
方法:此方法在写操作完成后不会关闭提供的OutputStream
;如果需要,调用者有责任关闭流。 - Robert HuntOutputStream
。 - Robert Hunt