Java Android中Bitmap.getPixels()的OpenGl格式是什么?

Java Android中Bitmap.getPixels()的OpenGl格式是什么?,java,android,opengl-es,Java,Android,Opengl Es,Bitmap.getPixels()返回一个整数数组,其中像素值以“压缩整数”格式返回,如Color文档中所述 这种格式是A、R、G、B 我想将此数组传递给GLES10.glTexImage2D()。我尝试将internalFormat和format指定为GL\u RGBA。但这会导致蓝色和红色通道交换 我找不到描述这种格式的Opengl等价物 除此之外,我可以使用逐位操作交换R和B通道,以符合GL_RGBA,但我更希望OpenGl能够本地识别该格式 更新: 我知道我可以将位图直接用于Tex

Bitmap.getPixels()
返回一个整数数组,其中像素值以“压缩整数”格式返回,如
Color
文档中所述

这种格式是A、R、G、B

我想将此数组传递给
GLES10.glTexImage2D()
。我尝试将
internalFormat
format
指定为
GL\u RGBA
。但这会导致蓝色和红色通道交换

我找不到描述这种格式的Opengl等价物


除此之外,我可以使用逐位操作交换R和B通道,以符合GL_RGBA,但我更希望OpenGl能够本地识别该格式


更新:
我知道我可以将位图直接用于
TexImage2D()
,但我需要调用
getPixels()
,因为我需要在将像素数据用作纹理之前对其进行操作。我可以将像素转换回位图,但正如我所说的,我更愿意直接将像素用作纹理。

您不需要检索像素,也不需要处理底层像素格式,只需将位图对象传递给实用程序即可

例如:


是的,这很有效,这是我的原始代码。但是我需要从这个位图派生出两个位图,它们正在泄漏内存(Android中有一个众所周知的bug)。因此,这个解决方案。我把它收回。。我发现位图实际上并没有泄漏内存。罪魁祸首是活动分配的两个直接缓冲区,它们在活动重新启动之间一直存在。我显式地将它们设置为null,现在一切都好了。我的最终解决方案使用int[]数据作为TexImage2D,因为这在我的情况下更为优化。很好!但是,我没有看到任何接受int[]数据的texImage2D()变量。。你什么意思?@oliverg你是对的,没有。我指的是接受缓冲区的那个。缓冲区基本上以很少的开销包装int[]。。实际上,如果您不害怕本机代码,那么您可以看看Froyo提供的jnigraphics库。它允许就地修改位图像素数据。
Bitmap bitmap = BitmapFactory.decodeResource(...);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);