从ARGB BufferedImage获取RGBA像素?

时间:2015-01-23 19:44:13

标签: java opengl lwjgl bufferedimage

是否有一种简单的方法可以从argb int[]获取rgba BufferedImage?我需要将它转换为opengl,但我不想迭代像素数组并自行转换。

2 个答案:

答案 0 :(得分:2)

OpenGL 1.2+支持GL_BGRA像素格式和反向打包像素。

表面BGRA听起来不像你想要的那样,但让我解释一下。

glTexImage2D (...)之类的调用执行所谓的像素传输,包括打包和解包图像数据。在像素传输过程中,可以执行数据转换,可以遵循特殊的对齐规则等。数据转换步骤是我们在这里特别感兴趣的;除了明显的RGBA组件顺序之外,您还可以在多种不同的布局中传输像素。

如果您将字节顺序(例如数据类型= GL_UNSIGNED_INT_8_8_8_8_REV)与GL_BGRA格式反转,您将有效地传输ARGB像素而无需任何实际操作

示例glTexImage2D (...)调用:

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

_REV打包数据类型的通常用例是处理不同处理器之间的字节序差异,但是当你想要颠倒图像中组件的顺序时它也会派上用场(因为没有这样的东西)作为GL_ARGB)。

不要为OpenGL转换内容 - 它完全有能力自行完成。

答案 1 :(得分:0)

为了在argb和rgba之间进行转换,您可以应用"逐位转换"为了以快速简洁的格式来回转换它们。

argb = rgba <<< 8

rgba = argb <<< 24

如果您有任何其他问题,this topic可能会给您一个关于rgba和argb之间转换的更深入的答案。

此外,如果您想了解有关java的按位运算符check out this link

的更多信息