【问题标题】:How can I paint an image from BufferStrategy to Png file?如何将图像从 BufferStrategy 绘制到 Png 文件?
【发布时间】:2019-06-22 18:31:52
【问题描述】:

我创建了一个生成雪花的 Java 程序,我想在程序完成绘图后将创建的图像保存为 .png 文件。

我在互联网上搜索过,但我发现只有使用 BufferedImage 的程序,而我使用的是 BufferStrategy,所以我不知道从哪里开始。

我的程序中的 draw 方法使用 BufferStrategy 来创建 Graphics 组件。 例如,要画一条简单的线,方法是:

bs = display.getCanvas().getBufferStrategy();
if (bs == null) {
    display.getCanvas().createBufferStrategy(3);
    return;
}

g = bs.getDrawGraphics();
g.clearRect(0, 0, width, height);
g.setColor(Color.BLACK);
g.drawLine(0, 0, 50, 50);

我想要的是获得程序在屏幕上绘制的内容的精确副本,以保存为 .png 图像。 希望你能帮助我。

【问题讨论】:

  • 您需要做的就是将您创建的 Graphics 对象 (g) 从顶层向下传递到 paint/paintComponent/paintAll 中
  • 如果您在这里查看我以前是如何做到这一点的,您只需发送您的 Graphics 对象进行绘制:sourceforge.net/p/tus/code/HEAD/tree/tjacobs/print/…
  • 不是绘制到 BufferedStrategy 的 Graphics 上下文,而是绘制到图像的 Graphics 上下文

标签: java graphics awt png bufferstrategy


【解决方案1】:

为什么不截取屏幕截图,然后将其粘贴到 MS Paint 或其他(更好的)图像编辑软件(如 Photoshop 或 fire alpaca)上?这应该可以解决您的问题。

【讨论】:

    【解决方案2】:

    BufferedStrategyBufferedImage 之间的共同点是 Graphics,因此您想编写一个绘制例程,以便您可以简单地将 Graphics 的引用传递给它

    public void render(Graphics g) {
        g.clearRect(0, 0, width, height);
        g.setColor(Color.BLACK);
        g.drawLine(0, 0, 50, 50);
    }
    

    然后你可以传递你想要的任何上下文。

    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_RGB);
    Graphics2D g2d = img.createGraphics();
    render(g2d);
    g2d.dispose();
    

    然后您可以使用ImageIO.write 将图像写入磁盘。详情请见Writing/Saving an Image

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 2012-05-08
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多