gpt4 book ai didi

JAVA/Jogl/OpenGL 显示存储在字节数组中的 10 位图像数据

转载 作者:行者123 更新时间:2023-11-30 04:18:18 26 4
gpt4 key购买 nike

我通过 USB 获取 10 位像素(灰度)并将它们存储在字节数组中。例如,第一个字节 (imgData[0]) 包含第一个像素的前 8 位。第二个字节(imgData[1])包含第一个像素的最后 2 位和第二个像素的前 6 位,依此类推...

为了获得每个索引代表 1 个像素的数组,我将字节数组中的所有位存储到 BitSet 中,并将 BitSet 中的所有位存储到整数数组中

我之前只通过创建 byteBuffer 将 8 位图像显示为纹理:

private static ByteBuffer buffer;

包裹起来

buffer = ByteBuffer.wrap(imgData);

并使用

gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, 1, 1280, 1024, 0,
GL2.GL_LUMINANCE, GL2.GL_UNSIGNED_BYTE, buffer);

如果我现在需要使用 10 位数据,我可能需要使用 IntBuffer 并且可以使用 32 位。但我只需要 10 位。如何缩放/告诉 OpenGL,值 1023 表示白色,值 0 表示黑色?

或者:

有没有办法可以直接将 ImgData 作为 ByteArray 输入,并且 OpenGL 执行一些魔法并从存储在 ByteArray 中的每 10 位创建 1 个像素?我读过一些关于 glPixelStore、像素打包/解包等的内容,但我不知道这是否真的能够满足我的需要以及如何使用它。

最佳答案

你不知道。

OpenGL 的 pixel transfer system无法处理非字节对齐的像素数据。你不能有一个 10 位像素的数组;每个像素必须从字节边界开始。

此外,OpenGL也无法存储此类像素数据;没有 GL_LUMINANCE10GL_R10 image format 。您可以将其存储为 GL_RGB10_A2 格式,但这仍然是一个问题,因为

您能做的最好的事情就是预处理 10 位像素数组,将每个像素转换为 32 位 RGB10_A2 格式(复制 10 位,并将 Alpha 设置为完整)。然后,您可以使用像素传输格式 GL_RGBA 和像素传输类型 GL_UNSIGNED_INT_10_10_10_2 进行上传(或者出于性能原因,可能使用 GL_UNSIGNED_INT_2_10_10_10_REV)。并且不要忘记无符号整数的字节序问题。

关于JAVA/Jogl/OpenGL 显示存储在字节数组中的 10 位图像数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com