有没有办法在JavaFX中用装饰(标题栏,边框等)制作整个舞台(或一般窗口)的快照?我知道我可以制作场景的快照,但它不包含窗口声明。
[编辑]
我需要拍摄舞台的快照,即使它不可见(隐藏在另一个窗口后面)。因此使用java.awt.Robot.createScreenCapture(..)
是不合适的。
答案 0 :(得分:0)
您可以使用Robot createScreenCapture类来执行此操作,而Scene.snapshot仅捕获场景本身。
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage capture = new Robot().createScreenCapture(screenRect);
ImageIO.write(capture, "bmp", new File(args[0]));
答案 1 :(得分:0)
这是一些代码,您必须制作BufferedImage
,然后将其转换为WriteableImage
。可能有一种更简单的方法可以做到这一点,但是为了获得窗口,这就是我这样做的方式:
注意:要获得舞台,请使用以下代码(您可以使用已定义的任何fx:id
;不必是AnchorPane
)
@FXML private AnchorPane ap;
Stage stage = (Stage) ap.getScene().getWindow();
File file = new File("snapshot.png");
try {
Rectangle rectangle = new Rectangle((int)stage.getX(), (int)stage.getY(),
(int)stage.getWidth(), (int)stage.getHeight());
BufferedImage bufferedImage = new Robot().createScreenCapture(rectangle);
ImageIO.write(bufferedImage, "png", file);
} catch (IOException ex) {
//IOException
} catch (AWTException ex) {
//AWTException
}
另外,请务必使用java.awt.Rectangle
而不是javafx。