我正在用JavaFX編寫一個應用程序,該程序通過單擊按鈕來修改圖片。所以我有一個ImageView,我必須從中提取圖像,應用一些更改並將其設置回來。但是,當我顯示從ImageView中獲得的圖像時,它看起來是空白的,只是黑屏。 我寫了一些測試代碼,代表那種奇怪的行爲。無法從JavaFX中的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」屏幕包含圖像,其中「Image frm ImageView」爲空。 我將不勝感激任何建議。
謝謝您的回答。實際上,我提供第二個參數是有原因的:我使用的是BoofCV,當我轉換一個沒有第二個參數的圖像,然後轉換爲Planar時,它會用錯誤的維數轉換它。不知道爲什麼。 所以你可以給我一個提示,爲什麼我在這裏有一個類型不匹配? 也是重新定義backImg是一個錯字,它不會影響結果。 –
似乎我發現了這個問題,但它仍然很奇怪。當我第一次運行'SwingFXUtils.fromFXImage',然後運行'SwingFXUtils.fromFXImage'時,類型從5改變爲3.我不知道如何與之對抗。 –
看起來'SwingFXUtils.fromFXImage'只接受TYPE_INT_ARGB和TYPE_INT_ARGB_PRE。如果你的BufferedImage具有不同的類型,它將選擇其中的一個。你唯一能做的就是確保有兩種類型之一。 – Zerlono