glReadPixels()在Android中重建帧的问题

时间:2011-03-15 19:28:26

标签: android glreadpixels

我正在开发一个关于Android增强现实的项目。代码捕获摄像机视频,找到标记并在其上显示一个立方体。在此之后,找到运动矢量(以在x和y方向上移动的像素的形式)。我需要做的是从GL图层中读取像素,并在将它们移动运动矢量指定的距离后再次绘制它们。 GL层使用GLSurfaceView类指定,GLSurfaceView类是透明层。我面临的问题是当我使用glReadPixels()读取像素并将其转换为480x800阵列(nexus one screen resolution)时,我得到了3个不同的立方体部分而不是一个。 我打算在此之后通过运动矢量移动像素,并使用glDrawPixels()将像素放回帧缓冲区 请帮我解释一下。使用glReadPixels时是否有一些我遗漏的东西,如果有其他功能可以帮助我实现同样的目标。我在考虑使用glBlitFrameBuffer()但是android GL10类不支持这个。 我已经附加了我正在读取像素的部分代码,并将它们与使用MatLab重建的像素图像一起更改为2D矩阵。 对不起,我不允许发布图片。看到图像后有人可以帮助我,请在这里发帖,我可以把图片邮寄给你。非常感谢!!!

非常感谢任何帮助。

gl.glPixelStorei(GL10.GL_PACK_ALIGNMENT, 1);
        IntBuffer pixels = IntBuffer.allocate(384000);

        gl.glReadPixels(0, 0, 800, 480, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE ,pixels);

            File f = new File ("./mnt/sdcard/Sahiba_PixelData_" + flag + ".txt");

                if(!f.exists())
                    f.createNewFile();
                FileWriter fw = new FileWriter(f);

                int pixelsArr [][] = new int [480][800];
                //int temp[] = pixels.array();
                int n=0;
                for(int i=0; i<480; i++){
                    for(int j=0; j<800; j++){
                        pixelsArr[i][j] = pixels.get(n);
                            //temp[n + pixels.arrayOffset()];
                        fw.write(pixelsArr[i][j] + " ");
                        //fw.write(pixels.get(n) + " ");
                        n++;
                    }
                    //fw.write("\n");
                }

        Log.i("GLLayer", "Pixels reading and storing finished !!!");
        }catch(Exception e){
            Log.i("GLLayer","Exception = " +e);
        }

1 个答案:

答案 0 :(得分:0)

首先,您不要使用硬编码值,因为系统允许更改实际大小,因此可能会导致异常。尝试使用视口尺寸:

int[] viewportDim=new int[4];
glGetIntegerv(GL10.GL_VIEWPORT,viewportDim);

viewportDim [2]是宽度,viewportDim [3]是高度。

gl.glPixelStorei(GL10.GL_PACK_ALIGNMENT,1);

我不确定这是否正确但我认为RGBA应为4。

您将图像设为800 * 480,然后将其保存为480 * 800?我认为这也应该是800 * 480。