繁体   English   中英

如何将 QImage 格式转换为 OpenGL 支持的格式

[英]How to convert QImage format to format supported by OpenGL

我正在使用QImage加载图像,然后将其用作 OpenGL 中的纹理。 问题是颜色分量在QImage和 OpenGL 中有不同的顺序。 目前我在 OpenGL 中使用GL_RGBA格式,在 Qt 中使用QImage::Format_ARGB32格式。 因此,在 OpenGL 中创建纹理之前,我必须手动交换加载图像的每个像素的字节。 此外,要正确交换字节,我需要知道机器的字节序。

有谁知道更好的解决方案? 至少,有没有办法使这种转换与字节顺序无关?

谢谢。

glTex(Sub)Image的最后三个参数定义了如何将像素传输到 OpenGL 如果您按 ARGB 顺序依次有 4 个 8 位值,那么我建议如下:

glTexImage2D(..., GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, *);

要处理字节序转换问题,请使用glPixelStore参数。 具体来说, GL_UNPACK_SWAP_BYTES 以上是为小端机器设计的,所以如果你在大端机器上,你应该调用glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); 在调用此 function 之前,然后将其设置回GL_FALSE


注意:我知道你没有提到它,但如果你正在考虑移动平台,请记住 OpenGL ES不是OpenGL。 桌面 OpenGL 要求实现能够处理传输操作中的各种像素排列。 GL ES 的要求几乎相反。 像素传输格式必须与纹理的内部格式完全匹配。 因此,如果您在进行 GL ES 开发,则必须自己进行字节交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM