본문 바로가기

Linux/Android

안드로이드에서 빠른 화면 캡쳐

출처 : http://jaehwa.egloos.com/1097955

안드로이드에서 현재 화면을 캡쳐하고 싶을 때가 있다. 
그때는 View의 메서드로 setDrawingCacheEnabled(true) 호출 뒤 getDrawingCache() 를 사용하면 현재 View의 비트맵을 복사해올 수 있다.

사용예제 
http://stackoverflow.com/questions/3107527/android-save-view-to-jpg-or-png

분석
http://luxtella.tistory.com/entry/Android-ViewgetDrawingCache-%EB%B6%84%EC%84%9D


그러나 수시로 변하는 화면이라면 위 소스로는 제약이 있다. 
빨리빨리 캡쳐를 못해온다는 거다.

일반적으로 단순히 화면 캡쳐해서 쓴다면 위 방법대로 하면 된다. 

그렇지 않다면 onDraw 시점에 Bitmap을 하나 만들고 그 Bitmap을 지정한 Canvas를 가지고 복사해두면 된다.
이렇게 하면 복사속도도 엄청 빠르고 실시간으로 빨리 빨리 캡쳐하는 효과를 가질 수 있었다.

위에 사용방법을 간단히 설명하자면 아래와 같다.

    public void createBitmap(int width, int height){
        mBackground = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        if(mCanvas==null)
            mCanvas = new Canvas(mBackground);
        else
            mCanvas.setBitmap(mBackground);        
    }

위와 같이 Bitmap과 Canvas를 만들어주고 View의 onDraw 메서드에서 아래 메서드를 호출하면 된다.

    public void drawBitmap(Bitmap bitmap, int x, int y) {
        if(mCanvas!=null && mDrawable){
            mCanvas.drawBitmap(bitmap, x, y, null);
        }
    }

이해가 되시나요? ^^
도움이 되었다면 댓글을 부탁드려요. ^^