我通过 USB 获取 10 位像素(灰度)并将它们存储在字节数组中。例如,第一个字节 (imgData[0]) 包含第一个像素的前 8 位。第二个字节 (imgData[1]) 包含第一个像素的最后 2 位和第二个像素的前 6 位,依此类推...
为了得到一个数组,其中每个索引代表 1 个像素,我将字节数组中的所有位存储到 BitSet 中,并将 BitSet 中的所有位存储到 Integer 数组中
我之前只通过创建一个 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、像素打包/解包等的内容,但我不知道这是否真的能够满足我的需要以及如何使用它。