使用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,...)方法一样拿到纹理数据,只不过颜色通道不对,需要用上面的代码进行转换一下。