Java:将基于另一个图形对象的新图形对象导出为PNG
我一直在尝试导出图形对象的图像 这是该方法的外观:Java:将基于另一个图形对象的新图形对象导出为PNG,java,swing,graphics,save,bufferedimage,Java,Swing,Graphics,Save,Bufferedimage,我一直在尝试导出图形对象的图像 这是该方法的外观: private BufferedImage paintImage; public void paint(Graphics g){ super.paint(g); paintImage = new BufferedImage(500, 600, BufferedImage.TYPE_INT_ARGB); Graphics2D statsExGraphics = paintImage.createGraphics
private BufferedImage paintImage;
public void paint(Graphics g){
super.paint(g);
paintImage = new BufferedImage(500, 600, BufferedImage.TYPE_INT_ARGB);
Graphics2D statsExGraphics = paintImage.createGraphics();
imageText.paint(statsExGraphics);
try{
ImageIO.write(paintImage, "PNG", new File("src/statsexport2.png"));
}catch(IOException e){
e.printStackTrace();
}
map.paint(g);
imageText.paint(g);
switch (backgroundState) {
case 1:
grid.paintItems(g);
penguin.paint(g);
purpleBear.paint(g);
blueBear.paint(g);
break;
case 2:
EndgameGraphics done = new EndgameGraphics(endCondition);
done.run();
break;
default: System.out.println("Error invalid background");
}
}
我会将g对象强制转换到Graphics2D对象上,但是BuffereImage对象不会连接到图形
我需要全部导出对象,以便在游戏结束时将其重新显示到面板上。done(EndgameGraphics对象)是生成一个新JFrame的代码,其中包含一个背景图像和一个按钮,我需要将imageText图形对象重新插入到这个新JFrame中。在EndgameGraphics中,我处理了包含上述方法中最初绘制的所有内容的JFrame,并实例化了一个新的JFrame
我在想这句话
imageText.paint(statsExGraphics);
不是一个执行了我要寻找的逻辑的语句,我不确定从这里走到哪里
当前代码正在生成一个空白图像。是否有Graphics2D的方法可以接受Graphics的参数并将其绘制到Graphics2D对象上
也许有另一种方法可以复制这个图形对象,并在EndgameGraphics中重新创建它,以添加到新的JFrame中
非常感谢您的帮助。我假设
imageText
是某种组件,如果是这样,您应该使用print
或printAll
notpaint
-另外,永远不要引用src
,一旦导出应用程序,它就不存在了,不要在paint方法中执行IO,这将严重降低应用程序的性能基于我掌握的有限信息,我建议您不要使用paint
(您应该使用paintComponent
,但我暂时不谈这一点)在游戏循环的更新阶段,将状态绘制为BufferedImage
,在绘制方法中使用此选项,而不是如何将状态绘制到BuffereImage?我的印象是“imageText.paint(statsExGraphics);”正在这样做?好吧,基本上,您不需要使用paint
,而是在主循环中创建一个BuffereImage
并使用它的Graphics
上下文来渲染当前状态,然后在paint
方法中绘制此图像。这意味着您已经拥有了想要使用的映像—这是一个双缓冲的原始示例