我有一个应用程序在JPanel上绘制图像。我想完全处理GUI,因此只从代码调用应用程序,没有用户界面,因此图像只保存到gif文件中。
我已尝试使用this question,中的代码,当我从旧GUI中调用save gif代码时似乎工作正常。但是,当我删除GUI时,保存gif代码似乎不起作用,我想知道是否这可能是因为它试图打印的JPanel实际上没有像JFrame那样进入GUI容器等。
我没有发布代码的原因是它太冗长了,我只是要求一个简单的样板答案。
我已经为其他应用程序试过了writeablerasters。但这需要一个针对此应用程序的主要重新编码项目,该项目使用graphics.drawLine()方法进行绘制。任何人都可以建议一种代码有效的方式来获取“幻影”JPanel的内容,将其放入BufferedImage,然后将其保存为gif,而不必将JPanel放在GUI中吗?
答案 0 :(得分:1)
由于您的应用程序使用JPanel
,因此它只需要一个Graphics
对象。您可以使用BufferedImage
中的一个,然后保存到文件。示例代码:
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics g = image.getGraphics();
// Pass this graphics object to your application to perform the drawing
g.setColor(Color.red);
g.drawRoundRect(10, 10, 20, 20, 5, 5);
// save it to disk
ImageIO.write(image, "png", new File("test.png"));
答案 1 :(得分:0)
然而,如果没有任何示例代码,这很难回答。
如果您尝试渲染的组件未显示在屏幕上,则可能是它没有布局。
在绘画之前,你应该确保你调整组件的大小。
componentToBePainted.setSize(componentToBePainted.getPreferredSize());
您还应该使用print
或printAll
而不是paint
。如果未附加到本地对等方,paint
可能会导致问题