代码之家  ›  专栏  ›  技术社区  ›  zygimantus

如何以编程方式将ChartPanel中的当前图表保存为PNG?

  •  8
  • zygimantus  · 技术社区  · 8 年前

    我创建了一个 JFreeChart 在一个 ChartPanel 我想以编程方式保存它。该功能应该存在,因为可以手动执行此操作(右键单击菜单和 PNG 选项)。

    我找到了方法 chartPanel.createImage(??, ??) ,但我不知道 width height 我需要设置。

    3 回复  |  直到 8 年前
        1
  •  9
  •   zygimantus    8 年前

    解决办法是使用一种方法 ChartUtilities.writeChartAsPNG

    例子:

    try {
    
        OutputStream out = new FileOutputStream(chartName);
        ChartUtilities.writeChartAsPNG(out,
                aJFreeChart,
                aChartPanel.getWidth(),
                aChartPanel.getHeight());
    
    } catch (IOException ex) {
        logger.error(ex);
    }
    
        2
  •  2
  •   Damico    6 年前

    此外,您还可以执行以下操作:

    public static void exportAsPNG throws IOException {
        JFreeChart chart = createChart(createDataset());
    
    
        BufferedImage image = new BufferedImage(600, 400, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = image.createGraphics();
    
        g2.setRenderingHint(JFreeChart.KEY_SUPPRESS_SHADOW_GENERATION, true);
        Rectangle r = new Rectangle(0, 0, 600, 400);
        chart.draw(g2, r);
        File f = new File("/tmp/PNGTimeSeriesChartDemo1.png");
    
    
    
        BufferedImage chartImage = chart.createBufferedImage( 600, 400, null); 
        ImageIO.write( chartImage, "png", f ); 
    }
    
        3
  •  1
  •   Łukasz Wachowicz    4 年前

    1.5版之前使用 ChartUtilities

    ChartUtilities.saveChartAsPNG(<File>, chart, width, height);
    ChartUtilities.writeChartAsPNG(<OutputStream>, chart, width, height);
    

    已重命名1.5版JFreeChart 图表实用程序 类到 ChartUtils 。它提供了相同的功能。

    ChartUtils.saveChartAsPNG(<File>, chart, width, height);
    ChartUtils.writeChartAsPNG(<OutputStream>, chart, width, height);
    

    请注意,这些方法有更多变体。