Captura de imagem

O caso de uso de captura de imagem foi projetado para a captura de fotos de alta resolução e qualidade e oferece recursos de equilíbrio de branco, exposição e foco automáticos (3A), além de controles de câmera manuais simples. O autor da chamada é responsável por decidir como usar a imagem capturada, incluindo as opções a seguir:

Há dois tipos de executores personalizáveis em que ImageCapture é executado, o de callback e o de pedido de veiculação.

  • O executor de callback é o parâmetro dos métodos takePicture. Ele é usado para executar o OnImageCapturedCallback fornecido pelo usuário.
  • Se o autor da chamada escolher salvar a imagem em um local de arquivo, você poderá especificar um executor para fazer o pedido de veiculação. Para definir o executor de pedido de veiculação, chame ImageCapture.Builder.setIoExecutor(Executor). Se o executor estiver ausente, o CameraX adotará como padrão um executor interno de pedido de veiculação para a tarefa.

Implementação

São fornecidos controles básicos para a captura de imagens. As imagens são capturadas com opções de flash e foco automático contínuo.

Para otimizar a captura de fotos para latência, defina ImageCapture.CaptureMode como CAPTURE_MODE_MINIMIZE_LATENCY. Para otimizar a qualidade, defina como CAPTURE_MODE_MAXIMIZE_QUALITY.

Veja na amostra de código a seguir como configurar seu app para tirar uma foto:

Kotlin

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

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

Java

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

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

Depois de configurar a câmera, o código a seguir tira uma foto quando o usuário solicita:

Kotlin

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...))
    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.
            }
        })
}

Java

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.
            }
    }
}

O método de captura de imagem é totalmente compatível com o formato JPEG. Para ver o código de amostra que mostra como converter um objeto Media.Image de YUV_420_888 para um objeto no formato RGB Bitmap, consulte YuvToRgbConverter.kt.

Outros recursos

Para saber mais sobre o CameraX, consulte os seguintes recursos.

Codelab

  • Primeiros passos com o CameraX (link em inglês)
  • Amostra de código

  • App de amostra oficial do CameraX (link em inglês)