2012-09-08 6 views
6

Ich benutze Java FX und ich möchte einen Knoten in ein Bild konvertieren. Ich habe diese Ressource gefunden, aber sie löst mein Problem nicht, da ich einen Knoten in ein Bild und nicht in eine ganze Szene konvertieren möchte.Wie konvertiert man Knoten zu Bild in javafx 2.1?

How to output the content of a Scene graph in JavaFx 2.0 to an Image

+0

Ich weiß nicht viel über diese und haben nicht die Zeit, zu testen, aber man konnte nicht nur eine neue Szene erstellen und fügen Sie den Knoten als einzige um es in ein Bild konvertieren möchten Kind und dann die im Link erläuterte Methode verwenden? Ich schätze, du musst nie die zweite Szene zeigen, die du erstellst. –

Antwort

5

Dies ist die Lösung meines Problems. Diese Lösung ist Hilfe von Sergey und Jewelsea. Diese Lösung ist in javafx 2.2. Danke Sergey und Jewelsea.

public class TrySnapshot extends Application { 

javafx.embed.swing.SwingFXUtils fXUtils; 
BufferedImage bufferedImage = new BufferedImage(550, 400, BufferedImage.TYPE_INT_ARGB); 
File file = new File("C:/Users/PC1/Desktop/Sample Images/test.jpg"); 
VBox vbox = null; 

@Override 
public void start(Stage primaryStage) { 
    vbox = new VBox(); 
    Button btn = new Button(); 
    Image i = new Image("file:C:\\Koala.jpg"); 
    ImageView imageView = new ImageView(); 
    imageView.setImage(i); 
    vbox.getChildren().add(imageView); 
    vbox.setSpacing(10); 
    btn.setText("Say 'Hello World'"); 
    btn.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
     // here we make image from vbox and add it to scene, can be repeated :) 
     WritableImage snapshot = vbox.snapshot(new SnapshotParameters(), null); 
      vbox.getChildren().add(new ImageView(snapshot)); 
      saveImage(snapshot); 
      System.out.println(vbox.getChildren().size()); 
     } 
    }); 


    Scene scene = new Scene(new Group(btn), 500, 400); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

private void saveImage(WritableImage snapshot) { 
    BufferedImage image; 
    image = javafx.embed.swing.SwingFXUtils.fromFXImage(snapshot, bufferedImage); 
    try { 
     Graphics2D gd = (Graphics2D) image.getGraphics(); 
     gd.translate(vbox.getWidth(), vbox.getHeight()); 
     ImageIO.write(image, "png", file); 
    } catch (IOException ex) { 
     Logger.getLogger(TrySnapshot.class.getName()).log(Level.SEVERE, null, ex); 
    }; 
    } 
} 
+0

Kannst du bitte diese Antwort als richtig markieren und "This is my code" löschen, um dieses Thema zu bereinigen. –

+0

ok Sergey. Ich lösche "Dies ist mein Code". Jetzt ist das ein klares Thema. –

+0

Großartig. Danke vielmals! –

11

können Sie neue Funktion FX 2.2 Snapshot verwenden:

public class TrySnapshot extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     final VBox vbox = new VBox(2); 
     final Button btn = new Button(); 
     vbox.getChildren().add(btn); 
     btn.setText("Say 'Hello World'"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       // here we make image from vbox and add it to scene, can be repeated :) 
       WritableImage snapshot = vbox.snapshot(new SnapshotParameters(), null); 

       vbox.getChildren().add(new ImageView(snapshot)); 
       System.out.println(vbox.getChildren().size()); 
      } 
     }); 

     Scene scene = new Scene(new Group(vbox), 300, 250); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

Wenn Sie aus irgendeinem Grund älteren FX verwenden müssen nur Szene auf Ihre Knotenkoordinaten ändern Koordinaten Node#getBoundsInParent Anrufe in der Codebeispiel, das Sie verknüpft haben.

+0

Danke Sergey. Aber snaphot() Methode ist keine Lösung meines Problems. Ich möchte pufferedimage etwas. –

+2

Sie können ein AWFT-Buffered-Image mit der Lösung von Sergey und [SwingFXUtils] (http://docs.oracle.com/javafx/2/api/javafx/embed/swing/SwingFXUtils.html#fromFXImage (javafx.scene.image) erhalten. Image,% 20java.awt.image.BufferedImage)) – jewelsea

Verwandte Themen