gpt4 book ai didi

java - JUNG:将图形保存到图像文件中

转载 作者:行者123 更新时间:2023-12-04 06:00:47 26 4
gpt4 key购买 nike

我使用 JUNG 来可视化我的图形/网络。
现在我想将图形(如 VisualizationViewer 中所见)保存在图像文件中。我使用 VisualizationViewer(扩展 JPanel)的paint()/paintAll() 函数。但是使用此功能,只有在 VisualizationViewer 中实际显示的部分(例如放大后)才会出现在图像中。我想绘制所有顶点和边。有没有办法绘制所有元素?

最佳答案

我找到了使用 freeHEP library 的解决方案和荣格的 VisualizationImageServer :

private void doSaveAs() throws IOException {
// instantiate and configure image-able visualization viewer
VisualizationImageServer<Vertex, Edge> vis =
new VisualizationImageServer<Vertex, Edge>(this.visViewer.getGraphLayout(),
this.visViewer.getGraphLayout().getSize());

setUpAppearance(vis);

ExportDialog export = new ExportDialog();
export.showExportDialog(vis, "Export view as ...", vis, "export");
}

调用时,这将向用户打开一个导出对话框,可以在其中选择目录和文件类型。

在这个片段中,ExportDialog 是 org.freehep.graphicsbase.util.export.ExportDialog ,您必须以某种方式进入您的构建路径,在我的情况下,通过添加 freehep-graphicsio 使用 maven到我的 pom 文件。

领域 this.visViewer包含您的常规 VisualizationViewer例如,您还可以使用它来显示您的图表。

方法 setUpAppearance(vis);执行与我在 VisualizationViewer 上所做的相同的设置用于显示目的的实例。这是一个示例,详细信息可能因您而异:
private void setUpAppearance(BasicVisualizationServer<Vertex, Edge> vis) {
vis.setBackground(BGCOLOR);
vis.setPreferredSize(new Dimension(1500, 600)); // Sets the viewing area

// modify vertices
vis.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
vis.getRenderContext().setVertexFontTransformer(Transformers.vertexFontTransformer);
vis.getRenderContext().setVertexShapeTransformer(Transformers.vertexShapeTransformer);
vis.getRenderContext().setVertexFillPaintTransformer(Transformers.vertexFillPaintTransformer);
vis.getRenderContext().setVertexDrawPaintTransformer(Transformers.vertexDrawPaintTransformer);
vis.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);

// modify edges
vis.getRenderContext().setEdgeShapeTransformer(Transformers.edgeShapeTransformer);
vis.getRenderContext().setEdgeDrawPaintTransformer(Transformers.edgeDrawPaintTransformer);
vis.getRenderContext().setArrowDrawPaintTransformer(Transformers.edgeDrawPaintTransformer);
vis.getRenderContext().setArrowFillPaintTransformer(Transformers.edgeDrawPaintTransformer);
vis.getRenderContext().setEdgeArrowPredicate(Transformers.edgeArrowPredicate);
vis.getRenderContext().setEdgeStrokeTransformer(Transformers.edgeStrokeHighlightingTransformer);
}

作为最后一步,您需要确定何时 doSaveAs应该叫。例如,您可以为此在 UI 上添加一个 Button。

关于java - JUNG:将图形保存到图像文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8926262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com