android opengl 根据textureId 截图 保存图片,具体代码
时间: 2024-03-21 21:44:29 浏览: 197
以下是 Android OpenGL 根据 textureId 截图并保存图片的具体代码:
```java
public static void saveTextureToImage(int textureId, int width, int height, String filePath) {
ByteBuffer buffer = ByteBuffer.allocate(width * height * 4);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
GLES20.glPixelStorei(GLES20.GL_PACK_ALIGNMENT, 1);
GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
buffer.rewind();
bitmap.copyPixelsFromBuffer(buffer);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);
try {
FileOutputStream fos = new FileOutputStream(filePath);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
```
这段代码的原理是:先通过 `glReadPixels` 将纹理数据读取到 ByteBuffer 中,然后再将 ByteBuffer 中的数据转换成 Bitmap,最后保存为图片文件。
其中,`textureId` 是纹理 ID,`width` 和 `height` 是纹理的宽度和高度,`filePath` 是保存图片的路径。
阅读全文