2014년 8월 6일 수요일

(Android) SurfaceView Canvas 를 Bitmap으로 저장하기(가져오기)

다음은 SurfaceView에서 그려지는 Canvas를 Bitmap으로 가져오는 방법이다.
비트맵을 가져와서는 이미지뷰에 보여주던, 파일로 저장하던, 서버에 업로드하던 그건 뒤에 알아서 처리하시길..


1.SurView sView = new SurView(this);
저는 그려지는 서페이스뷰를 sView로 선언하였습니다.
sView 에는 onDraw라는 그리는 함수가 있겠죠.


어떤 버튼 하나를 구현해서 그 버튼을 눌렀을때의 클릭이벤트를 다음과같이 처리합니다.


1.Bitmap bitmap = Bitmap.createBitmap(DEVICE_WIDTH, DEVICE_HEIGHT, Bitmap.Config.ARGB_8888);
2. 
3.Canvas canvas = new Canvas(bitmap);
4.sView.doDraw(canvas);


설명을 드리면 Bitmap을 하나 만들어서 거기에 Canvas 를 연결합니다.
그리고 서페이스뷰에다가 캔버스를 보내서 한번 그려주면 됩니다.
그러면 연결된 Bitmap에 그대로 그려져 나오는거죠

이제 Bitmap으로 선언된 bitmap을 입맛에 맞게 사용하면 끝!^^

댓글 1개:

  1. 혹시 surfaceview를 캡쳐하는 방법을 알수있을까요??

    buttonCenter.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

    // Bitmap bitmap = Bitmap.createBitmap(1200,1200, Bitmap.Config.ARGB_8888); //bitmap 만들기
    // Canvas canvas = new Canvas(bitmap); //비트맵에 그리기위해 canvas 생성
    // canvas에 그리는 작업은 bitmap에 반영
    // canvas.drawBitmap(bitmap, 0, 0, null); //canvas에 bitmap 이미지 그림

    container.buildDrawingCache(); // container의 cache를 그린다
    Bitmap captureView = container.getDrawingCache(); //위에서그린 cache를 가져온다
    //canvas.drawBitmap(captureView,0,0,null); //
    FileOutputStream fos;



    try {
    fos = new FileOutputStream(Environment.getExternalStorageDirectory().toString() + "/capture.jpeg");
    captureView.compress(Bitmap.CompressFormat.JPEG, 100, fos);


    } catch (
    FileNotFoundException e) {
    e.printStackTrace();
    }


    Toast.makeText(getApplicationContext(), "Captured!", Toast.LENGTH_LONG).show();
    }

    이렇게하면 검은화면 밖에 나오질 않네요. 비트맵을 만들고 비트 맵에서 canvas해서 저장하게 하고싶습니다.

    답글삭제