이 페이지에서는 CameraX로 고화질 이미지를 캡처하는 방법을 설명합니다. ImageCapture
클래스와 관련 메서드를 사용하여 이 작업을 실행합니다.
주요 개념
다음은 이 문서에서 다루는 주요 개념입니다.
- 저장소 방법: 이미지를 인메모리 버퍼에 캡처하거나 파일에 직접 캡처할 수 있습니다.
- 실행자:
ImageCapture
는 콜백 및 I/O 작업을 처리하기 위해 실행자를 사용합니다. 성능과 제어를 개선하기 위해 이러한 실행자를 맞춤설정할 수 있습니다. - 캡처 모드: 지연 시간 또는 이미지 품질에 맞게 캡처 모드를 구성할 수 있습니다.
저장소 메서드
ImageCapture
로 이미지를 캡처하는 방법에는 두 가지가 있습니다. 각각 ImageCapture.takePicture()
의 오버로드를 사용합니다.
파일:
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)
를 사용하여 캡처된 이미지를 디스크의 파일에 직접 저장합니다.- 가장 일반적인 사진 찍기 방법입니다.
인메모리:
takePicture(Executor, OnImageCapturedCallback)
를 사용하여 캡처된 이미지의 인메모리 버퍼를 수신합니다.- 이는 실시간 이미지 처리 또는 분석에 유용합니다.
실행자
takePicture
를 호출할 때는 Executor
및 OnImageCapturedCallback
또는 OnImageSavedCallback
함수를 전달합니다. Executor
는 콜백을 실행하고 그 결과 발생하는 IO를 처리합니다.
사진 촬영
사진을 찍으려면 카메라를 설정한 다음 takePicture
를 호출합니다.
카메라 설정
카메라를 설정하려면 CameraProvider
를 만듭니다. 그런 다음 ImageCapture
객체를 만듭니다. ImageCapture.Builder()
사용:
Kotlin
val imageCapture = ImageCapture.Builder()
.setTargetRotation(view.display.rotation)
.build()
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
자바
ImageCapture imageCapture =
new ImageCapture.Builder()
.setTargetRotation(view.getDisplay().getRotation())
.build();
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);
사진 찍어 줘
카메라를 구성한 후 takePicture()
를 호출하여 이미지를 캡처합니다.
이 예에서는 takePicture()
를 사용하여 이미지를 디스크에 저장하는 방법을 보여줍니다.
Kotlin
fun onClick() {
val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...)).build()
imageCapture.takePicture(outputFileOptions, cameraExecutor,
object : ImageCapture.OnImageSavedCallback {
override fun onError(error: ImageCaptureException)
{
// insert your code here.
}
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
// insert your code here.
}
})
}
자바
public void onClick() {
ImageCapture.OutputFileOptions outputFileOptions =
new ImageCapture.OutputFileOptions.Builder(new File(...)).build();
imageCapture.takePicture(outputFileOptions, cameraExecutor,
new ImageCapture.OnImageSavedCallback() {
@Override
public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
// insert your code here.
}
@Override
public void onError(ImageCaptureException error) {
// insert your code here.
}
}
);
}
이 스니펫의 핵심 사항은 다음과 같습니다.
ImageCapture.OutputFileOptions
를 사용하면 저장 위치와 메타데이터를 구성할 수 있습니다.- 여기서
OutputFileOptions.Builder()
는File
객체를 사용하여 저장 위치를 결정합니다.
- 여기서
takePicture()
함수는 제공된 옵션과 실행자를 사용하여 이미지를 비동기식으로 캡처합니다.OnImageSavedCallback
는 성공 및 실패에 관한 콜백을 제공합니다.onImageSaved()
콜백은 성공적인 이미지 캡처를 처리하고 저장된 이미지 결과에 대한 액세스를 제공합니다.onError()
콜백은 이미지 캡처 오류를 처리합니다.
추가 옵션
ImageCapture
를 구성하는 다른 방법은 최적화, 플래시, 파일 형식 구성 가이드를 참고하세요.
추가 자료
CameraX에 관해 자세히 알아보려면 다음 리소스를 참고하세요.
Codelab
코드 샘플