openGLES使用:RGBA转ARGB

        使用openGLES的时候,可以使用readPixesl方法读取framebuffer里面的像素值,但是在android里面,bitmap四个通道的只有ARGB,而openGLES读取的图像颜色排列是RGBA,所以这里需要进行一下转换:

    

int len=width*height;RGBA->ARGB

for(int i=0;i<len/2;i++){
    int col=(height-(i/width)-1)*width+i%width;
    //这个是进行上下镜像的
    //int tem=data[i];
    //data[i]=data[col];
    //data[col]=tem;

    int a=data[i]>>24;
    int r=(data[i] >> 16) & 0xFF;
    int g=(data[i] >> 8) & 0xFF;
    int b=data[i] & 0xFF;
    data[i]=(a << 24) | (b << 16) | (g << 8) | r;

    a=data[col]>>24;
    b=(data[col] >> 16) & 0xFF;
    g=(data[col] >> 8) & 0xFF;
    r=data[col] & 0xFF;
    data[col]=(a << 24) | (r << 16) | (g << 8) | b;
}
        另外,在使用GLES20.glReadPixels的时候,有一个值需要制定接受的数组类型,这在c/c++里面好说,默认都是unsigned byte类型,但是在java里面没有这种类型,所以当时用的时候同样是将这个类型设置为unsigned byte型,但是传进去的数组类型是int,之后使用Bitmap.createBitmap(int[] colors,...)方法一样拿到纹理数据,只不过颜色通道不对,需要用上面的代码进行转换一下。

猜你喜欢

转载自blog.csdn.net/aa642531/article/details/80230121
今日推荐