为了账号安全,请及时绑定邮箱和手机立即绑定

画布到图像绘制不成功

画布到图像绘制不成功

函数式编程 2021-05-31 17:31:33
第一个代码片段是我的主要渲染方法。我正在创建缓冲区策略,然后 getState().render(g) 传递 Graphics 对象并调用一堆 g.drawImage() 方法,毕竟,调用 saveImage() 并生成完全黑色的图像(游戏截图)预期的)。第二个片段是将画布保存到图像。private void render() {    bs = display.getCanvas().getBufferStrategy();    if (bs == null) {        display.getCanvas().createBufferStrategy(3);        return;    }    g = bs.getDrawGraphics();    g.clearRect(0, 0, width, height);    if (State.getState() != null)        State.getState().render(g); // this just calls g.drawImage many times    saveImage(g);    bs.show();    g.dispose();}这是我保存它的方式:private void saveImage(Graphics g) {    BufferedImage image = new  BufferedImage(getCanvas().getWidth(), getCanvas().getHeight(), BufferedImage.TYPE_INT_RGB);    Graphics2D graphics = image.createGraphics();    display.getCanvas().paint(graphics);    graphics.dispose();    try {        FileOutputStream out = new FileOutputStream("snapshot.png");        ImageIO.write(image, "png", out);        out.close();    } catch (FileNotFoundException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您无法对对象使用普通操作来截取屏幕截图Graphics¹。

如果您的系统支持它,您可以使用 AWTRobot类,即它的方法createScreenCapture来创建屏幕截图。

对于不支持读回屏幕数据的系统,最好的选择是设计应用程序,以便Graphics在屏幕缓冲区中渲染和在离屏图像中渲染时可以在两种上下文中使用相同的渲染例程(在 上操作)被拯救。这可能无法始终重现准确的图像,但这是您在此类系统上可以获得的最佳图像。


¹ 可以通过一些技巧,例如实现自定义Composite,记录传入数据,但实现起来比使用Robot和经历相同的限制要复杂得多,即它仍然不能在所有平台上工作。


查看完整回答
反对 回复 2021-06-02
  • 1 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信