Scene
그래프의 내용을 JavaFX 2에서 Image
으로 출력하는 방법. 사실, 저는 기본적으로 카드를 디자인하는 앱을 만들고 있습니다. 따라서 사용자는 다양한 옵션을 클릭하여 장면을 사용자 정의합니다. 마지막으로 장면 내용을 이미지 파일로 내보내고 싶습니다. 어떻게해야합니까?JavaFX 2에서 Scenegraph의 내용을 이미지로 출력하는 방법
답변
FX 2.2에서는 새로운 스냅 샷 기능이 등장했습니다. 당신은 당신이 AWT 로봇을 사용할 수 있습니다 오래된 FX와 함께
WritableImage snapshot = scene.snapshot(null);
을 말할 수있다. 전체 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);
업데이트
자바 FX 2.2 (jdk7u6)이 작업을 달성 선호하는 방법이 될 것이다 노드 snapshot to image 기능을 추가했습니다.
2.2 이전에는 JavaFX에 현재 노드 또는 장면을 이미지로 변환하는 공용 기능이 없습니다. 이 http://javafx-jira.kenai.com/browse/RT-13751에 대한 공개 기능 요청이 있습니다 (누구든지 현재 기능 요청 상태를 보려면 가입 할 수 있음). 그 동안 해결 방법으로
, 당신은 이미지에 자바 FX 장면을 변환 스윙/AWT 기능을 사용하여 파일에 결과 이미지를 작성할 수 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());
는 스레딩의주의 - 코드에 액세스하는 라이브 자바 FX 장면 만 자바 FX 애플리케이션 스레드와 AWT 코드를 실행하도록 만 AWT 스레드에서 실행됩니다.
세르게이가 이미 내 답변을 쓰는 동안 보이는 것처럼 보입니다 - 두 가지 해결책이 꽤 비슷합니다 ;-) 나는 내 중복 답변을 다음과 같이 남겨 둘 것입니다. 여기에는 몇 가지 유용한 링크가 포함되어 있습니다. – jewelsea
- 1. 자막이있는 비디오를 JavaFX 2에서 재생하십시오.
- 2. bash에서 디렉토리의 읽을 수없는 내용을 출력하는 방법
- 3. rails 3 : 배열의 내용을 출력하는 방법
- 4. 레이아웃 내용을 이미지로 캡처하기
- 5. div의 내용을 이미지로 캡쳐
- 6. JavaFX 2에서 라인의 정확한 치수는 무엇입니까?
- 7. JavaFX 2에서 한 줄 텍스트 치수 계산하기
- 8. PIL 이미지로 장고 웹 페이지에서 이미지를 출력하는 방법
- 9. 캔버스 내용을 이미지로 변환하려면 어떻게해야합니까?
- 10. 그리드의 모든 내용을 이미지로 저장
- 11. 외부 로그 파일에 wx.ListView 상자의 내용을 출력하는 방법
- 12. REST :: client 모듈에서 responseXpath()의 내용을 출력하는 방법
- 13. Android-ndk의 LogCat 창에 변수 내용을 출력하는 방법
- 14. CkEditor : 입력 내용을 출력하는 메서드가 있습니까
- 15. FXML을 사용하여 JavaFX 2에서 폭 비율을 어떻게 지정합니까?
- 16. 강조 표시된 내용을 이미지로 자동 추출하기
- 17. 파일의 내용을 이미지로 시각화하는 방법은 무엇입니까?
- 18. 내용을 이미지로 내보낼 때 RichTextBox가 나타나지 않습니다.
- 19. 캔버스의 내용을 Java 서버에 보내고 이미지로 저장
- 20. DIV 내용을 C# 또는 JavaScript의 이미지로 변환합니다.
- 21. JavaFX 스테이지 변경 방법
- 22. PHP에서 base64로 인코딩 된 png를 가져와 이미지로 출력하는 방법은 무엇입니까?
- 23. struct에서 char을 출력하는 방법
- 24. AS3에서 문자열을 출력하는 방법
- 25. 파이썬에서 0xfb를 출력하는 방법
- 26. Log4Net에서 XML을 출력하는 방법
- 27. PHP에서 배열을 출력하는 방법?
- 28. 쿼리에서 부울을 출력하는 방법
- 29. JSON 출력을 출력하는 방법
- 30. 메시지를 출력하는 다른 방법
새로운 FX 2.2 스냅 샷 기능으로 인해 답변이 업데이트되었습니다 –