Ich schreibe eine Anwendung in JavaFX, die Änderungen an einem Bild mit einem Klicken eines Knopfes macht. Also habe ich eine ImageView und ich muss das Bild daraus extrahieren, einige Änderungen übernehmen und zurückstellen. Wenn ich jedoch ein Bild zeige, das ich von ImageView erhalte, scheint es leer zu sein, nur schwarzer Bildschirm. Ich habe einen Testcode geschrieben, der das seltsame Verhalten darstellt.Kann Bild von ImageView in JavaFX nicht erhalten
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);
}
}
Wenn ich die Anwendung ausführen, „Imageview“ -Display enthält Bild, das „Bild frm Imageview“ leer ist. Ich würde mich über Vorschläge freuen.
Dank für Ihre Antwort danken. Eigentlich gibt es einen Grund, warum ich das zweite Argument zur Verfügung stellte: Ich benutze BoofCV und wenn ich ein Bild ohne das zweite Argument und dann zu Planar umwandle, konvertiert es es mit der falschen Anzahl von Dimensionen. Hab keine Ahnung warum. Könnten Sie mir bitte einen Hinweis geben, warum ich hier einen Typenkonflikt habe? Auch Neudefinition von BackImg war ein Tippfehler, es hat keinen Einfluss auf das Ergebnis. –
Scheint wie ich das Problem gefunden habe, aber es ist immer noch seltsam. Wenn ich zuerst 'SwingFXUtils.fromFXImage' und dann' SwingFXUtils.fromFXImage' starte, ändert sich der Typ von 5 zu 3. Ich weiß nicht, wie ich dagegen ankämpfen kann. –
Es scheint, dass 'SwingFXUtils.fromFXImage' nur TYPE_INT_ARGB und TYPE_INT_ARGB_PRE akzeptiert. Wenn Ihr BufferedImage einen anderen Typ hat, wählt er eines der beiden aus. Das einzige, was Sie tun können, ist sicherzustellen, dass Sie eine der beiden Arten haben. – Zerlono