Cómo capturar una imagen

En esta página, se describe cómo capturar imágenes de alta calidad con CameraX. Para ello, usa la clase ImageCapture y sus métodos asociados.

Conceptos clave

A continuación, se indican los conceptos principales que se analizan en este documento:

  • Método de almacenamiento: Puedes capturar imágenes en un búfer en la memoria o directamente en un archivo.
  • Ejecutores: ImageCapture usa ejecutores para controlar las devoluciones de llamada y las operaciones de E/S. Puedes personalizar estos ejecutores para obtener un mejor rendimiento y control.
  • Modos de captura: Puedes configurar el modo de captura para optimizar la latencia o la calidad de la imagen.

Método de almacenamiento

Existen dos formas de capturar imágenes con ImageCapture. Cada uno usa una sobrecarga de ImageCapture.takePicture():

Ejecutores

Cuando llamas a takePicture, pasas un Executor y una función OnImageCapturedCallback o OnImageSavedCallback. El Executor ejecuta la devolución de llamada y controla cualquier E/S resultante.

Tomar foto

Para tomar una foto, debes configurar la cámara y, luego, llamar a takePicture.

Configura la cámara

Para configurar la cámara, crea un objeto CameraProvider. Luego, crea un objeto ImageCapture. Usa ImageCapture.Builder():

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

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

Tomar una foto

Después de configurar la cámara, llama a takePicture() para capturar una imagen. En este ejemplo, se muestra cómo usar takePicture() para guardar una imagen en el disco:

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File("photo.jpg")).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
            }
        }
    )
}

Estos son los puntos clave sobre este fragmento:

  • El ImageCapture.OutputFileOptions te permite configurar la ubicación de guardado y los metadatos.
    • Aquí, OutputFileOptions.Builder() usa un objeto File para determinar la ubicación de guardado.
  • La función takePicture() captura la imagen de forma asíncrona con las opciones y el ejecutor proporcionados.
  • El objeto OnImageSavedCallback proporciona devoluciones de llamada para el éxito y el fracaso.
    • La devolución de llamada onImageSaved() controla la captura de imágenes correcta y proporciona acceso a los resultados de imágenes guardadas.
    • La devolución de llamada onError() controla los errores de captura de imágenes.

Opciones adicionales

Consulta la guía de configuración para la optimización, el flash y el formato de archivo para conocer otras formas de configurar ImageCapture.

Más recursos

Para obtener más información sobre CameraX, consulta los siguientes recursos:

Codelab

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

  • Apps de ejemplo de CameraX