我试图在这个页面上使用Android GPUImage https://github.com/CyberAgent/android-gpuimage对视频做一些实时的过滤工作,我使用glReadPixels()来获取GPU处理过的数据并添加了过滤器,然后我使用返回的数据创建了一个位图,最后将其压缩为jpeg图片.这个过程运行正常,但jpeg与预览不一样,它只是显示预览的底部,但它的大小是正确的,我已经搜索了很长时间但仍然没有线索,所以可以你们给我一些建议,任何建议将不胜感激.
我使用glReadPixels的代码是这样的:
public static Bitmap SavePixels(int x, int y, int w, int h){ int b[]=new int[w*(y+h)]; int bt[]=new int[w*h]; IntBuffer ib = IntBuffer.wrap(b); ib.position(0); GLES20.glReadPixels(0, 0, w, h, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, ib); for(int i=0, k=0; i>16)&0xff; int pr=(pix<<16)&0x00ff0000; int pix1=(pix&0xff00ff00) | pr | pb; bt[(h-k-1)*w+j]=pix1; } } Bitmap sb=Bitmap.createBitmap(bt, w, h, Bitmap.Config.ARGB_8888); return sb; }
我在onDraw函数中的GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP,0,4)之后调用了这个函数.