如何輸出Scene
圖表的JavaFX中2中的內容到Image
。其實,我正在研究一款基本上設計卡片的應用程序。因此,用戶只需點擊各種選項即可自定義場景。最後,我想將場景內容導出爲圖像文件。我怎麼做 ?如何輸出JavaFX中2一個場景圖的內容到圖像
6
A
回答
9
在FX 2.2新快照功能出現了這一問題。你只能說
WritableImage snapshot = scene.snapshot(null);
年紀較大的FX您可以使用AWT機器人。這不是很好的方法,因爲它需要整個AWT堆棧啓動。
// getting screen coordinates of a node (or whole scene)
Bounds b = node.getBoundsInParent();
int x = (int)Math.round(primaryStage.getX() + scene.getX() + b.getMinX());
int y = (int)Math.round(primaryStage.getY() + scene.getY() + b.getMinY());
int w = (int)Math.round(b.getWidth());
int h = (int)Math.round(b.getHeight());
// using ATW robot to get image
java.awt.Robot robot = new java.awt.Robot();
java.awt.image.BufferedImage bi = robot.createScreenCapture(new java.awt.Rectangle(x, y, w, h));
// convert BufferedImage to javafx.scene.image.Image
java.io.ByteArrayOutputStream stream = new java.io.ByteArrayOutputStream();
// or you can write directly to file instead
ImageIO.write(bi, "png", stream);
Image image = new Image(new java.io.ByteArrayInputStream(stream.toByteArray()), w, h, true, true);
4
更新
JavaFX的2.2(jdk7u6)加入一個節點snapshot to image特徵這將是完成此任務的首選方式。
2.2之前,JavaFX的目前沒有一個公共功能節點或場景轉換爲圖像。有這個http://javafx-jira.kenai.com/browse/RT-13751(人可以註冊以查看當前的特徵請求狀態)的開放功能請求。
由於在此期間解決方法,你可以使用Swing/AWT功能,JavaFX的場景轉換爲圖像並將得到的圖像寫入文件:JavaFXDev: Screen capture tool:
BufferedImage img = new Robot().createScreenCapture(
new java.awt.Rectangle(
(int)sceneRect.getX(), (int)sceneRect.getY(),
(int)sceneRect.getWidth()-1, (int)sceneRect.getHeight()-1));
File file = File.createTempFile("card", ".jpg");
ImageIO.write(img, "jpg", file);
上面的代碼是從轉述。
的sceneRect可由下式確定:
Stage stage = (Stage) scene.getWindow();
stage.toFront();
Rectangle sceneRect = new Rectangle(
stage.getX() + scene.getX(), stage.getY() + scene.getY(),
scene.getWidth(), scene.getHeight());
如果你按照上面的成語,小心線程的 - 這樣的代碼訪問實時JavaFX的場景只能運行在JavaFX應用程序線程和AWT代碼只在AWT線程上運行。
+1
看起來像謝爾蓋已經發布瞭解決方案,同時我在寫我的答案 - 好像這兩個解決方案很相似;-)我會離開我重複的答案它包含一些有用的鏈接。 – jewelsea 2012-02-09 19:19:38
相關問題
- 1. JavaFX如何設置場景背景圖像
- 2. JavaFX如何在當前場景中插入新的FXML內容
- 3. 如何在JavaFX中將場景添加到場景中?
- 4. JavaFX中的多個場景
- 5. 如何在javafx中有另一場景
- 6. 隨着兩幅圖像之間的姿勢,你如何從一個場景投影到另一個場景?
- 7. 用QGraphics場景顯示圖像場景
- 8. 如何將圖像堆疊到javafx中的現有背景上
- 9. 將一個場景的輸出作爲輸入輸入到另一個黃瓜場景中
- 10. 我怎樣才能讓一個按鈕從場景1導航到場景2而不在場景2中同時顯示場景內容?
- 11. 在javafx中關閉一個場景
- 12. JavaFX - 場景 - 在另一個場景中修改變量
- 13. JavaFX背景圖像縮放
- 14. 如何獲得像在JavaFx場景中放置場景的功能3d
- 15. 什麼使JavaFx 1.2場景圖刷新?
- 16. 從線程更新JavaFX場景圖形
- 17. 如何將圖像拖到另一個圖像背景
- 18. 點擊說明這個場景的圖像後,顯示一個three.js場景
- 19. 所有場景的一個背景圖像目標c
- 20. 圖像/場景識別
- 21. 多個內嵌容器與背景圖像,但沒有內容
- 22. 增加對內容的白框在一個背景圖像
- 23. 如何使一個背景圖像出現在漸變背景
- 24. 如何從兩幅圖像重建場景中的三維場景
- 25. 如何在OpenGL(GLUT)場景中創建靜態背景圖像?
- 26. 如何在JavaFX中切換場景
- 27. CSS:在另一個圖像(或畫布)內的背景圖像
- 28. 創建一個JavaFX場景包裝器
- 29. 淡入淡出背景圖像淡入淡出div內容
- 30. 刪除圖像背景/場景
我已經更新的答案,由於新的FX 2.2快照功能 – 2012-09-08 13:23:44