이 페이지에서는 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
코드 샘플