Ответ 1
Вы можете использовать
Image image = SwingFXUtils.toFXImage(capture, null);
У меня есть снимок экрана я с основного монитора, и я хочу добавить его в 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
, но типы несовместимы, и я не могу его отличить. Как я могу это исправить?
Вы можете использовать
Image image = SwingFXUtils.toFXImage(capture, null);
как правило, лучшим выбором является 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();
}