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. jpanelの内容をテキストとして出力する方法は?
- 2. rails 3:配列の内容を出力する方法
- 3. アレイリストの内容を出力する
- 4. ループの内容を1ループで2回出力しますか?
- 5. divの内容をイメージとして保存する方法は?
- 6. customAdapter getviewのTextView.setText()で配列の内容を出力する方法
- 7. GridViewの出力をイメージに保存する方法は?
- 8. mime4jの出力内容の検証/テスト
- 9. jqueryダイアログの内容を2回目に開くときに、その内容のみを更新する方法
- 10. JavaFX TextFieldの内容を整数に変換する
- 11. 出力ストリームで作成されたバイナリ出力ファイルの内容
- 12. Eclipseクラスパスコンテナの内容の変更を検出する方法は?
- 13. JavaFXのオーディオ出力選択
- 14. Haskell:タプルのリストの内容を出力する
- 15. JavaFXシーンの背景イメージを設定する方法
- 16. バンドルの内容をLogcatに出力しますか?
- 17. ASP.NETページでテキストファイルの内容をインラインで出力する
- 18. 標準出力の内容をC#で取得する
- 19. asp.net mvcのビューにイメージを返すアクションメソッドの出力をキャッシュする方法は?
- 20. イメージ内の最小エネルギー領域を検出する方法
- 21. Javaのbyte []配列から生のバイトの内容をstdoutに出力する方法は?
- 22. QTreeviewの内容をペイントする方法
- 23. tfsbuild --- 2つの異なるソースに出力する方法
- 24. XQueryで文字列の出力内容をエンティティに変換しないようにする方法
- 25. トップコマンドの出力をファイル内にリダイレクトする方法
- 26. データグリッドの出力イメージ
- 27. php、テーブルへの複雑なmysql呼び出しの内容を出力する
- 28. イメージ内の色をサンプルする方法
- 29. javafx GridPaneは特定のセルの内容を取得します
- 30. div要素の内容をコンテナ内に保持する方法
私は新しいFX 2.2スナップショット機能のために答えを更新しました –