본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Camera APIs

by 돼지왕 왕돼지 2012. 11. 21.
반응형




camera APIs

manifest.xml 설정하기

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />




카메라 사용하기

- 함수들은 Camera class 의 함수들..

1. open(int) 로 Camera instance 얻기
 
2. getParameters() 로 기본 setting 을 얻는다.
 
3. 필요하다면 Parameters 를 수정한 후 setParameter 를 통해 수정된 parameter 전달.
 
4. 필요하다면, setDisplayOrientation( int ) 를 호출한다.
 
5. setPreviewDisplay( SurfaceHolder ) 를 호출하는데, 이 때 SurfaceHolder 는 initialize 가 끝난 상태여야 한다.
 
6. startPreview() 를 호출한다. 
 
7. takePicture( Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback ) 을 통해 사진을 찍고, 실제 이미지들이 callback 을 통해 불린다.
 
8. 사진을 더 찍고 싶다면 startPreview() 를 다시 호출해준다.
 
9. preview 를 멈추고 싶다면 stopPreview() 를 호출한다.
 
10. release() 를 불러줘야 다른 camera 앱에서 camera hardware 를 사용할 수 있다. onPause() 에서 보통 release 해주고, onResume 에서 open() 해준다.




비디오 레코딩 모드로 사용하기.

- 3번부터는 MediaRecorder class 의 함수들이다.

1. Camera 초기화 과정 & startPreview() 까지 호출해준다.
 
2. unlock() 을 호출한다.
 
3. setCamera( Camera ) 를 통해 카메라를 전달한다.
 
4. 레코딩이 끝나면 reconnect() 를 호출한다. 이것을 통해 camera 를 relock 할 수 있다.
 
5. 필요하다면 startPreview() 를 다시 호출해준다.
 
6. stopPreview(), release() 콤보를 날린다.




기타 카메라에 대한 정보들.

- Camera 클래스는 thread-safe 하지 않다. 기본적으로 open(int) 를 호출한 thread 에서 callback 을 받게 되고, preview, focus, photo capture 등의 작업들은 async 로 작동한다.

- 카메라 앱은 카메라 스펙에 많은 영향을 받기 때문에 여러 단말 지원을 위해서는 함부로 하드웨어를 가정해서는 안된다.


takePicture 함수

- shuttercallback 에서는 보통 셔터음을 재생.

- raw image 가 나왔을 때 첫번째 PictureCallback 불림. 이 때 raw buffer 가 없거나, 메모리 여유가 없다면 image 는 null 이 된다.

- scale 되고 한 번 처리된 이미지가 나오면 postview callback 이 불린다.  이것은 모든 하드웨어가 지원하는것은 아니다.

- jpeg callback 은 jpeg 으로 압축이 되어 준비되었을 때 불린다. 지원하고 싶지 않은 callback 은 null 을 전달함으로서 해결한다. 이 함수는 startPreview() 상태에서만 call 할 수 있고, 이 함수가 불린 후에는 preview 가 멈추기 때문에 다시 startPreview() 를 실행시켜줘야 한다. takePicture 함수는 start(), stop() 사이에서는 불리면 안된다. 이 함수를 실행시킨 후 JPEG 이 리턴될 때까지 stratPreview 를 다시 불러서는 안된다. 



도움이 되셨다면 손가락 꾸욱~ ( 로그인 필요 x )



반응형

댓글