当前位置: 首页 > 面试题库 >

将JUNG图导出到高分辨率图像(最好是基于矢量的图像)

商昆琦
2023-03-14
问题内容

在我的一个项目中,我使用JUNG2可视化显示在applet中的非常大的多父级层次结构图。我需要将图形的全部/部分导出为高分辨率的静止图像,因为屏幕截图在打印时看起来很丑陋(特别是如果图形已经缩小)。

我当前使用的代码如下:

public void writeToDisk(File saveToFolder, String filename) {
    //Dimension loDims = getGraphLayout().getSize();
    Dimension vsDims = getSize();

    int width = vsDims.width;
    int height = vsDims.height;
    Color bg = getBackground();

    BufferedImage im = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
    Graphics2D graphics = im.createGraphics();
    graphics.setColor(bg);
    graphics.fillRect(0,0, width, height);
    paintComponent(graphics);

    try{
       ImageIO.write(im,"png",new File(saveToFolder,filename));
    }catch(Exception e){
        e.printStackTrace();
    }
}

这会创建不是特别高分辨率的PNG图像。所以我的问题如下:

  1. 是否可以将PNG导出分辨率提高到300 dpi?
  2. 是否可以将图形或与此相关的任何摆动组件导出为基于矢量的格式,例如EPS,PDF或SVG,而不会带来太多麻烦?我已经找到了几个库(VectorGraphics2D,FreeHEP)来管理Java中基于矢量的图像,但是我不确定使用它们是否意味着我必须“ 重绘 ”图形中的每个顶点和边缘。这显然不是很理想…
  3. 还有其他我可能会错过的选择吗?

提前致谢,


问题答案:

感谢您的建议,但我设法使FreeHEP矢量图库以我想要的方式工作。如果有人遇到相同的问题,我将分享下面的代码。

上面提到的库具有一个非常不错的内置导出菜单,该菜单可处理多种不同格式的导出。修改后的“ ModelGraphMouse”类的代码摘录:

protected void handlePopup(MouseEvent e) {
        final VisualizationViewer<MyNode, MyEdge> vv = (VisualizationViewer<MyNode, MyEdge>)e.getSource();
        Point2D p = e.getPoint();
        GraphElementAccessor<MyNode, MyEdge> pickSupport = vv.getPickSupport();
        if(pickSupport != null) {
            final MyNode v = pickSupport.getVertex(vv.getGraphLayout(), p.getX(), p.getY());

            // if clicked on a vertex -> show info popup
            // else show contexual menu
            if(v != null) {
                JFrame popup = new JFrame("Node: " + v.getId());
                popup.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                ...
            } else{
                JPopupMenu menu = new JPopupMenu();
                JMenuItem exportGraphMenuItem = new JMenuItem("Export graph to vector image...");
                exportGraphMenuItem.addActionListener(new ExportActionListener((WritingVisualizationViewer<V, E>) vv));
                menu.add(exportGraphMenuItem);
                menu.show(e.getComponent(), e.getX(), e.getY());
            } 
        }
    }

和动作监听器:

    public class ExportActionListener implements ActionListener{

    private VisualizationViewer<V, E> wvv;
    public ExportActionListener(VisualizationViewer<V, E> vv) {
        this.wvv = vv;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        ExportDialog export = new ExportDialog();
        export.showExportDialog(wvv, "Export view as ...", wvv, "export");
    }
}


 类似资料:
  • 我看过使用PDFBox基于图像DPI提取图像的代码,如下所示 在上面的代码中,我可以指定图像分辨率(150),同时从pdf中提取图像。更高的分辨率,我得到更大的图像作为回报。 现在,我想反转它的意思是在将图像写入PDF时指定图像的分辨率/dpi,但下面的代码没有提供指定dpi的选项吗?有谁能指引我在哪里失踪 在将图像写入pdf时,请告诉我在哪里可以传递分辨率/DPI参数(因为图像大于pdf页面大小

  • 问题内容: 我想将JPanel中的图像导出到矢量图形文件中,以便可以以高于屏幕的分辨率对其进行编辑和打印。本质上,我希望使用目标图形调用它的功能,该目标图形将绘图命令保存到矢量图形文件中。 有什么好的简单方法呢?推荐哪些库?哪种矢量格式最好,为什么? 问题答案: 看看Java EPS Graphics2D包。 许多Java程序都使用Graphics2D在屏幕上绘制内容,虽然很容易将输出另存为png

  • 问题内容: 当网站输出到客户端时,我正在尝试优化网站的大小。缓存时,我分别只有1.9MB和29KB。问题在于,第一次加载包含的图像对于移动设备而言并未经过优化。它具有1080p分辨率。 因此,我正在寻找一种方法,该方法允许我首先加载低分辨率版本(),一旦网站加载完毕,请使用高分辨率版本- 甚至分辨率接近所用设备的分辨率版本(或只是) 。 就像每个人都期望的那样,使用CSS设置背景。它应用于主体,整

  • 问题内容: 情况:我有一张图片,用户可以在上面添加文本,在其中更改颜色,大小,位置,旋转度,字体大小等,我需要将所有这些文本保存在一张图像中。没关系,我通过使用图形缓存保存它们。 问题:由于用户设备的屏幕尺寸,结果图像可能很小。我需要此图像的分辨率为1500-2000像素。如果仅调整此图像的大小,则文本看起来模糊并且不如在屏幕上显示的那样好。 问题:还有其他方法可以将文本视图另存为图像,而不仅仅是

  • 在Java 9中,已经推出了一种新的多分辨率图像API,支持具有不同分辨率变体的多个图像。 该API允许将具有不同分辨率的一组图像用作单个多分辨率图像。 以下是多分辨率图像的主要操作。 - 获取一个特定的图像,这是最好的变体,以指定的尺寸表示这个逻辑图像。 - 获取所有分辨率变体的可读列表。 示例 执行上面示例代码,得到以下结果 -

  • 我有一个java的列表。awt。图像,每个分辨率为300 DPI。我想打印它们,当我开始打印这些图像时(使用javax.PrintService API),只打印一些图像的一部分,因为Java的打印/3D类默认使用72DPI(相对于我的图像的300 DPI)。但是,当我使用72 DPI的图像(与Java默认值具有相同的分辨率)时,所有图像都可以很好地打印(打印整个图像时,而不仅仅是其中的一部分)。