整个阶段的快照(带标题栏,边框等)

时间:2016-03-18 11:53:32

标签: javafx-8

有没有办法在JavaFX中用装饰(标题栏,边框等)制作整个舞台(或一般窗口)的快照?我知道我可以制作场景的快照,但它不包含窗口声明。

[编辑]

我需要拍摄舞台的快照,即使它不可见(隐藏在另一个窗口后面)。因此使用java.awt.Robot.createScreenCapture(..)是不合适的。

2 个答案:

答案 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。