대가는 결과를 만든다

surfaceview와 CameraSource 본문

개발/Android

surfaceview와 CameraSource

yunzema 2018. 6. 25. 16:32
반응형

Surfaceview를 사용하기에 앞서


-안드로이드는 3D지원을 위해 내부에 OpenGL ES 라이브러리를 포함하고 있음

  *Open GL ES (Graphic Library Embeded System)


-3D객체를 보여주기위해 surfaceview를 이용 (하드웨어 가속이 가능해 그래픽 처리가 빠르기 때문에)

  (참고 : 젤리빈 버전 이후에는 일반 뷰에서도 하드웨어 가속기능 사용할 수 있게됨)


-안드로이드 기본 뷰 체계와 별도로 구현되어 있어 쓰는 방법을 별도로 이해해야 함







Surfaceview 세가지 특징


1) SurfaceHolder : 서피스뷰에 필요한 제어기능을 가지고 있다. 필수적으로 만들어 사용하게되는 객체

-연관 메서드 예시 : SurfaceView.getHolder(); //서피스홀더를 리턴함

   CameraSource.start(SurfaceHolder);    //카메라 

  

2) Callback 인터페이스 구현(SurfaceHolder.Callback) : 서페이스뷰의 생성, 변경, 해제 메소드가 정의되어있음. 상ㅌ내의 변화에 따라 자동으로 호출됨

surfaceCreated(SurfaceHolder surface)

surfaceChanged(SurfaceHolder holder, int format, int width, int height)

surfaceDestroyed(SurfaceHolder surface)



3) Lock기능 : 앱에서 서피스뷰에 그래픽 그릴때 시스템이나 다른 App에서 접근 막기위해 잠금 기능 사용

예) 서피스뷰의 크기 변경과 동시에 그래픽 그릴경우 데드락 발생 -> 방지위해 lockCanvas(), unlockAndPost() 사이 그래픽 그리는 작업 수행


+ 앞서 말한 것과 같이 서피스뷰는 안드로이드 기본뷰에 속하지 않아 onDraw(), invalidate()메소드를 사용할 수 없음.

  따라서 화면에 그래픽을 그리기 위한 별도의 메소드 정의해야함.

  예) 

     private void draw(){


Canvas canvas = null;

try{

canvas = SurfaceHolder.lockCanvas(null);


//그래픽 그리기 작업



}finally{

if(canvas!=null){


}

}


}



참고 : Do it 안드로이드 앱 프로그래밍



CameraSource 객체란

: 지정된 속도로 카메라에서 미리보기 프레임을 수신하여 해당 프레임을 처리할 수 있는 속도로 Detector로 전송하는 객체


주요 메서드

start(SurfaceHolder);      //카메라를 열고 미리보기 프레임을 기본 감지기서페이스뷰로 보내기 시작

stop();                    //카메라를 닫고 기본 프레임 검출기로 프레임 전송을 중지

release();                 //카메라를 정지시키고 카메라 및 기본 탐지기의 자원을 해제

getPreviewSize();         //기본 카메라에서 현재 사용중인 미리보기 크기를 반환

getCameraFacing();      //선택한 카메라를 반환합니다. CAMERA_FACING_BACK /CAMERA_FACING_FRONT



공홈 레퍼런스 : https://developers.google.com/android/reference/com/google/android/gms/vision/CameraSource

Comments