Scene
グラフの内容をJavaFX 2でImage
に出力する方法。実際には、私は基本的にカードをデザインするアプリに取り組んでいます。そのため、ユーザーはさまざまなオプションをクリックしてシーンをカスタマイズします。最後に、シーンコンテンツをImageファイルに書き出したいと思います。それ、どうやったら出来るの ?JavaFX 2のScenegraphの内容をイメージに出力する方法
答えて
FX 2.2では、新しいスナップショット機能が登場しました。あなたはちょうどあなたがAWTロボットを使用することができ、古いFXで
WritableImage snapshot = scene.snapshot(null);
を言うことができます。 AWTスタック全体を開始する必要があるため、これはあまり良いアプローチではありません。
// getting screen coordinates of a node (or whole scene)
Bounds b = node.getBoundsInParent();
int x = (int)Math.round(primaryStage.getX() + scene.getX() + b.getMinX());
int y = (int)Math.round(primaryStage.getY() + scene.getY() + b.getMinY());
int w = (int)Math.round(b.getWidth());
int h = (int)Math.round(b.getHeight());
// using ATW robot to get image
java.awt.Robot robot = new java.awt.Robot();
java.awt.image.BufferedImage bi = robot.createScreenCapture(new java.awt.Rectangle(x, y, w, h));
// convert BufferedImage to javafx.scene.image.Image
java.io.ByteArrayOutputStream stream = new java.io.ByteArrayOutputStream();
// or you can write directly to file instead
ImageIO.write(bi, "png", stream);
Image image = new Image(new java.io.ByteArrayInputStream(stream.toByteArray()), w, h, true, true);
更新
のJavaFX 2.2(jdk7u6)は、このタスクを達成するための好適な方法であろうノードsnapshot to image機能を追加しました。
2.2より前のバージョンでは、JavaFXには現在、ノードまたはシーンをイメージに変換するパブリック関数がありません。このhttp://javafx-jira.kenai.com/browse/RT-13751の未処理機能要求があります(誰でも現在の機能要求ステータスを表示するためにサインアップできます)。
その間に回避策として、あなたがイメージにJavaFXのシーンを変換し、ファイルへの結果の画像を書き込むためのSwing/AWT機能を使用することができますが:
BufferedImage img = new Robot().createScreenCapture(
new java.awt.Rectangle(
(int)sceneRect.getX(), (int)sceneRect.getY(),
(int)sceneRect.getWidth()-1, (int)sceneRect.getHeight()-1));
File file = File.createTempFile("card", ".jpg");
ImageIO.write(img, "jpg", file);
上記のコードをから言い換えている:JavaFXDev: Screen capture tool 。
sceneRectをすることによって決定することができる:あなたは上記のイディオムに従った場合は、スレッドの注意が必要
Stage stage = (Stage) scene.getWindow();
stage.toFront();
Rectangle sceneRect = new Rectangle(
stage.getX() + scene.getX(), stage.getY() + scene.getY(),
scene.getWidth(), scene.getHeight());
- ライブのJavaFXシーンにアクセスするコードのみが唯一のJavaFXアプリケーションスレッドとAWTのコード上で動作するようにAWTスレッドで実行されます。
セルゲイはすでに私の答えを書いていたのですが、2つの解決策はかなり似ているようです-----私はそれは役に立つリンクをいくつか含んでいます。 – jewelsea
- 1. ルビーの配列の内容を出力する方法
- 2. リストの全内容を出力する方法は?
- 3. rails 3:配列の内容を出力する方法
- 4. jpanelの内容をテキストとして出力する方法は?
- 5. file_get_contentsの内容を出力する方法
- 6. BrowserWindowの内容をイメージに保存する方法は?
- 7. アレイリストの内容を出力する
- 8. 2つのmysqlテーブルの内容を出力します
- 9. 出力内容が
- 10. pdfファイルの内容をコンソールに出力
- 11. ループの内容を1ループで2回出力しますか?
- 12. divの内容をイメージとして保存する方法は?
- 13. customAdapter getviewのTextView.setText()で配列の内容を出力する方法
- 14. 現在のコンソール出力の内容や長さを取得する方法は?
- 15. npp_execを使用してテキストファイルの内容を出力する方法
- 16. タイトルの内容を2行に変更する方法
- 17. GridViewの出力をイメージに保存する方法は?
- 18. JavaFX TableViewの列が内容に合う
- 19. mime4jの出力内容の検証/テスト
- 20. jqueryダイアログの内容を2回目に開くときに、その内容のみを更新する方法
- 21. 出力ファイルに配列の内容を書き込む方法は?
- 22. 2つのcassandraキースペースの内容を比較する方法
- 23. VBA出力の内容をWord文書に変換する
- 24. ファイルの内容を逆順に出力する
- 25. Eclipseクラスパスコンテナの内容の変更を検出する方法は?
- 26. イメージ内の2つの行を区別する方法
- 27. jspを使用してテキストボックスに入力する内容を出力する方法
- 28. 出力ストリームで作成されたバイナリ出力ファイルの内容
- 29. jsoup/javascript内の2つのタグの間の内容を取得する方法
- 30. txtファイルの内容を抽出してループする方法
私は新しいFX 2.2スナップショット機能のために答えを更新しました –