无法从JavaFX中的ImageView获取图像

时间:2016-09-27 16:03:36

标签: javafx

我正在JavaFX中编写一个应用程序,只需点击一下按钮即可修改图片。所以我有一个ImageView,我必须从中提取图像,应用一些更改并将其设置回来。但是,当我显示我从ImageView获得的图像时,它看起来是空白的,只是黑屏。 我写了一些测试代码,代表了这种奇怪的行为。

public class Corrector extends Application {
   @Override
    public void start(Stage stage) {
        try {
            javafx.scene.image.ImageView imageView = new ImageView();

            BufferedImage a = ImageIO.read(ClassLoader.getSystemResource("/image.jpg"));
            javafx.scene.image.Image image = SwingFXUtils.toFXImage(a, null);
            imageView.setImage(image);
            BufferedImage backImg = new BufferedImage(a.getWidth(), a.getHeight(), a.getType());
            SwingFXUtils.fromFXImage(imageView.getImage(), backImg);
            ShowImages.showWindow(backImg, "Image from imageVIew", true);

            stage.setTitle("ImageView");
            stage.setWidth(1000);
            stage.setHeight(500);
            Scene scene = new Scene(new Group());
            VBox root = new VBox();

            root.getChildren().addAll(imageView);

            scene.setRoot(root);

            stage.setScene(scene);
            stage.show();
        } catch (Exception e) {
            System.out.printf(e.getMessage());
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

当我运行应用程序时," ImageView"屏幕包含图像,其中"图像frm ImageView"是空白的。 我很感激任何建议。

1 个答案:

答案 0 :(得分:1)

正如SwingFXUtils.fromFXImage的文档所说:

  

可以重复使用可选的BufferedImage参数来存储副本   像素。如果提供的话,将创建一个新的BufferedImage   object为null,太小或者是图像像素的类型   不能轻易转换成。

在你的情况下,与SwingFXUtils.fromFXImage的类型不匹配想要使用。因此,将创建并返回一个新的BufferedImage,其中包含复制的像素,而backImg保持不变。 你甚至不必提供BufferedImage。只需将第二个参数设置为null:

BufferedImage backImg = SwingFXUtils.fromFXImage(imageView.getImage(), null);

更多信息:

  • 您已将变量backImg定义了两次。删除第一个定义,因为它未使用且无法使用。
  • 您甚至可以使用JavaFXImage-Constructor
  • 加载图像

Image fxFromFile = new Image(Corrector.class.getResourceAsStream("/image.png"));