首页 > 解决方案 > 将 OpenGL RGBA 字节数组转换为 android ARGB 字节数组

问题描述

我可以使用以下代码实现将 OpenGL RGBA int 数组转换为 android ARGB int 数组。

      int b[]=new int[(int) (w*h)];
        int bt[]=new int[(int) (w*h)];
        IntBuffer buffer=IntBuffer.wrap(b);
        buffer.position(0);
        GLES20.glReadPixels(0, 0, w, h,GLES20.GL_RGBA,GLES20.GL_UNSIGNED_BYTE, buffer);
        for(int i=0; i<h; i++)
        {
            //remember, that OpenGL bitmap is incompatible with Android bitmap
            //and so, some correction need.
            for(int j=0; j<w; j++)
            {
                int pix=b[i*w+j];
                int pb=(pix>>16)&0xff;
                int pr=(pix<<16)&0x00ff0000;
                int pix1=(pix&0xff00ff00) | pr | pb;
                bt[(h-i-1)*w+j]=pix1;
            }
        } 

通过我可以使用convert int array to byte array来实现我的目标,但是效率有点低,所以我想用下面的代码来实现同样的目标:

final ByteBuffer rgbaData = ByteBuffer.allocateDirect(WIDTH * HEIGHT * 4);
GLES20.glReadPixels(0, 0, WIDTH, HEIGHT, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, rgbaData),

标签: androidopengl-es

解决方案


推荐阅读