0

ユーザーの入力 (ユーザーが SWT GUI で画像を選択) に基づいて、異なる画像テクスチャを持つダイ (キューブ) を作成するプログラムを実行しています。

ユーザーが画像を選択すると、別のダイアログでサイコロを視覚化し、その上でいくつかの回転操作を実行できます (スクリーンショットで 3 つの面を確認するために小さな回転を実行した後を参照)。

スクリーンショットを参照してください: http://pastebin.com/XqJfXL6i

そして、私の問題はここから始まります: キャンバスのコンテンツ (背景が回転した後の現在の形のサイコロ) を保存したいのです。私はいくつかのコードを検索してきましたが、私の問題は、現在のキャンバスが「画面上の」キャンバスであり、コンテンツを保存できるオフスクリーンのキャンバスが必要であるためだと思います。

私の現在のコードは次のとおりです。

http://pastebin.com/ZAv0ATJN

そして..ここから問題が始まります。次の例外がスローされます。

java.lang.IllegalStateException: Canvas3D: オフスクリーン モードではありません

具体的には、次の行で失敗します。

        ImageComponent2D ic2d = canvas.getOffScreenBuffer();

ご覧のとおり、以前に試したいくつかの行がコメントされていますが、どちらも機能しませんでした。

それを行う方法についての手がかりはありますか?

ありがとう!

4

1 に答える 1

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();
}
于 2014-12-06T17:10:09.290 に答える