2013-04-05 44 views
2

我想以最有效的方式截取屏幕截图。我使用FrameBuffer是截取屏幕最有效的方式,因为我可以在不同于渲染线程的线程中处理数据。 我如何从FrameBuffer获取信息并将其传输到文件?FrameBuffer到libgdx或OpenGL里面的文件

FrameBuffer m_fbo; 

render(){ 
    m_fbo = new FrameBuffer(Format.RGB565, (int)(w * m_fboScaler), (int)(h * m_fboScaler), false); 
    m_fboRegion = new TextureRegion(m_fbo.getColorBufferTexture()); 
    m_fboRegion.flip(false, true); 
    m_fbo.begin(); 
    ...rendering... 
    m_fbo.end(); 
    writeTextureRegionToFile(); - i need some lines of code for the implementation of this method 
} 

回答

2

FrameBuffer内容驻留在内存中的OpenGL的管理,所以你会(据我了解的东西),仍然需要使用渲染线程OpenGL的API来获取这些字节。具体而言,您需要the ScreenUtils class 以获得byte[],其中包含您的FrameBufferRGBA8888内容。

一旦获得原始字节,当然可以在不同的线程上执行任何压缩/转换/输出。有一个forum post有一个快速和肮脏的PNG作家。 Libgdx特定的(?)CIM格式也是一个选项(请参阅PixmapIO class),但您必须先将字节转换为Pixmap

+0

“仍然需要在渲染线程上使用OpenGL API获取这些字节” - 通过这样做,fps将降低到6.如果这可以在单独的线程中完成将是有用的。 – Lunatikul 2013-06-26 13:09:23

+0

Libgdx(和下面的LWJGL)只允许一个线程执行OpenGL调用,所以没有太多希望从渲染线程中获得它。 – 2013-06-26 16:27:36