我一直在寻找我的问题的解决方案,但没有什么能完全符合我的要求。
我想要做的是将整个 JUNG 图(具有自定义顶点和边缘渲染)保存到图像(PNG 或 JPEG)中。当我将 VisualizationViewer 保存到 BufferedImage 时,它只占用可见部分。我想保存整个图表,所以这不是一个选项。
有没有人知道如何将我的整个图表呈现为图像?
提前致谢!
我一直在寻找我的问题的解决方案,但没有什么能完全符合我的要求。
我想要做的是将整个 JUNG 图(具有自定义顶点和边缘渲染)保存到图像(PNG 或 JPEG)中。当我将 VisualizationViewer 保存到 BufferedImage 时,它只占用可见部分。我想保存整个图表,所以这不是一个选项。
有没有人知道如何将我的整个图表呈现为图像?
提前致谢!
我终于找到了解决我的问题的方法,使用VisualizationImageServer
. 以下是如何从整个 JUNG 图创建图像的示例,供其他人使用:
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
}
您可能想看看我不久前整理的 StandardPrint 类:
http://tus.svn.sourceforge.net/viewvc/tus/tjacobs/print/
您可以使用 preview() 将任何组件(或使用 SpecialPrint 的任何组件)渲染到图像
我按照 dylan202 建议的方式捕获图像的经验是,图像质量达不到标准。因为我需要这些图像来进行演示。
获得 Jung 网络的高质量图像的另一种方法是使用FreeHEP的 VectorGraphics 库。
我使用这个库在 pdf 文件中生成图像。之后,我将 pdf 中的图像快照到我的演示文稿中。
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();
也可以生成 JPEG 或其他类型的文件。例如,要生成 SVG 文件,只需更改一行:
VectorGraphics g = new SVGGraphics2D(new File("Network.svg"), vv);
有关详细信息,请参阅手册。
PDF 文件的放大快照
BufferedImage image = (BufferedImage) vis.getImage(
new Point2D.Double(graph.getGraphLayout().getSize().getWidth() / 2,
graph.getGraphLayout().getSize().getHeight() / 2),
new Dimension(graph.getGraphLayout().getSize()));
Graph 类中没有名为“getGraphLayout”的方法,而是可视化查看器的方法。