我需要一些帮助来读取由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”缓冲区中获取颜色值。

最佳答案

您可以使用IntBufferget() methods之一来访问各个值。

RGB颜色值通常以这种顺序存储,因此调用pixel.get(0)将使您获得第一个像素的红色值,pixel.get(1)将使您获得绿色通道,依此类推。通常,这些值按行存储。

因此,如果您需要特定像素的值(x,y),则必须调用get(screenWidth*3*y + x)

顺便说一句,您可以通过调用IntBufferpixels.array()检索原始int数组。

关于java - 用Java读取缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7891525/

10-14 07:22