【问题标题】:How to create an Image from Graph?如何从图形创建图像?
【发布时间】:2016-08-09 21:55:56
【问题描述】:

有人可以给我一些关于如何从我创建的图表中保存图像 (PNG) 的建议吗?

这是java程序:

public class GraphingData extends JPanel {
    int[] data = {
             110, 535, 0, 459, 380, 199, 212, 722, 332, 836, 149, 10, 656, 465, 100, 173, 277, 381, 685, 988, 89, 585, 381, 779, 378, 769, 265, 10 
    };
    final int PAD = 20;

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
        int w = getWidth();
        int h = getHeight();

        .......
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new GraphingData());
        f.setSize(1000,500);
        f.setLocation(200,200);
        f.setVisible(true);
    }
}

【问题讨论】:

标签: java image


【解决方案1】:

要将面板当前在屏幕上的显示方式(大小等)存储到文件中

BufferedImage bi = new BufferedImage(panel.getSize().width, panel.getSize().height, BufferedImage.TYPE_INT_RGB);
panel.paint(bi.createGraphics());
ImageIO.write(bi, "PNG", new File("path/to/file.png"));

除此之外,不要直接使用作为参数提供给paintComponent 的Graphics,而是在其上调用g.create(),如果您完成了该新实例,则在其上调用dispose()。您不应更改有关颜色、转换等的 Graphics 对象,并使用 create()dispose() 确保是这种情况。

【讨论】:

  • 太棒了,工作正常!谢谢我现在的问题是如何进行更改并在没有 f.setvisible (true) 的情况下保存我的图像,如果我执行 f.setvisible (false) 我保存的图像只有黑色
  • 调试代码,看看为什么它没有被绘制。如果 e。 G。宽度或高度为 0,然后paint() 立即返回而不打印任何内容。顺便提一句。如果您根本不想显示组件,那么创建它只是为了绘制图像是没有意义的。如果您最终还想在屏幕上显示它,您可能只是将尺寸设置为首选尺寸或任何其他尺寸并且很好。但正如我所说,调试它并查看。这就是为什么我说它被绘制到屏幕上显示的图像上。 ;-) 顺便提一句。请阅读并遵守stackoverflow.com/help/someone-answers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
相关资源
最近更新 更多