1

我是新手libgdx,并且正在尝试将来自工作游戏引擎的约 100 个对象的(缩略图大小)图像渲染到Image可以在应用程序中显示的Java 中Swing

我可以在LwjglCanvas 中很好地在屏幕上渲染它们,然后我可以使用ScreenUtils.getFrameBufferPixels()(尝试将 a 传递BufferedImagegetGraphics()方法LwjglCanvas.paint(graphics)中导致没有任何内容被渲染到 中)抓取它们的像素graphics,然后将它们放入BufferedImage. 但是,这需要一个现有的、显示的LwjglCanvas; 我根本无法弄清楚如何在不呈现在屏幕上的情况下进行背景线程缩略图。

附加当前代码片段(需要在画布中显示图像;在通过Runnable发布到此画布中执行canvas.postRunnable())。

// canvas is an LwjglAWTCanvas
int w = canvas.getGraphics().getWidth();
int h = canvas.getGraphics().getHeight();
BufferedImage bi = new BufferedImage(w, h,
        BufferedImage.TYPE_INT_ARGB);
WritableRaster wr = bi.getRaster();
byte[] bytes = ScreenUtils.getFrameBufferPixels(0, 0, w, h, false);
int[] pixel = new int[4];
for (int y = h-1, b = 0; y >=0 h; y--) {
    for (int x = 0; x < w; x++) {
        pixel[0] = bytes[b++];
        pixel[1] = bytes[b++];
        pixel[2] = bytes[b++];
        pixel[3] = bytes[b++];
        wr.setPixel(x, y, pixel);
    }
}
image = bi; // image is the rendered output image
4

1 回答 1

2

我想你想要一个FrameBuffer对象。这些在 OpenGL ES 2.0 及更高版本中受支持,并允许您将 OpenGL 绘制命令运行到屏幕外缓冲区中。

如果 FBO 是“当前的”,我认为getFrameBufferPixels可以与 FBO 合作,但我被告知不是。(似乎这些原语适用于 OpenGL,所以我不确定 libGDX 或 OpenGL ES 中是否缺少某些内容。请参阅FBO 渲染到纹理和 glReadPixels)。

于 2012-11-25T15:55:39.777 回答