JavaFXのノードのスクリーンショットを撮るように設計されたコードがあります。
public BufferedImage getSnapshot(final Node... hideNodes) {
Window window = getScene().getWindow();
Bounds b = localToScene(getBoundsInLocal());
int x = (int) Math.round(window.getX() + getScene().getX() + b.getMinX());
int y = (int) Math.round(window.getY() + getScene().getY() + b.getMinY());
int w = (int) Math.round(b.getWidth());
int h = (int) Math.round(b.getHeight());
try {
Robot robot = new Robot();
for(Node node : hideNodes) {
node.setOpacity(0);
node.getParent().requestLayout();
}
BufferedImage image = robot.createScreenCapture(new java.awt.Rectangle(x, y, w, h));
for(Node node : hideNodes) {
node.setOpacity(1);
node.getParent().requestLayout();
}
return image;
}
catch(AWTException ex) {
return null;
}
}
ひねりがあり、スクリーンショットを撮る前に特定のノードを非表示にする必要があります(ノードと重複する場合、場合によっては明確です)。
ただし、スクリーンショットを撮る前に、不透明度の変更を含めるように再描画を強制する方法を見つけるのに行き詰まっています。私が見つけた唯一の参照は、でしたがrequestLayout()
、そこには喜びがありませんでした。
再描画が完了するのを強制して待機するには、どのメソッドを呼び出す必要がありますか?