Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Captura de imágenes

El caso de uso 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 de cámaras simples y manuales. 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(...)).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.OnImageSavedListener() {
            @Override
            public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                // insert your code here.
            }
            @Override
            public void onError(ImageCaptureException error) {
                // insert your code here.
            }
    }
}

El método de captura de imágenes es compatible con el formato JPEG. Para ver un código de muestra en el que se indica cómo convertir un objeto Media.Image del formato YUV_420_888 a un objeto Bitmap RGB, consulta YuvToRgbConverter.kt.

Recursos adicionales

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

Codelab

  • Getting Started with CameraX (Comienza a usar CameraX)
  • Muestra de código

  • App de muestra de CameraX oficial