2012-05-02 23 views
6

के रूप में पूरे ग्राफ को सहेजें (केवल दृश्य भाग नहीं) मैं अपने प्रश्न के समाधान के लिए चारों ओर देख रहा हूं, लेकिन कुछ भी नहीं जो मैं चाहता हूं।जंगल: छवि

मैं जो करना चाहता हूं वह एक पूर्ण जंगल ग्राफ (कस्टम वर्टेक्स और एज प्रतिपादन के साथ) को एक छवि (पीएनजी या जेपीईजी) में सहेजना है। जब मैं विजुअलाइजेशन व्यूअर को BufferedImage में सहेजता हूं, तो यह केवल दृश्य भाग लेता है। मैं पूरे ग्राफ को सहेजना चाहता हूं, इसलिए यह कोई विकल्प नहीं है।

क्या किसी को भी इस छवि पर मेरा पूरा ग्राफ प्रस्तुत करने का विचार है?

अग्रिम धन्यवाद!

उत्तर

11

मुझे VisualizationImageServer का उपयोग करके अंततः मेरी समस्या का समाधान मिला।

import edu.uci.ics.jung.visualization.VisualizationImageServer; 

... 

// Create the VisualizationImageServer 
// vv is the VisualizationViewer containing my graph 
VisualizationImageServer<Node, Edge> vis = 
    new VisualizationImageServer<Node, Edge>(vv.getGraphLayout(), 
     vv.getGraphLayout().getSize()); 

// Configure the VisualizationImageServer the same way 
// you did your VisualizationViewer. In my case e.g. 

vis.setBackground(Color.WHITE); 
vis.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller<Edge>()); 
vis.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<Node, Edge>()); 
vis.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<Node>()); 
vis.getRenderer().getVertexLabelRenderer() 
    .setPosition(Renderer.VertexLabel.Position.CNTR); 

// Create the buffered image 
BufferedImage image = (BufferedImage) vis.getImage(
    new Point2D.Double(vv.getGraphLayout().getSize().getWidth()/2, 
    vv.getGraphLayout().getSize().getHeight()/2), 
    new Dimension(vv.getGraphLayout().getSize())); 

// Write image to a png file 
File outputfile = new File("graph.png"); 

try { 
    ImageIO.write(image, "png", outputfile); 
} catch (IOException e) { 
    // Exception handling 
} 
+0

से स्नैपशॉट में ज़ूम किया गया और, यदि आप, एक वेक्टर ग्राफिक्स (पीएनजी के बजाय) को बचाने देखते हैं कि यह करने की जरूरत है: http://stackoverflow.com/questions/8518390/exporting-jung -ग्राफ-टू-हाय-रेज-इमेजेस-अधिमानतः-वेक्टर-आधारित – bikashg

+0

@ dylan202 सहेजी गई छवि किसी भी रंग, आकार या दृश्यता को प्रतिबिंबित नहीं करती है। क्या आपने इन चीजों के बारे में परेशान किया और इसका समाधान पाया? – SacJn

1

आप StandardPrint वर्ग पर एक नज़र मैं एक साथ रखा कुछ समय के लिए चाहते हो सकता है: (, या कुछ भी SpecialPrint का उपयोग कर)

http://tus.svn.sourceforge.net/viewvc/tus/tjacobs/print/

आप किसी भी घटक प्रदान कर सकते हैं, एक छवि के लिए पूर्वावलोकन का उपयोग ()

0
BufferedImage image = (BufferedImage) vis.getImage(
new Point2D.Double(graph.getGraphLayout().getSize().getWidth()/2, 
graph.getGraphLayout().getSize().getHeight()/2), 
new Dimension(graph.getGraphLayout().getSize())); 

कोई ऐसी पद्धति ग्राफ़ वर्ग की लेकिन एक visualizationviewer का नाम "getGraphLayout" है: यहाँ कैसे अन्य लोगों ने उसे साथ संघर्ष के लिए एक पूरी जंग ग्राफ से एक छवि बनाने के लिए, का एक उदाहरण है ।

+0

बिल्कुल! मैंने इसे सही किया :) – dylan202

1

छवियों को कैप्चर करने के साथ मेरा अनुभव जिस तरह से dylan202 सुझाया गया था, यह था कि छवियों की गुणवत्ता निशान तक नहीं थी। चूंकि मुझे अपनी प्रस्तुति के लिए छवियों की आवश्यकता थी।

अपने जंगल नेटवर्क की उच्च गुणवत्ता वाली छवियां प्राप्त करने का एक और तरीका है फ्रीएचईपी से VectorGraphics लाइब्रेरी का उपयोग करना।

मैंने इस पुस्तकालय का उपयोग पीडीएफ फ़ाइल में छवियों को उत्पन्न करने के लिए किया था। बाद में मैंने अपनी प्रस्तुति में पीडीएफ से छवि का स्नैपशॉट लिया।

JPanel panel = new JPanel(); 
panel.setLayout(new FlowLayout()); 
panel.setBackground(Color.WHITE); 
panel.add(vv); 

Properties p = new Properties(); 
p.setProperty("PageSize","A4"); 

// vv is the VirtualizationViewer 

VectorGraphics g = new PDFGraphics2D(new File("Network.pdf"), vv);     

g.setProperties(p); 
g.startExport(); 
panel.print(g); 
g.endExport(); 

जेपीईजी या अन्य प्रकार की फाइलें उत्पन्न करना भी संभव है। उदाहरण SVG फ़ाइलें केवल एक लाइन की जरूरत है उत्पन्न करने के लिए के लिए परिवर्तित किया जा सकता:

VectorGraphics g = new SVGGraphics2D(new File("Network.svg"), vv); 

अधिक जानकारी के लिए manual देखते हैं।

पीडीएफ फाइल Zoomed in snapshot from the PDF file