개발/Mobile

[Android] 안드로이드 연속 촬영(Burst Shot) 구현

hojak99 2017. 2. 9. 20:47

이번에 안드로이드 연속 촬영 기능을 구현하는 일이 생겼다. 처음에는 onPictureTaken() 에서 list, byte 배열, LinkedList 를 이용해 쓰레드로 byte 배열로 이루어진 (byte[] data) 것을 적재하여 저장하는 식으로 구현을 하거나, takePicture() 를 쓰레드로 빠르게 찍으려고 시도를 해보았지만 takePicture() 는 빠르게 호출되지만 onPictureTaken()은 씹히면서 호출이 되었다. 예를 들어, takePicture()는 1, 2, 3, 4, 5 이렇게 호출이 바르게 되지만 onPictureTaken()은 1, 2, 5 .. 이런 식으로 호출되어서 오랜 삽질을 하였다. 


구현은 아주 쉽다. 매우! 


바로 setPreviewCallback() 을 이용하면 된다.  


camera.setPreviewCallback(new Camera.PreviewCallback() {
                @Override
                public void onPreviewFrame(byte[] data, Camera camera) 
               {
                  
                }
            });


이런 식으로 코드가 구성이 되있는데 onPreviewFrame() 안에 처리할 작업들을 넣으면 된다. 필자는 특정 비트맵 변수를 전역 변수로 선언하여, byte형 이미지 데이터를 비트맵으로 변환 후 특정 비트맵 변수에 계속 붙이는 식으로 파노라마 기능을 구현하였다. onPreviewFrame()은 미리보기로 뿌려지는 카메라 화면을 가져오는 함수이다.

반응형