Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Captura de imagem

O caso de uso de captura de imagem foi criado para a captura de fotos de alta resolução e qualidade e oferece recursos de equilíbrio de branco automático, exposição automática e foco automático (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:

  • takePicture(OnImageCapturedListener): este método fornece um buffer na memória da imagem capturada.
  • takePicture(File, OnImageSavedListener): este método salva a imagem capturada no local do arquivo fornecido.
  • takePicture(File, OnImageSavedListener, Metadata): este método permite que você especifique os metadados a serem incorporados no Exif do arquivo salvo.

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 MIN_LATENCY. Para otimizar a qualidade, defina como MAX_QUALITY.

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

Kotlin

    val imageCaptureConfig = ImageCaptureConfig.Builder()
        .setTargetRotation(windowManager.defaultDisplay.rotation)
        .build()

    val imageCapture = ImageCapture(imageCaptureConfig)

    CameraX.bindToLifecycle(this as LifecycleOwner,
        imageCapture, imageAnalysis, preview)
    

Java

    ImageCaptureConfig config =
        new ImageCaptureConfig.Builder()
            .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
            .build();

    ImagesCapture imageCapture = new ImageCapture(config);

    CameraX.bindToLifecycle((LifecycleOwner) this, 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 file = File(...)
        imageCapture.takePicture(file,
            object : ImageCapture.OnImageSavedListener {
                override fun onError(error: ImageCapture.ImageCaptureError,
                                     message: String, exc: Throwable?) {
                    // insert your code here.
                }
                override fun onImageSaved(file: File) {
                    // insert your code here.
                }
            })
    }
    

Java

    public void onClick() {
        File file = new File(...);

        imageCapture.takePicture(file,
            new ImageCapture.OnImageSavedListener() {
                @Override
                public void onImageSaved(File file) {
                    // insert your code here.
                }
                @Override
                public void onError(
                        ImageCapture.ImageCaptureError imageCaptureError,
                        String message,
                        Throwable cause) {
                    // insert your code here.
                }
        }
    }
    

O método de captura de imagem é totalmente compatível com o formato JPEG.

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)