Экспорт графиков JUNG в изображения высокого разрешения (желательно векторные) - PullRequest
6 голосов
/ 15 декабря 2011

В одном из моих проектов я использую JUNG2 для визуализации очень большого графа иерархии с несколькими родителями, отображаемого в апплете. Мне нужно было бы экспортировать все части графика в неподвижные изображения с высоким разрешением, так как при печати снимки экрана выглядят отвратительно (особенно если график уменьшен).

Код, который я сейчас использую, выглядит следующим образом:

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. Есть ли другие альтернативы, которые я мог бы пропустить?

Заранее спасибо,

Ответы [ 4 ]

6 голосов
/ 19 декабря 2011

Спасибо за предложения, но мне удалось Библиотека векторной графики 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");
    }
}
1 голос
/ 15 декабря 2011

В основном PNG достаточно.Размер разрешения в BufferedImage - это пиксели, а не точки на дюйм.Так что вам нужно удвоить / утроить ваши width и height, чтобы получить лучшее разрешение.

Graphics2D может масштабироваться также для графиков JUNG.

0 голосов
/ 20 марта 2018

вы можете использовать Xchart, а затем экспортировать изображения с помощью vectorgraphics2d в SVG или PDF

0 голосов
/ 20 апреля 2012

Вы можете использовать батик для этого: http://xmlgraphics.apache.org/batik/using/svg-generator.html

...