如何在屏幕上保存Canvas3D作为图像?

时间:2014-11-28 13:29:20

标签: java image java-3d java-canvas

我正在做一个程序,根据用户的输入(用户在SWT GUI上选择图像)创建具有不同图像纹理的骰子(立方体)。

用户选择图像后,可以在单独的对话框中显示骰子,并对其执行一些旋转操作(请参阅执行小旋转后在屏幕截图中查看三个面)。

查看屏幕截图:http://pastebin.com/XqJfXL6i

我的问题从这里开始:我想保存画布的内容(旋转后以当前形式显示背景的骰子)。我一直在寻找几个代码,我认为我的问题是因为我目前的画布是一个"屏幕上的"画布,我需要一个离屏画布,可以保存内容。

我目前的代码如下:

http://pastebin.com/ZAv0ATJN

而且..这里开始出现问题。它抛出了这个例外:

java.lang.IllegalStateException:Canvas3D:不在屏幕外模式

具体而言,它在这一行中失败了:

        ImageComponent2D ic2d = canvas.getOffScreenBuffer();

正如你所看到的,有几条评论说我之前尝试过,但它们都没有用过。

有关如何操作的任何线索?

谢谢!

1 个答案:

答案 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();
}