2017-04-06 71 views

回答

4

您可以在不同时间点创建面板的BufferedImage,然后将图像保存到文件中。

这种情况的基本逻辑是:

BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB); 
Graphics2D g2d = image.createGraphics(); 
panel.print(g2d); 
g2d.dispose(); 
ImageIO.write(...); 

退房的Screen Image类实现上述功能的简便方法。

当然这不会很有效率,因为您需要为每个帧都创建一个全新的图像。

+0

您最好使用print或printAll来代替paint,因为它不涉及双缓冲......并且不会在屏幕上未实现组件时抛出异常; ) – MadProgrammer

+0

@MadProgrammer,不使用双缓冲区是有道理的。 (代码已更改)。如果组件没有实现,虽然存在绘画问题,但我从来没有遇到异常(平台差异?)问题。基本上我发现组件的大小是(0,0),所以没有什么可以绘制的。 ScreenImage类通过调用布局代码来处理您的尺寸。 – camickr

+0

我已经通过'NullPointerException'获得了它,但它可能与它没有添加到任何父级的事实有关,所以它在设置双缓冲区时遇到了问题......或者某种东西,我只是在这种情况下发现'print'和'printAll'更可靠:P – MadProgrammer