2012-02-09 15 views
6

में एक सीनियरग्राफ की सामग्री को आउटपुट कैसे करें JavaFX 2 में Image में Scene ग्राफ़ की सामग्री को आउटपुट कैसे करें। असल में, मैं एक ऐप पर काम कर रहा हूं, जो मूल रूप से कार्ड तैयार करता है। तो, उपयोगकर्ता बस दृश्य को अनुकूलित करने के लिए विभिन्न विकल्पों पर क्लिक करता है। आखिर में मैं दृश्य सामग्री को एक छवि फ़ाइल में निर्यात करना चाहता हूं। मैं उसको कैसे करू ?जावाएफएक्स 2 में एक छवि

उत्तर

9

एफएक्स 2.2 में नई स्नैपशॉट सुविधा उस मामले के लिए दिखाई दी। तुम बस कह सकते हैं

WritableImage snapshot = scene.snapshot(null); 

बड़े FX के साथ आप 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); 
+0

मैंने नई FX 2.2 स्नैपशॉट सुविधा –

4

अद्यतन

JavaFX 2.2 (jdk7u6) एक नोड snapshot to image सुविधा है जो इस कार्य को पूरा करने के लिए पसंदीदा तरीका होगा गयी।


2.2 से पहले, जावाएफएक्स में वर्तमान में एक नोड या सीन को एक छवि में बदलने के लिए सार्वजनिक फ़ंक्शन नहीं है। इस http://javafx-jira.kenai.com/browse/RT-13751 के लिए एक खुला सुविधा अनुरोध है (कोई भी वर्तमान सुविधा अनुरोध स्थिति देखने के लिए साइन अप कर सकता है)।

इस बीच में समाधान के लिए, आप घुमाओ/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 कोड पर चलाता है केवल एडब्ल्यूटी थ्रेड पर चलता है।

+1

के कारण एक उत्तर अपडेट किया है ऐसा लगता है कि सर्गेई पहले से ही एक समाधान पोस्ट कर रहा है, जबकि मैं अपना उत्तर लिख रहा था - ऐसा लगता है कि दो समाधान बहुत समान हैं ;-) मैं अपना डुप्लिकेट उत्तर छोड़ दूंगा इसमें कुछ उपयोगी लिंक हैं। – jewelsea

संबंधित मुद्दे