JavaFX快照不会捕获背景

时间:2016-11-11 22:38:28

标签: java javafx

尝试使用JavaFX StackPanesnapshot方法来捕获"背景"元件。我对节点的背景特别感兴趣(顾名思义)。

如果我使用StackPane设置我的场景,并且背景确实是我想要显示的ImageView,那么一切正常。但是,如果我使用节点的更直观的setBackground函数,并尝试捕获快照,则它(背景)不会显示。

例如,如果您执行getBackgroundNode().snapshot(new SnapshotParameters(), null)

,这会按预期工作
private Node getBackgroundNode() {
    ImageView background = new ImageView(new Image("https://www.yamaha-motor.ca/images/pages/products/units/MC/action/2016_FZ_07_2_l.jpg"));
    Rectangle2D viewport = new Rectangle2D(0, 0, 1080, 720);
    background.setViewport(viewport);

    return background;
}

但是,当我调用snapshot方法时,以下方法并未向我显示背景信息。

private Node getBackgroundNode() {
    Image background = new Image("https://www.yamaha-motor.ca/images/pages/products/units/mc/action/2016_fz_07_2_l.jpg");

    StackPane stack = new StackPane();
    stack.setBackground(new Background(new BackgroundImage(background, null, null, null, null)));

    stack.setPrefSize(1080, 720);

    return stack;
}

这只是snapshot方法的一个功能吗?我查看了SnapshotParameters,并且没有任何明显的设置可以让我捕捉到背景。

1 个答案:

答案 0 :(得分:0)

StackPane的大小通常在布局之前不会设置。因此,您创建了Node大小为(0, 0)的快照。正确布局Node包括背景。您可以在拍摄快照前通过调用StackPane来设置resize的大小:

Node backgroundNode = getBackgroundNode();
backgroundNode.resize(1080, 720);
backgroundNode.snapshot(new SnapshotParameters(), null);