【问题标题】:Why glReadPixels return unexpected color format value?为什么 glReadPixels 返回意外的颜色格式值?
【发布时间】:2013-02-17 08:43:42
【问题描述】:

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

这是我用 C++ 编写的代码

glReadPixels(0, 0, 200, 200, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

大多数 Android 设备运行良好。但是 Android 2.2.3 的 MileStone 得到了意想不到的结果。我想要 RGBA 颜色格式,而 MileStone 返回 BGRA 颜色。

最后,我改变了我的代码

glReadPixels(0, 0, 200, 200, GL_BGRA, GL_UNSIGNED_BYTE, pixels);

但 MileStone 返回 RGBA 颜色。

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

【问题讨论】:

    标签: android opengl-es irrlicht


    【解决方案1】:

    GL_BGRA 在 OpenGL ES 上是 not supported。由于您隐含地假设支持某些扩展,它可能适用于其他设备。

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

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

    【讨论】:

    • MileStone 正确显示屏幕上的所有内容。但是当我调用 glReadPixels() 时,蓝色和红色被交换了。
    【解决方案2】:

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

    来自文档Bitmap

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      相关资源
      最近更新 更多