안드로이드 개발 질문/답변
(글 수 45,052)
DrawingCache 를 통해 화면을 캡쳐하는 어플을 만들었는데요..
일단 개발목적은 1초에 32장의 화면을 캡쳐하는 어플을 만드는것이었습니다.
10초를 캡쳐했다면 총 320장의 이미지파일이 나올꺼고, 이 이미지파일을 연결시켜보면
32프레임의 동영상을 보는거와 비슷한 효과를 얻을 수 있도록..
뭐 애초부터 동영상으로 저장하게끔 하면 되겠지만..
일단은 궁금한점은요!
쓰레드를 이용하여 핸들러를 1초에 32번 호출하게 하고,
핸들러에는 getRootView().buildDrawingCache() 와 getRootView().getDrawingCache() 를 통해
현재 화면을 지정한 폴더에 저장하게끔 하였는데요.
1초에 5장~10장찍는거까진 별 문제없이 돌아가는데
10장이 넘어가면서부터 핸드폰이 심하게 버벅거리더라구요..
따로 정지버튼을 만들어서 클릭시에 캡쳐를 멈추게 하였는데 너무 심하게 버벅거려서 정지조차도 안됩니다..
소스가 잘못된건지,
아니면 제가 개발하려고 하는 어플에 DrawingCache 자체가 안어울리는건지 궁금합니다..
어떻하면 좋을까요?
프로그래밍 시작한지 얼마안되서 모르는게 많습니다.
선배님들의 좋은 정보들 좀 공유 부탁드려요.!
밑에는 핸들러 소스구요. 저 핸들러를 쓰레드를통해 1초에 x번 호출하게 하였습니다.
class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub container.getRootView().buildDrawingCache(); // 순간의 화면 Drawing Cache에 저장 FileOutputStream fos; try{ p += 1; Bitmap captureView = container.getRootView().getDrawingCache(); // 저장된 화면 불러오기 fos = new FileOutputStream(Environment.getExternalStorageDirectory().toString() +"/Pictures/Screenshots/capture"+p+".jpg"); captureView.compress(Bitmap.CompressFormat.JPEG, 100, fos); } catch (FileNotFoundException e) { e.printStackTrace(); } super.handleMessage(msg); } }
화면을 레코딩하는 앱들을 뜯어보면 ndk에서 구현하더군요.커널단의 Frame Buffer를 직접 Access해서 Frame을 가져오는 방식으로 해야할것같네요.동영상으로 만드는 것은 FFMPEG으로 하시면 되구요. DrawingCache로는 한계가 있을듯합니다.