3

我想使用 Irrlicht 和 OpenGL ES 1.0 驱动程序来捕获屏幕。

这是我用 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);

但是 MileStone 返回 RGBA 颜色。

我有疑问,为什么红色和蓝色是出乎意料的?正确的理由是什么?

4

2 回答 2

0

GL_BGRAOpenGL ES不支持。由于您隐含地假设支持某些扩展,它可能适用于其他设备。

在这种情况下,我希望 OpenGL 设置一个GL_INVALID_ENUM错误代码。你检查了吗?

编辑:等一下,我没有正确阅读你的问题。所以 MileStone 正在交换 和 的GL_RGBA结果GL_BGRA?无论扩展如何,这都很奇怪。

于 2013-02-17T09:13:11.197 回答
0

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

从文档位图

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

于 2018-12-05T01:55:58.437 回答