이미지 캡처

이 페이지에서는 CameraX로 고화질 이미지를 캡처하는 방법을 설명합니다. ImageCapture 클래스와 관련 메서드를 사용하여 이 작업을 실행합니다.

주요 개념

다음은 이 문서에서 다루는 주요 개념입니다.

  • 저장소 방법: 이미지를 인메모리 버퍼에 캡처하거나 파일에 직접 캡처할 수 있습니다.
  • 실행자: ImageCapture는 콜백 및 I/O 작업을 처리하기 위해 실행자를 사용합니다. 성능과 제어를 개선하기 위해 이러한 실행자를 맞춤설정할 수 있습니다.
  • 캡처 모드: 지연 시간 또는 이미지 품질에 맞게 캡처 모드를 구성할 수 있습니다.

저장소 메서드

ImageCapture로 이미지를 캡처하는 방법에는 두 가지가 있습니다. 각각 ImageCapture.takePicture()의 오버로드를 사용합니다.

실행자

takePicture를 호출할 때는 ExecutorOnImageCapturedCallback 또는 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

  • CameraX 시작하기
  • 코드 샘플

  • CameraX 샘플 앱