[Android]
[Android][CameraX - 2] Camera를 이용해서 얼굴을 캡쳐해보자!
민프야
2021. 7. 26. 20:06
저번 포스트에서는 Camera Preview를 구현했었고
이번에는 캡쳐를 해보자!!
구글 문서에 나와있는대로
ImageCapture imageCapture =
new ImageCapture.Builder()
.setTargetRotation(view.getDisplay().getRotation())
.build();
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, imageAnalysis, preview);
ImageCapture 클래스는 기본적인 사진 촬영을 위해 설계 되었고,
takePicture() 함수를 제공해서 저장까지 할 수 있다.
초점 및 노출 영역은 PreView를 통해 제어할 수 있다.
사진 캡처를 지연 시간을 기준으로 최적화하려면 ImageCapture.CaptureMode를 CAPTURE_MODE_MINIMIZE_LATENCY로 설정합니다. 화질을 최적화하려면 CAPTURE_MODE_MAXIMIZE_QUALITY로 설정합니다.
이제 캡쳐 버튼을 만들고
그 캡쳐 버튼을 눌렀을때 실행되는 코드를 보자
ImageCapture.OutputFileOptions outputFileOptions =
new ImageCapture.OutputFileOptions.Builder(file).build();
imageCapture.takePicture(outputFileOptions,ContextCompat.getMainExecutor(CameraActivity.this),
new ImageCapture.OnImageSavedCallback() {
@Override
public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
// insert your code here.
Log.d(TAG+ " onImageSavedgetSavedUri", String.valueOf(outputFileResults.getSavedUri()));
Toast.makeText(getApplicationContext(), "찍혔어요",Toast.LENGTH_LONG).show();
}
@Override
public void onError(ImageCaptureException error) {
// insert your code here.
Log.d(" Camerror", String.valueOf(error));
Toast.makeText(getApplicationContext(), "에러났어요",Toast.LENGTH_LONG).show();
}
}
);
}
imageCapture 후에 File 클래스를 만들어줘서 넣어주면
캡쳐 버튼을 눌렀을때 File클래스에 정의할 때 정의해준 파일 경로에 저장이 되게 된다.
밑 사진 처럼 캡쳐가 잘 된것을 확인할 수 있다.
이제 카메라 전 / 후 전환이 되게 해보자!
----------참고----------
https://developer.android.com/training/camerax/take-photo
https://developer.android.com/reference/androidx/camera/core/ImageCapture