카메라 화면에 무언가 그리기

  카메라 화면은 surfaceView 를 이용하고 있습니다.

  아래의 소스코드는 anddev.org 사이트에서 참조하였습니다.

  v1.5에 맞게 수정하였고

  간단히 텍스트 와 라인을 그려보았습니다.

  다른 응용도 가능할거라고 봅니다.




package com.google.android.MySurfaceView;


import java.io.IOException;


import android.app.Activity; 

import android.content.Context; 

import android.graphics.Canvas; 

import android.graphics.Color; 

import android.graphics.Paint; 

import android.hardware.Camera; 

import android.os.Bundle; 

import android.view.SurfaceHolder; 

import android.view.SurfaceView; 

import android.view.View; 

import android.view.Window; 

import android.view.ViewGroup.LayoutParams; 


public class MySurfaceView extends Activity { 

    /** Called when the activity is first created. */ 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        


        requestWindowFeature(Window.FEATURE_NO_TITLE); 


        Preview mPreview = new Preview(this); 

        DrawOnTop mDraw = new DrawOnTop(this); 

    

        setContentView(mPreview); 

        addContentView(mDraw, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

        

    } 


class DrawOnTop extends View { 


     public DrawOnTop(Context context) { 

          super(context); 

          // TODO Auto-generated constructor stub 

     } 


     @Override 

     protected void onDraw(Canvas canvas) { 

          // TODO Auto-generated method stub 

           

          Paint paint = new Paint(); 

          paint.setStyle(Paint.Style.FILL); 

          paint.setColor(Color.RED);                    // 적색

          paint.setStrokeWidth(10);                     // 크기 10

          canvas.drawText("Test Text", 10, 10, paint); // 텍스트 표시

          canvas.drawLine(50, 50, 200, 200, paint);    // 라인그리기

           

          super.onDraw(canvas); 

     } 

      


//---------------------------------------------------------------------- 


class Preview extends SurfaceView implements SurfaceHolder.Callback { 

    SurfaceHolder mHolder

    Camera mCamera

    

    Preview(Context context) { 

        super(context); 

        

        // Install a SurfaceHolder.Callback so we get notified when the 

        // underlying surface is created and destroyed. 

        mHolder = getHolder(); 

        mHolder.addCallback(this); 

        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    } 


    public void surfaceCreated(SurfaceHolder holder) { 

        // The Surface has been created, acquire the camera and tell it where 

        // to draw. 

        mCamera = Camera.open(); 

        try{    //수정부분

        mCamera.setPreviewDisplay(holder);

         if (false) throw new IOException(); 

        }catch (IOException e){

        //do something

        }

    } 


    public void surfaceDestroyed(SurfaceHolder holder) { 

        // Surface will be destroyed when we return, so stop the preview. 

        // Because the CameraDevice object is not a shared resource, it's very 

        // important to release it when the activity is paused. 

        mCamera.stopPreview(); 

        mCamera = null

    } 


    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

        // Now that the size is known, set up the camera parameters and begin 

        // the preview. 

        Camera.Parameters parameters = mCamera.getParameters(); 

        parameters.setPreviewSize(w, h); 

        mCamera.setParameters(parameters); 

        mCamera.startPreview(); 

    } 


}