我需要一些帮助来读取由android的opengl-es api中的glReadPixels功能吐出的缓冲区。到目前为止,这是我的代码...
public static void pick(GL11 gl){
int[] viewport = new int[4];
IntBuffer pixel = IntBuffer.allocate(384000);
mColourR = BaseObject.getColourR();
mColourG = BaseObject.getColourG();
mColourB = BaseObject.getColourB();
x = MGLSurfaceView.X();
y = MGLSurfaceView.Y();
gl.glGetIntegerv(GL11.GL_VIEWPORT,viewport,0);
gl.glReadPixels((int)x,viewport[3]-(int)y, 1, 1, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, pixel);
}
此代码中输出缓冲区的名称是“ pixel”,我需要添加到此代码中才能从“ pixel”缓冲区中获取颜色值。
最佳答案
您可以使用IntBuffer
的get() methods之一来访问各个值。
RGB颜色值通常以这种顺序存储,因此调用pixel.get(0)
将使您获得第一个像素的红色值,pixel.get(1)
将使您获得绿色通道,依此类推。通常,这些值按行存储。
因此,如果您需要特定像素的值(x,y),则必须调用get(screenWidth*3*y + x)
顺便说一句,您可以通过调用IntBuffer
从pixels.array()
检索原始int数组。
关于java - 用Java读取缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7891525/