私はJava FXを使用しています。ノードをイメージに変換したいと思います。私はこのリソースを見つけましたが、ノード全体をイメージではなく、ノードに変換したいので、私の問題は解決しません。javafx 2.1でノードをイメージに変換するには?
How to output the content of a Scene graph in JavaFx 2.0 to an Image
私はJava FXを使用しています。ノードをイメージに変換したいと思います。私はこのリソースを見つけましたが、ノード全体をイメージではなく、ノードに変換したいので、私の問題は解決しません。javafx 2.1でノードをイメージに変換するには?
How to output the content of a Scene graph in JavaFx 2.0 to an Image
これは私の問題の解決です。この解決策はSergeyとjewelseaの助けです。この解決策はjavafx 2.2にあります。 Sergeyとjewelseaに感謝します。
public class TrySnapshot extends Application {
javafx.embed.swing.SwingFXUtils fXUtils;
BufferedImage bufferedImage = new BufferedImage(550, 400, BufferedImage.TYPE_INT_ARGB);
File file = new File("C:/Users/PC1/Desktop/Sample Images/test.jpg");
VBox vbox = null;
@Override
public void start(Stage primaryStage) {
vbox = new VBox();
Button btn = new Button();
Image i = new Image("file:C:\\Koala.jpg");
ImageView imageView = new ImageView();
imageView.setImage(i);
vbox.getChildren().add(imageView);
vbox.setSpacing(10);
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
// here we make image from vbox and add it to scene, can be repeated :)
WritableImage snapshot = vbox.snapshot(new SnapshotParameters(), null);
vbox.getChildren().add(new ImageView(snapshot));
saveImage(snapshot);
System.out.println(vbox.getChildren().size());
}
});
Scene scene = new Scene(new Group(btn), 500, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
private void saveImage(WritableImage snapshot) {
BufferedImage image;
image = javafx.embed.swing.SwingFXUtils.fromFXImage(snapshot, bufferedImage);
try {
Graphics2D gd = (Graphics2D) image.getGraphics();
gd.translate(vbox.getWidth(), vbox.getHeight());
ImageIO.write(image, "png", file);
} catch (IOException ex) {
Logger.getLogger(TrySnapshot.class.getName()).log(Level.SEVERE, null, ex);
};
}
}
この回答を正しいものとしてマークし、このトピックをクリーンアップするために「This is my code」を削除してください。 –
ok Sergey。私は "This is my code"を削除します。今これは明確な話題です。 –
どうもありがとう! –
新しいFX 2.2スナップショット機能を使用することができます:あなたが何らかの理由で古いFXを使用する必要がある場合だけでシーンを変更
public class TrySnapshot extends Application {
@Override
public void start(Stage primaryStage) {
final VBox vbox = new VBox(2);
final Button btn = new Button();
vbox.getChildren().add(btn);
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
// here we make image from vbox and add it to scene, can be repeated :)
WritableImage snapshot = vbox.snapshot(new SnapshotParameters(), null);
vbox.getChildren().add(new ImageView(snapshot));
System.out.println(vbox.getChildren().size());
}
});
Scene scene = new Scene(new Group(vbox), 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
の中Node#getBoundsInParent
呼び出しを使用してノードの座標に座標リンクしたサンプルコード。
セルゲイに感謝します。しかし、snaphot()メソッドは私の問題の解決策ではありません。私はバッファリングされたイメージをいくつかしたい。 –
Sergeyのソリューションと[SwingFXUtils](http://docs.oracle.com/javafx/2/api/javafx/embed/swing/SwingFXUtils.html#fromFXImage(javafx.scene.image))を使用して、awtによるビュート画像を取得できます。 Image、%20java.awt.image.BufferedImage)) – jewelsea
私はこのことについてよく分かりませんし、テストする時間はありませんが、新しいシーンを作成し、イメージに変換するノードをソールとして追加することはできません子どもは、リンクで説明されている方法を使用して?私は、あなたが作成する2番目のシーンを表示する必要がないと思います。 –