我正在做一个程序,根据用户的输入(用户在SWT GUI上选择图像)创建具有不同图像纹理的骰子(立方体)。
用户选择图像后,可以在单独的对话框中显示骰子,并对其执行一些旋转操作(请参阅执行小旋转后在屏幕截图中查看三个面)。
查看屏幕截图:http://pastebin.com/XqJfXL6i
我的问题从这里开始:我想保存画布的内容(旋转后以当前形式显示背景的骰子)。我一直在寻找几个代码,我认为我的问题是因为我目前的画布是一个"屏幕上的"画布,我需要一个离屏画布,可以保存内容。
我目前的代码如下:
而且..这里开始出现问题。它抛出了这个例外:
java.lang.IllegalStateException:Canvas3D:不在屏幕外模式
具体而言,它在这一行中失败了:
ImageComponent2D ic2d = canvas.getOffScreenBuffer();
正如你所看到的,有几条评论说我之前尝试过,但它们都没有用过。
有关如何操作的任何线索?
谢谢!
答案 0 :(得分:1)
基于gouessej提供的评论(谢谢!)最后我使用了这段代码,这对我的怀疑很有用:
private void saveImage(String img) throws Exception {
FileOutputStream fileOut = new FileOutputStream(img);
Robot r = new Robot();
BufferedImage bi = r.createScreenCapture(new java.awt.Rectangle(
(int) frame.getLocationOnScreen().getX(), (int) frame
.getLocationOnScreen().getY(), frame.getBounds().width,
frame.getBounds().height));
ImageIO.write(bi, "jpeg", fileOut);
fileOut.flush();
fileOut.close();
}