Capturar uma imagem

Esta página descreve como capturar imagens de alta qualidade com o CameraX. Faça isso com a classe ImageCapture e os métodos associados.

Principais conceitos

Confira a seguir os principais conceitos discutidos neste documento:

  • Método de armazenamento:é possível capturar imagens em um buffer na memória ou diretamente em um arquivo.
  • Executores:ImageCapture usa executores para processar callbacks e operações de E/S. É possível personalizar esses executores para melhorar o desempenho e o controle.
  • Modos de captura:é possível configurar o modo de captura para otimizar a latência ou a qualidade da imagem.

Método de armazenamento

Há duas maneiras de capturar imagens com ImageCapture. Cada um deles usa uma sobrecarga de ImageCapture.takePicture():

Executores

Ao chamar takePicture, você transmite um Executor e uma função OnImageCapturedCallback ou OnImageSavedCallback. O Executor executa o callback e processa qualquer E/S resultante.

Tirar foto

Para tirar uma foto, configure a câmera e chame takePicture.

Configurar a câmera

Para configurar a câmera, crie um CameraProvider. Em seguida, crie um objeto ImageCapture. Use ImageCapture.Builder():

Kotlin

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

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

Java

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

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

Tirar uma foto

Depois de configurar a câmera, chame takePicture() para capturar uma imagem. Este exemplo demonstra como usar takePicture() para salvar uma imagem no disco:

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

Java

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

Confira os pontos principais sobre esse snippet:

  • O ImageCapture.OutputFileOptions permite configurar o local de salvamento e os metadados.
    • Aqui, o OutputFileOptions.Builder() usa um objeto File para determinar o local de salvamento.
  • A função takePicture() captura a imagem de forma assíncrona usando as opções e o executor fornecidos.
  • O OnImageSavedCallback fornece callbacks para sucesso e falha.
    • O callback onImageSaved() processa a captura de imagem bem-sucedida e oferece acesso aos resultados da imagem salva.
    • O callback onError() processa erros de captura de imagem.

Mais opções

Consulte o guia de configuração para otimização, flash e formato de arquivo para conferir outras maneiras de configurar ImageCapture.

Outros recursos

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

Codelab

  • Introdução ao CameraX
  • Exemplo de código

  • Apps de exemplo do CameraX (link em inglês)