마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

OpenGL ES로 glReadPixels() 호출 시 24bit 컬러정보 얻어오기

0 추천

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로 변경해서 호출도 해봤습니다. 결과는 마찬가지더라구요. 어디가 잘못된 것인지 도무지 모르겠는데, 혹시 짐작가는 부분이 있으신 분이 계시다면 답변 좀 부탁드려요.

THK (2,360 포인트) 님이 2017년 4월 18일 질문
코드 문제라기 보다는 테스트하신  폰에서 해당 포멧으로 가져오는 것을 지원 못하는 듯 합니다.
아... 정확한 지적이셨습니다. 위와 같은 증상이 갤럭시 s3에서 발생했는데, LG G-pad 에서는 제대로 동작하더군요. 어쩔수 없이 24bit로 받아오는 것은 포기해야겠네요.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...