Nuke Olaf - Log Store
[Android] 안드로이드 - camera2 api를 이용해서 사진 찍기 본문
camera2 는 2014년 도입된 api 이다. Android 에서는 더이상 camera2 이전의 camera api 를 지원하지 않기 때문에 장치 카메라를 사용하는 모든 새로 개발된 앱은 camera2 api 를 사용해야한다.
camera2 api 를 지원하지 않는 구형 스마트폰이 아니라면 camera2 를 사용해야 한다.
1. 매니페스트에 권한 선언하기
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. TextureView 생성하기
TextureView 는 카메라 미리보기를 랜더링하기 위한 placeholder 이다. TextureView 대신 SurfaceView 를 사용할 수 있지만, SurfaceView 는 scaling and shear and animations와 같은 기능을 지원하지 않는다.
카메라 미리보기를 TextureView 로 랜더링 하기 위해서는 getSurfaceTexture 를 호출하거나, TextureView.SurfaceListener 의 onSurfaceTextureAvailable() 을 듣고 TextureView 의 SurfaceTexture 를 구성하고, 리스너가 제공한 SurfaceTexture 를 사용하여 미리보기를 랜더링할 수 있다. SurfaceTexture 는 TextureView 가 화면에 연결된 경우에만 사용할 수 있으므로 리스너 메서드를 사용하는 것이 좋다.
private TextureView.SurfaceTextureListener surfaceTextureListener = new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
openCamera();
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
mTextureView = (TextureView) findViewById(R.id.texture);
mTextureView.setSurfaceTextureListener(surfaceTextureListener);
}
textureViewListener 의 onSurfaceTextureAvailable (), 즉 surfaceTexture 이 사용가능하면 openCamera() 메서드를 호출하도록 한다.
3. openCamera() 메서드 정의하기
이제 openCamera() 메서드를 정의해주어야 한다.
카메라를 열기 위해서는 getSystemService() 를 호출하여 CameraManager 의 인스턴스를 얻어야 한다. CameraManager 는 카메라에 접근하거나 카메라의 특징을 얻어올 수 있는 객체이다. getCameraId() 를 사용하여 CameraManger 객체로부터 사용 가능한 카메라 idList 를 가져온다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 - camera2 api 를 사용하여 동영상 촬영하는 앱 만들기 (feat. Kotlin) (0) | 2019.12.14 |
---|---|
[Android] 안드로이드 - camera2 api를 사용해서 사진 촬영하는 앱 만들기 (feat. Kotlin) (1) | 2019.12.14 |
[Android] 안드로이드 - 큰 비트맵을 효율적으로 로드하기 (feat. BitmapFactory) (0) | 2019.12.09 |
[Android] 안드로이드 - camera2 api 사용해서 카메라앱 만들기 (0) | 2019.12.09 |
[Android] 안드로이드 - camera2 api 사용하기 (0) | 2019.12.08 |