OpenGL ES를 사용하여 이미지를 적절히 편집한 후 편집된 이미지 데이터를 glReadPixels() 메서드로 긁어와서 저장하도록 다음 코드를 만들었습니다.
ByteBuffer bb = ByteBuffer.allocate(mWidth * mHeight * 4);
mGL.glReadPixels(0, 0, mWidth, mHeight, GL_RGBA, GL_UNSIGNED_BYTE, bb);
보시다시피 RGBA 포맷이구요. bb로 얻은 정보를 jpeg으로 compress 후 파일로 저장하니 이미지가 문제 없이 아주 잘 작동합니다. 처리 시간과 사용되는 메모리를 줄이기 위해 쓸데없는 alpha 채널을 버리기로 하여, 다음과 같이 RGB 포맷으로 코드를 바꾸었습니다.
ByteBuffer bb = ByteBuffer.allocate(mWidth * mHeight * 3);
mGL.glReadPixels(0, 0, mWidth, mHeight, GL_RGB, GL_UNSIGNED_BYTE, bb);
그러고나니 bb 버퍼로 긁어오는 값이 모두 0으로 전체가 검은색인 이미지만 저장됩니다. mGL(GL10 인스턴스)에 대한 EGLConfig 설정에서 알파채널을 빼기도 해봤고, 이미지를 텍스쳐에 붙히는 GLUtils.texImage2D() 메서드 호출 과정에서 internalFormat 인수를 GL_RGB로 변경해서 호출도 해봤습니다. 결과는 마찬가지더라구요. 어디가 잘못된 것인지 도무지 모르겠는데, 혹시 짐작가는 부분이 있으신 분이 계시다면 답변 좀 부탁드려요.