Únete a ⁠ #Android11: The Beta Launch Show el 3 de junio.

Captura de imágenes

El caso práctico de captura de imágenes está diseñado para capturar fotos de alta calidad y resolución, y proporciona balance de blancos automático, exposición automática y enfoque automático (3A), además de los controles simples y manuales de cámara. El emisor tiene la responsabilidad de decidir cómo usar la imagen capturada. Estas son algunas de las opciones:

Hay dos tipos de ejecutores personalizables en los que se ejecuta ImageCapture: el ejecutor de devolución de llamada y el ejecutor de IO.

  • El ejecutor de devolución de llamada es el parámetro de los métodos takePicture. Se usa para ejecutar el elemento OnImageCapturedCallback proporcionado por el usuario.
  • Si el emisor decide guardar la imagen en una ubicación de archivo, puedes especificar un ejecutor para que realice el proceso de IO. Para configurar el ejecutor de IO, llama a ImageCapture.Builder.setIoExecutor(Executor). Si el ejecutor está ausente, de forma predeterminada, CameraX usará un ejecutor de IO interno para la tarea.

Implementación

Se proporcionan controles básicos para tomar fotos. Las fotos se toman con opciones de flash y enfoque automático continuo.

Con el fin de optimizar la captura de fotos para latencia, configura ImageCapture.CaptureMode en CAPTURE_MODE_MINIMIZE_LATENCY. Para optimizar la calidad, configúrala en CAPTURE_MODE_MAXIMIZE_QUALITY.

En el siguiente código, se muestra cómo configurar tu app para tomar una 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);
    

Una vez configurada la cámara, el siguiente código toma una foto en función de la acción del usuario.

Kotlin

    fun onClick() {
        val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...))
        imageCapture.takePicture(outputFileOptions,
            object : ImageCapture.OnImageSavedListener {
                override fun onError(error: ImageCapture.ImageCaptureError,
                                     message: String, exc: Throwable?) {
                    // 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,
            new ImageCapture.OnImageSavedListener() {
                @Override
                public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                    // insert your code here.
                }
                @Override
                public void onError(
                        ImageCapture.ImageCaptureError imageCaptureError,
                        String message,
                        Throwable cause) {
                    // insert your code here.
                }
        }
    }
    

El método de captura de imágenes es compatible con el formato JPEG.

Recursos adicionales

Para obtener más información acerca de CameraX, consulta los siguientes recursos adicionales.

Codelab

  • Cómo comenzar a usar CameraX
  • Muestra de código

  • App de muestra de CameraX oficial