2013-08-29 3 views
2

OpenGL ES 2.0 쉐이더를 통해 카메라 미리보기에 몇 가지 효과를 적용했습니다. 다음으로이 효과 그림을 저장하고 싶습니다. (회색 음영, 음수 ...)Android에서 카메라로 캡처 한 그림 (적용된 glsl 효과)을 저장하는 방법은 무엇입니까?

onDrawFrame()에서 glReadPixels()을 호출하고 OpenGL 프레임 버퍼에서 읽은 픽셀을 기반으로 비트 맵을 만든 다음 저장합니다. 장치 저장 장치.

그러나이 방법으로 카메라 효과 미리보기를 "스냅 샷"합니다. 즉, 저장된 이미지 해상도 (예 : 800 * 480)는 Camera.PictureCallback (예 : 1920 * 1080)에서 촬영 한 이미지와 다릅니다.

미리보기 크기는 setPreviewSize()로 변경할 수 있지만 그림 크기와 최종적으로 같을 수는 없습니다.

그래서 glsl 셰이더를 사용하여 Camera.PictureCallback에서 가져온 이미지를 직접 프로세스에 게시 할 수 있습니까? 아니면 같은 목표를 달성하는 또 다른 방법이 있습니까?

모든 의견을 크게 기뻐할 것입니다. 감사합니다. .

+0

800 × 480은 카메라 미리보기 크기가 아니지만 화면 버퍼 크기는 –

+0

@fen이라고 생각합니다. 이미 카메라 미리보기에 OpenGL 효과를 적용했습니다. 내 질문은 그것을 저장하는 방법입니다. – Justin

+0

@AlexCohn : 오? getSupportedPreviewSizes()에서 800x480을 얻었습니다. – Justin

답변

0

저스틴,이 setPreviewTexture (약 내 질문),하지 제안했다. onPreviewFrame() 콜백에서받은 픽셀 데이터를 보내면 지원되는 미리보기 크기로 자연스럽게 제한됩니다.

동일한 논리를 사용하여 onPictureTaken()에서 픽셀을 밀어 넣을 수 있지만 JPEG 형식의 RGB로 디코딩해야합니다.