Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

이미지 캡처

이미지 캡처 사용 사례는 고해상도 고화질 사진을 캡처할 수 있도록 설계되었으며 자동 화이트 밸런스, 자동 노출, 자동 초점(3A) 기능과 함께 간단한 수동 카메라 컨트롤을 제공합니다. 호출자는 다음 옵션을 포함하여 캡처한 사진을 사용하는 방법을 결정해야 합니다.

ImageCapture가 실행되는 맞춤설정 가능 실행기의 유형은 콜백 실행기 및 IO 실행기 두 가지입니다.

  • 콜백 실행기는 takePicture 메서드의 매개변수입니다. 사용자 제공 OnImageCapturedCallback을 실행하는 데 사용됩니다.
  • 호출자가 이미지를 파일 위치에 저장하도록 선택하면 실행기를 지정하여 IO를 실행할 수 있습니다. IO 실행기를 설정하려면 ImageCapture.Builder.setIoExecutor(Executor)를 호출합니다. 실행기가 없으면 CameraX가 기본적으로 작업의 내부 IO 실행기로 설정됩니다.

구현

사진을 찍기 위한 기본적인 컨트롤이 제공됩니다. 사진은 플래시 옵션으로 촬영되고 지속적으로 자동 초점을 사용합니다.

사진 캡처를 지연 시간을 기준으로 최적화하려면 ImageCapture.CaptureModeCAPTURE_MODE_MINIMIZE_LATENCY로 설정합니다. 화질을 최적화하려면 CAPTURE_MODE_MAXIMIZE_QUALITY로 설정합니다.

다음 코드 샘플에서는 사진을 찍도록 앱을 구성하는 방법을 보여줍니다.

Kotlin

val imageCapture = ImageCapture.Builder()
    .setTargetRotation(view.display.rotation)
    .build()

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture,
    imageAnalysis, preview)

자바

ImageCapture imageCapture =
    new ImageCapture.Builder()
        .setTargetRotation(view.getDisplay().getRotation())
        .build();

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, imageAnalysis, preview);

카메라를 구성한 후에는 다음 코드가 사용자 작업에 따라 사진을 찍습니다.

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.OnImageSavedListener() {
            @Override
            public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                // insert your code here.
            }
            @Override
            public void onError(ImageCaptureException error) {
                // insert your code here.
            }
    }
}

이미지 캡처 메서드에서는 JPEG 형식을 완벽하게 지원합니다. Media.Image 객체를 YUV_420_888 형식에서 RGB Bitmap 객체로 변환하는 방법을 보여주는 샘플 코드는 YuvToRgbConverter.kt를 참조하세요.

참고 자료

CameraX에 관해 자세히 알아보려면 다음 추가 리소스를 참조하세요.

Codelab

  • CameraX 시작하기
  • 코드 샘플

  • 공식 CameraX 샘플 앱