При использовании GLES20.glReadPixels на android данные, возвращаемые им, не совсем совпадают с живым превью

Я пытаюсь использовать Android GPUImage на этой странице https://github.com/CyberAgent/android-gpuimage, чтобы выполнить некоторую фильтрацию в реальном времени на видео, и я использую glReadPixels () для получения данных, которые были обработаны графическим процессором И фильтр был добавлен, тогда я создал растровое изображение, используя возвращаемые данные и, наконец, сжимаю его на 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<h; i++, k++) {//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[(hk-1)*w+j]=pix1; } } Bitmap sb=Bitmap.createBitmap(bt, w, h, Bitmap.Config.ARGB_8888); return sb; } 

Я вызвал эту функцию сразу после GLES20.glDrawArrays (GLES20.GL_TRIANGLE_STRIP, 0, 4), которая находится в функции onDraw.

Эта проблема была решена, так как glReadPixels считывает буфер, который связан с поверхностьюView, который отображается на экране предварительного просмотра, и размер этого поверхностного экрана больше, чем параметры ширины и высоты, которые я установил в glReadPixels, поэтому он просто отображается Часть предварительного просмотра (начинается с левого нижнего угла предварительного просмотра).