2012-05-02 25 views
6

Tôi đã tìm kiếm các giải pháp cho câu hỏi của mình, nhưng không có gì chính xác những gì tôi muốn.JUNG: lưu toàn bộ đồ thị (không chỉ phần hiển thị) như hình ảnh

Điều tôi muốn làm là lưu toàn bộ biểu đồ JUNG (với tùy chỉnh đỉnh và cạnh hiển thị) vào một hình ảnh (PNG hoặc JPEG). Khi tôi lưu VisualizationViewer vào BufferedImage, nó chỉ chiếm phần hiển thị. Tôi muốn lưu toàn bộ đồ thị, vì vậy đó không phải là một lựa chọn.

Có ai có ý tưởng về cách hiển thị toàn bộ biểu đồ của tôi cho hình ảnh không?

Cảm ơn trước!

Trả lời

11

Cuối cùng tôi đã tìm ra giải pháp cho vấn đề của mình, sử dụng VisualizationImageServer. Dưới đây là một ví dụ về cách tạo ra một hình ảnh từ một đồ thị toàn bộ JUNG, cho những người khác phải vật lộn với nó:

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

Và, nếu bạn cần phải lưu một đồ họa vector (thay vì PNG), thấy điều này: http://stackoverflow.com/questions/8518390/exporting-jung -graphs-to-hi-res-images-bestably-vector-based – bikashg

+0

@ dylan202 Hình ảnh đã lưu không phản ánh bất kỳ màu sắc, hình dạng hoặc độ nhớt nào. Bạn có bận tâm về những điều này và tìm thấy một giải pháp cho nó? – SacJn

1

Bạn có thể muốn có một cái nhìn tại các lớp StandardPrint tôi đặt lại với nhau một thời gian trở lại:

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

Bạn có thể làm cho bất kỳ thành phần (hoặc bất cứ điều gì, sử dụng SpecialPrint) đến một hình ảnh, sử dụng xem trước ()

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

Không có một phương pháp như vậy có tên là "getGraphLayout" của lớp Graph nhưng một visualizationviewer .

+0

Chính xác! Tôi sửa nó rồi :) – dylan202

1

Trải nghiệm của tôi khi chụp ảnh theo cách dylan202 đề xuất, là chất lượng của hình ảnh không được đánh dấu. Vì tôi cần những hình ảnh cho bài thuyết trình của mình.

Một cách khác để có được hình ảnh chất lượng cao của mạng Jung là sử dụng thư viện VectorGraphics từ FreeHEP.

Tôi đã sử dụng thư viện này để tạo hình ảnh trong tệp pdf. Sau đó tôi chụp những bức ảnh của bức ảnh từ bản pdf đến bài thuyết trình của tôi.

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(); 

Cũng có thể tạo JPEG hoặc các loại tệp khác. Ví dụ để tạo ra các file SVG chỉ có một dòng cần phải được thay đổi:

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

Để biết thêm thông tin xem các manual.

phóng to ảnh chụp từ tập tin PDF Zoomed in snapshot from the PDF file

Các vấn đề liên quan