Изображение BufferedImage для JavaFX

У меня есть снимок экрана я с основного монитора, и я хочу добавить его в Java FX ImageView так:

@FXML
protected ImageView screenshot() throws AWTException, IOException {
    Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
    BufferedImage capture = new Robot().createScreenCapture(screenRect);
    ImageView imageView = new ImageView();
    Image image = capture; //Error
    imageView.setImage(image);
    return imageView;
}

Я пытаюсь установить BufferedImage capture на javafx.scene.image.Image image, но типы несовместимы, и я не могу его отличить. Как я могу это исправить?

Ответ 1

Вы можете использовать

Image image = SwingFXUtils.toFXImage(capture, null);

Ответ 2

как правило, лучшим выбором является Image image = SwingFXUtils.toFXImage(capture, null); в java9 или более поздней версии.... но в отношении производительности в javafx, а также в устройствах с низкой производительностью, вы можете использовать эту технику, которая сделает чудеса, протестированные в java8

private static Image convertToFxImage(BufferedImage image) {
    WritableImage wr = null;
    if (image != null) {
        wr = new WritableImage(image.getWidth(), image.getHeight());
        PixelWriter pw = wr.getPixelWriter();
        for (int x = 0; x < image.getWidth(); x++) {
            for (int y = 0; y < image.getHeight(); y++) {
                pw.setArgb(x, y, image.getRGB(x, y));
            }
        }
    }

    return new ImageView(wr).getImage();
}