I've been looking around for solutions to my question, but nothing does exactly what I want.
What I want to do is save a whole JUNG graph (with custom vertex and edge rendering) to an image (PNG or JPEG). When I save the VisualizationViewer to a BufferedImage, it only takes the visible part. I want to save the whole graph, so that's not an option.
Does anyone have an idea on how to render my whole graph to an image?
Thanks in advance!
I finally found the solution to my problem, using a VisualizationImageServer
.
Here is an example of how to create an image from a whole JUNG graph, for others struggling with it:
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
}
You might want to have a look at the StandardPrint class I put together a while back:
http://tus.svn.sourceforge.net/viewvc/tus/tjacobs/print/
You can render any component (or anything, using SpecialPrint) to an image, using preview()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With