Cách xuất nội dung của biểu đồ Scene
trong JavaFX 2 đến Image
. Trên thực tế, tôi đang làm việc trên một ứng dụng, về cơ bản thiết kế thẻ. Vì vậy, người dùng chỉ cần nhấp vào các tùy chọn khác nhau để tùy chỉnh cảnh. Cuối cùng, tôi muốn xuất nội dung cảnh vào một tệp hình ảnh. Làm thế nào để làm điều đó ?Cách xuất nội dung của một Scenegraph trong JavaFX 2 sang một hình ảnh
Trả lời
Trong FX 2.2, tính năng chụp nhanh mới xuất hiện cho vấn đề đó. Bạn chỉ có thể nói
WritableImage snapshot = scene.snapshot(null);
Với FX cũ hơn, bạn có thể sử dụng Robot AWT. Đây không phải là cách tiếp cận rất tốt vì nó đòi hỏi toàn bộ ngăn xếp AWT để bắt đầu.
// 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);
Cập nhật
JavaFX 2.2 (jdk7u6) thêm một Node snapshot to image tính năng đó sẽ là cách ưa thích của việc hoàn thành nhiệm vụ này.
Trước 2.2, JavaFX hiện không có chức năng công khai để chuyển đổi nút hoặc cảnh thành hình ảnh. Có một yêu cầu tính năng mở cho http://javafx-jira.kenai.com/browse/RT-13751 này (mọi người đều có thể đăng ký để xem trạng thái yêu cầu tính năng hiện tại).
Là một workaround trong khi chờ đợi, bạn có thể sử dụng Swing/chức năng AWT để chuyển đổi cảnh JavaFX để một hình ảnh và ghi ảnh kết quả vào một tập tin:
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);
Đoạn mã trên được diễn giải từ: JavaFXDev: Screen capture tool .
Các sceneRect có thể được xác định bởi:
Stage stage = (Stage) scene.getWindow();
stage.toFront();
Rectangle sceneRect = new Rectangle(
stage.getX() + scene.getX(), stage.getY() + scene.getY(),
scene.getWidth(), scene.getHeight());
Nếu bạn làm theo các thành ngữ trên, hãy cẩn thận của luồng - chẳng hạn rằng mã truy cập vào cảnh JavaFX sống chỉ chạy trên các Chủ đề JavaFX Application và mã AWT chỉ chạy trên chuỗi AWT.
Có vẻ như Sergey đã đăng giải pháp khi tôi viết câu trả lời của tôi - có vẻ như hai giải pháp khá giống nhau ;-) Tôi sẽ để lại câu trả lời trùng lặp của mình nó chứa một vài liên kết hữu ích. – jewelsea
- 1. HTML2Canvas chuyển đổi nội dung bị tràn sang hình ảnh
- 2. Làm cách nào để xuất nội dung của bảng oracle sang một tệp?
- 3. lưu/xuất tệp hình ảnh từ nội dung html?
- 4. Cách di chuyển hình ảnh từ thư viện nội dung sang một vị trí riêng tư của ứng dụng?
- 5. Sao chép vùng của một hình ảnh sang vùng khác trong một hình ảnh khác
- 6. thay thế cho nội dung của UIViewBài viết cho nội dung không dựa trên hình ảnh
- 7. Cách xóa nội dung của một div
- 8. cách chính xác để di chuyển một nút bằng cách kéo trong javafx 2?
- 9. Tạo hình ảnh bitmap từ EditText & nội dung của nó
- 10. Tìm ra Loại nội dung của một hình ảnh từ byte []
- 11. Làm cách nào để in một nội dung của JPanel?
- 12. XCode: Xuất Storyboard sang hình ảnh
- 13. JavaFX-2 - đặt một số kiểu
- 14. Làm cách nào để hiển thị hình ảnh này trong phần nội dung email của tôi?
- 15. nội dung tải hình ảnh từ máy ảnh vào một tập tin
- 16. Cách nhúng hình ảnh vào nội dung HTML của email trong iOS
- 17. Cách thêm hình ảnh vào nội dung bằng HAML?
- 18. Android - Hình ảnh từ thư mục Nội dung trong GridView
- 19. Nội suy dọc theo các lát hình ảnh 2-D
- 20. Không thể tải hình ảnh trong JavaFX
- 21. Làm thế nào để chuyển đổi tất cả nội dung trong một scrollview sang một bitmap?
- 22. Xuất HighChart thành hình ảnh trong tệp excel cùng với nội dung trang khác
- 23. Sao chép nội dung của một hộp văn bản sang một hộp văn bản khác
- 24. Sao chép nội dung của một thư mục này sang một thư mục khác
- 25. Tổng hợp nội dung của 2 danh sách trong Groovy
- 26. Xuất tệp hình ảnh từ một servlet
- 27. WINDBG, cách xem nội dung của một mảng?
- 28. Cuộn 2 nội dung DIV + nội dung chính bằng thanh cuộn chính của trình duyệt
- 29. Cách đọc nội dung của tệp nhị phân trong một chuỗi trong Clojure?
- 30. Làm cách nào để một hàm có 'varargs' truy xuất nội dung của ngăn xếp?
Tôi đã cập nhật câu trả lời do tính năng chụp nhanh FX 2.2 mới –