ich den folgenden Code haben, der gut arbeitet ..Kann ich einen Schnappschuss einer Szene programmgesteuert erfassen?
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Scene;
import javafx.scene.image.WritableImage;
import javafx.scene.web.WebView;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/* User: [email protected] Date: 2017/05/23 */
public class CaptureScene {
public static void main(String[] args) throws IOException {
JFXPanel jfxPanel = new JFXPanel();
Platform.runLater(() -> {
WebView webView = new WebView();
webView.getEngine().load("file:///Users/koraytugay/Desktop/sample.html");
jfxPanel.setScene(new Scene(webView));
final JFrame jFrame = new JFrame();
jFrame.setLayout(new FlowLayout());
jFrame.getContentPane().add(jfxPanel);
final JButton saveAsImage = new JButton("Save as Image");
jFrame.getContentPane().add(saveAsImage);
saveAsImage.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Platform.runLater(new Runnable() {
@Override
public void run() {
final Scene scene = jfxPanel.getScene();
WritableImage image = scene.snapshot(new WritableImage(1920, 1080));
BufferedImage bufferedImage = SwingFXUtils.fromFXImage(image, null);
try {
ImageIO.write(bufferedImage, "png", new File("/Users/koraytugay/Desktop/vaaappp.png"));
} catch (IOException va) {
va.printStackTrace();
}
}
});
}
});
jFrame.setSize(1920, 1080);
jFrame.setVisible(true);
jFrame.requestFocus();
});
}
}
so, wenn ich diese Anwendung ausführen, wird sample.html fein gemacht werden, und wenn ich auf der JFrame den Knopf drücken, wird es als Bild gespeichert werden Alles gut.
aber ich will nicht stören den Knopf schlagen, und das ist, was ich versuche ..
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Scene;
import javafx.scene.image.WritableImage;
import javafx.scene.web.WebView;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/* User: [email protected] Date: 2017/05/23 */
public class CaptureScene {
public static void main(String[] args) throws IOException {
JFXPanel jfxPanel = new JFXPanel();
Platform.runLater(() -> {
WebView webView = new WebView();
webView.getEngine().load("file:///Users/koraytugay/Desktop/sample.html");
jfxPanel.setScene(new Scene(webView));
final JFrame jFrame = new JFrame();
jFrame.setLayout(new FlowLayout());
jFrame.getContentPane().add(jfxPanel);
jFrame.setSize(1920, 1080);
jFrame.setVisible(true);
jFrame.requestFocus();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Platform.runLater(new Runnable() {
@Override
public void run() {
final Scene scene = jfxPanel.getScene();
WritableImage image = scene.snapshot(new WritableImage(1920, 1080));
BufferedImage bufferedImage = SwingFXUtils.fromFXImage(image, null);
try {
ImageIO.write(bufferedImage, "png", new File("/Users/koraytugay/Desktop/baanb.png"));
} catch (IOException va) {
va.printStackTrace();
}
}
});
});
}
}
Aber das gespeicherte Bild ist nur ein leeres weißes Bild. Was vermisse ich? Im Grunde versuche ich eine HTML-Seite als PNG zu speichern, gehe ich einen falschen Ansatz? Sollte ich das auf eine andere Weise tun? Eigentlich wird dies auf der Serverseite laufen, also wird JFrame überhaupt nicht funktionieren?