Android 为什么glReadPixels返回意外的颜色格式值?

Android 为什么glReadPixels返回意外的颜色格式值?,android,opengl-es,irrlicht,Android,Opengl Es,Irrlicht,我想用带有OpenGLES1.0驱动程序的Irrlicht捕捉屏幕 这是我用c写的代码++ glReadPixels(0, 0, 200, 200, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 大多数安卓设备工作正常。但Android 2.2.3版的MileStone得到了意想不到的结果。我想要RGBA颜色格式,而MileStone返回BGRA颜色 最后,我更改了代码 glReadPixels(0, 0, 200, 200, GL_BGRA, GL_UNSIGNED

我想用带有OpenGLES1.0驱动程序的Irrlicht捕捉屏幕

这是我用c写的代码++

glReadPixels(0, 0, 200, 200, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
大多数安卓设备工作正常。但Android 2.2.3版的MileStone得到了意想不到的结果。我想要RGBA颜色格式,而MileStone返回BGRA颜色

最后,我更改了代码

glReadPixels(0, 0, 200, 200, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
但里程碑返回RGBA颜色

我有一个问题,为什么红色和蓝色是出乎意料的? 正确的原因是什么?

GL\u BGRA
在OpenGL ES上。可能是因为您隐式地假定支持某个扩展,所以它可以在其他设备上工作

在这种情况下,我希望OpenGL设置
GL\u INVALID\u ENUM
错误代码。你查过了吗


等一下,我没看错你的问题。因此,里程碑正在交换
GL_RGBA
GL_BGRA
的结果?不管扩展名是什么,这都很奇怪。

如果您要做的是创建位图。 只需使用bmp.copyPixelsFromBuffer(…)而不是bmp.setPixels(…)

从文件中:

缓冲区中的数据不会以任何方式更改(与setPixels()不同,setPixels()会从未乘法的32位转换为位图的原始格式。源缓冲区中的像素假定位于位图的颜色空间中


MileStone正确显示屏幕上的所有内容。但是,当我调用glReadPixels()时,蓝色和红色是交换的。