Como capturar um snapshot da janela com JavaFX
Atualizado em:
Este tutorial mostra como capturar em snapshot da janela em JavaFx e salvar esta imagem no disco, é uma operação muito simples, uma vez que o próprio javafx oferece essa funcionalidade, basta acessar o método .snapshot(null) do scene:
primaryStage.getScene().snapshot(null);
Este método retorna um WritableImage, que pode ser tratado e salvo em disco:
WritableImage snapshot = primaryStage.getScene().snapshot(null); File file = new File("[DIRETORIO]/snapshot.png"); try { ImageIO.write(SwingFXUtils.fromFXImage(snapshot, null), "png", file); } catch (IOException ex) { Logger.getLogger(Snapshot.class.getName()).log(Level.SEVERE, null, ex); }
[caption id="attachment_1127" align="aligncenter" width="499"] Imagem salva[/caption]
Abaixo um códico completo de exemplo:
package snapshot; import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javafx.application.Application; import javafx.embed.swing.SwingFXUtils; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.image.WritableImage; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import javax.imageio.ImageIO; public class Snapshot extends Application { @Override public void start(Stage primaryStage) { Button btn = new Button(); btn.setText("Snapshot!"); btn.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { WritableImage snapshot = primaryStage.getScene().snapshot(null); File file = new File("[DIRETORIO]/snapshot.png"); try { ImageIO.write(SwingFXUtils.fromFXImage(snapshot, null), "png", file); } catch (IOException ex) { Logger.getLogger(Snapshot.class.getName()).log(Level.SEVERE, null, ex); } } }); StackPane root = new StackPane(); root.getChildren().add(btn); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Snapshot"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
[]`s
Deixe um comentário