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:

  • takePicture(OnImageCapturedListener): Este método proporciona un búfer en la memoria para la imagen capturada.
  • takePicture(File, OnImageSavedListener): Este método guarda la imagen capturada en la ubicación de archivos proporcionada.
  • takePicture(File, OnImageSavedListener, Metadata): Este método te permite especificar los metadatos para incorporarlos en el Exif del archivo guardado.

Implementación

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

A fin de optimizar la captura de fotos para la latencia, configura ImageCapture.CaptureMode en MIN_LATENCY. Para optimizar la calidad, configura en MAX_QUALITY.

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

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 file = File(...)
        imageCapture.takePicture(file,
            object : ImageCapture.OnImageSavedListener {
                override fun onError(error: ImageCapture.UseCaseError,
                                     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.UseCaseError useCaseError,
                        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.

Codelabs

  • Cómo comenzar a usar CameraX
  • Cómo agregar un fragmento de CameraView a tu app
  • Muestra de código

  • App de muestra de CameraX oficial