Android 使用PixelBuffer或FBO进行屏幕外渲染,使用OpenGL ES 2.0将所有图形保存到所需大小(>;4096)的位图(然后保存到bmp/jpg)
我需要有能力将我的所有图形(我基本上使用GLSURFACHEVIEW类中的代码渲染)保存到图片文件(JPG/BMP) 我选择了包含以下步骤的方法:Android 使用PixelBuffer或FBO进行屏幕外渲染,使用OpenGL ES 2.0将所有图形保存到所需大小(>;4096)的位图(然后保存到bmp/jpg),android,opengl-es-2.0,Android,Opengl Es 2.0,我需要有能力将我的所有图形(我基本上使用GLSURFACHEVIEW类中的代码渲染)保存到图片文件(JPG/BMP) 我选择了包含以下步骤的方法: 以所需的宽度/高度将渲染从窗口表面切换到像素缓冲区表面-在我的情况下,此w/h应等于照片(我的应用程序类似于照片编辑器) 使用glReadPixels从当前曲面读取像素 将这些像素保存到位图,然后保存到JPG/BMP 但这种方法有一个问题,因为创建像素缓冲区有一个限制,即缓冲区的大小不能大于EGL常量:EGL_MAX_PBUFFER_HEIGHT
- 以所需的宽度/高度将渲染从窗口表面切换到像素缓冲区表面-在我的情况下,此w/h应等于照片(我的应用程序类似于照片编辑器)
- 使用glReadPixels从当前曲面读取像素
- 将这些像素保存到位图,然后保存到JPG/BMP
- 在调查过程中,我发现PBuffer方法肯定是不好的,因为它不能在所有设备上工作,它与nvidia tegra有问题,而且速度很慢
- 似乎连FBO方法(我不确定,我现在正在调查)也有类似的限制——据我所知,在FBO方法的情况下,我需要创建renderbuffer,但它的大小也不能大于GL_MAX_renderbuffer_大小,在测试过的android设备上是4096李>
- 看起来我需要使用几个缓冲区,也许我可以尝试使用MappedByteBuffer来合并它们并压缩到jpg