Android glReadPixels字节到浮点

Android glReadPixels字节到浮点,android,opengl-es,colors,glreadpixels,Android,Opengl Es,Colors,Glreadpixels,我正在尝试用glReadPixels在OpenGL ES中检索颜色。我使用float[]设置对象的颜色,例如{0.0f、0.5f、0.2f、1.0f} 既然glReadPixels值是无符号字节,如何将其转换为相同的浮点值[] 设置颜色: gl.glColor4f(color[0], color[1], color[2], color[3]); ByteBuffer buf = ByteBuffer.allocate(4); buf.order(ByteOrder.nativeOrder())

我正在尝试用glReadPixels在OpenGL ES中检索颜色。我使用float[]设置对象的颜色,例如{0.0f、0.5f、0.2f、1.0f} 既然glReadPixels值是无符号字节,如何将其转换为相同的浮点值[]

设置颜色:

gl.glColor4f(color[0], color[1], color[2], color[3]);
ByteBuffer buf = ByteBuffer.allocate(4);
buf.order(ByteOrder.nativeOrder());

gl.glReadPixels((int) mx, height - (int) my, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, buf);
byte result[] = buff.array();
获取颜色:

gl.glColor4f(color[0], color[1], color[2], color[3]);
ByteBuffer buf = ByteBuffer.allocate(4);
buf.order(ByteOrder.nativeOrder());

gl.glReadPixels((int) mx, height - (int) my, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, buf);
byte result[] = buff.array();

我不知道这是否已经被询问/回答过,但我只是还没有找到解决方案,我已经尝试了很长一段时间。

使用
ByteBuffer.asFloatBuffer()
将其从字节转换为浮点。

之所以得到
字节/255.f=-0.0039
是因为从bytebuffer得到的字节是java中的有符号值

OpenGL返回无符号值
255=0xFF
,java将其解释为有符号,其中
0xFF=-1


将得到的字节(结果[0])转换为int
int resultInt=((int)result[0])&0xFF,然后将其除以255。您应该得到一个接近1的值。

将每个颜色值存储在一个浮点中,然后将其除以255.0,就得到了它。请注意,将存在舍入误差。例如,您的
.5
现在可能更像
.498
。@DavidSchwartz如果我将颜色设置为{1,0,0),并将结果[0]除以,则效果会更好到255.0,我得到-0。003921569@DavidSchwartz:它有点复杂,请参见此处:@datenwolf我不知道该如何使用该信息。我尝试用Java实现该代码段,但不太有效。有没有更简单的方法?没有,这不太有效,或者我不知道如何处理它。我无法使用FloatBuff如果我使用FloatBuffer.get(),它会返回一个类似-1.7014636E38的值。我不知道这有什么帮助。尝试过,但现在它只返回零。这很奇怪。我不久前也遇到过同样的问题,这似乎解决了它。对不起,谢谢!这正是我想要的!