Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从ARGB buffereImage获取RGBA像素?_Java_Opengl_Lwjgl_Bufferedimage - Fatal编程技术网

Java 从ARGB buffereImage获取RGBA像素?

Java 从ARGB buffereImage获取RGBA像素?,java,opengl,lwjgl,bufferedimage,Java,Opengl,Lwjgl,Bufferedimage,有没有一种简单的方法可以从argbbuffereImage获取rgbaint[]?我需要为opengl转换它,但我不想迭代像素阵列并自己进行转换。为了在argb和rgba之间转换,您可以应用“逐位移位”,以便以快速简洁的格式来回转换它们 argb = rgba <<< 8 rgba = argb <<< 24 argb=rgba OpenGL 1.2+支持像素格式和反向压缩像素。 表面上看,BGRA听起来不像你想要的,但让我解释一下 像glTexImage

有没有一种简单的方法可以从argb
buffereImage
获取rgba
int[]
?我需要为opengl转换它,但我不想迭代像素阵列并自己进行转换。

为了在argb和rgba之间转换,您可以应用“逐位移位”,以便以快速简洁的格式来回转换它们

argb = rgba <<< 8

rgba = argb <<< 24
argb=rgba OpenGL 1.2+支持像素格式和反向压缩像素。
表面上看,
BGRA
听起来不像你想要的,但让我解释一下

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

如果使用
GL\u BGRA
格式反转字节顺序(例如,数据类型=
GL\u UNSIGNED\u INT\u 8\u 8\u 8\u REV
),则可以有效地传输ARGB像素,而无需您付出任何实际努力

示例
glTexImage2D(…)
调用: 压缩数据类型的常用用例是处理不同处理器之间的endian差异,但当您想要反转映像中组件的顺序时,它也很方便(因为没有像
GL\u ARGB
这样的东西)


不要为OpenGL转换东西-它本身完全可以做到这一点。

“我不想迭代像素阵列并自己进行转换。”我的错误,我想我错过了。你为什么要转换数据呢?R、 在这一点上,G,B,A只是第一,第二个的任意标签。第三和第四通道-访问纹理时,可以根据需要旋转数据,无需额外成本。事实上,在许多GPU/CPU组合上,
GL_BGRA
+
GL_UNSIGNED_INT_8_8_8_8_REV
是可用的最高性能像素传输(“快速路径”)因为这是GPU希望数据开始的顺序,以这种方式传递数据意味着驱动程序不必进行任何转换;)
glTexImage2D (..., GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image);