Java / OpenGL:获取 Canvas 的图像作为 BufferedImage
我有一些代码可以初始化 OpenGL 以渲染到 java.awt.Canvas。 问题是,我不知道如何获取画布的缓冲区并将其转换为 BufferedImage。
我尝试过重写 getGraphics()、克隆 Raster 并用自定义的 CanvasPeer 替换 CanvasPeer。
我猜OpenGL不以任何方式使用java图形,那么我怎样才能获取OpenGL的缓冲区并将其转换为BufferedImage?
我正在使用 LWJGL 的代码来设置父级:
Display.setParent(display_parent);
Display.create();
I've got some code that initializes OpenGL to render to a java.awt.Canvas.
The problem is, I can't figure out how I can get the buffer of the canvas and turn it into a BufferedImage.
I've tried overriding getGraphics(), cloning the Raster, and replacing the CanvasPeer with a custom one.
I'm guessing OpenGL doesn't use java graphics in any way then, so how can I get OpenGL's buffer and convert it into a BufferedImage?
I am using LWJGL's code for setting parent:
Display.setParent(display_parent);
Display.create();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要从 OpenGL 缓冲区复制数据。我正在使用这种方法:
您需要根据您的 OpenGL 包装器使用类似的方法。这是 JOGL 示例。
这里是 LWJGL 包装器:
编辑
这也可能有用(它不完全是我的,也应该调整):
You need to copy data from OpenGL buffer. I was using this method:
You need to use something similar according to your OpenGL wrapper. This is JOGL example.
And here for LWJGL wrapper:
EDIT
This may be useful also (it's not fully mine, should be tuned too):
我认为这对于您的情况来说是不可能的,原因如下:
LWJGL 不会直接绘制到画布上(至少在 Windows 中不会)。画布仅用于获取窗口句柄以作为父窗口提供给 OpenGL。因此,画布永远不会被直接绘制。要捕获内容,您可能必须求助于屏幕捕获。
I don't think this is possible for your situation, and here's why:
LWJGL doesn't draw directly to the canvas (at least not in Windows). The canvas is only used to obtain a window handle to provide as the parent window to OpenGL. As such, the canvas is never directly drawn to. To capture the contents, you'll probably have to resort to a screen capture.