Acquisisci un'immagine

Questa pagina descrive come acquisire immagini di alta qualità con CameraX. Per farlo, utilizza la classe ImageCapture e i relativi metodi.

Concetti fondamentali

Di seguito sono riportati i concetti principali trattati in questo documento:

  • Metodo di archiviazione: puoi acquisire immagini in un buffer in memoria o direttamente in un file.
  • Esecutori: ImageCapture utilizza gli esecutori per la gestione dei callback e delle operazioni di I/O. Puoi personalizzare questi executor per migliorare le prestazioni e il controllo.
  • Modalità di acquisizione: puoi configurare la modalità di acquisizione per ottimizzare la latenza o la qualità dell'immagine.

Metodo di archiviazione

Esistono due modi per acquisire immagini con ImageCapture. Ognuno utilizza un sovraccarico di ImageCapture.takePicture():

Esecutori

Quando chiami takePicture, passi un Executor e una funzione OnImageCapturedCallback o OnImageSavedCallback. Executor esegue il callback e gestisce qualsiasi I/O risultante.

Scatta foto

Per scattare una foto, configura la videocamera e poi chiama takePicture.

Configurare la videocamera

Per configurare la videocamera, crea un CameraProvider. Poi, crea un oggetto ImageCapture. Utilizza ImageCapture.Builder():

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

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

Scatta una foto

Dopo aver configurato la videocamera, chiama takePicture() per acquisire un'immagine. Questo esempio mostra come utilizzare takePicture() per salvare un'immagine su 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
            }
        }
    )
}

Ecco i punti chiave di questo snippet:

  • ImageCapture.OutputFileOptions ti consente di configurare la posizione di salvataggio e i metadati.
    • In questo caso, OutputFileOptions.Builder() utilizza un oggetto File per determinare la posizione di salvataggio.
  • La funzione takePicture() acquisisce l'immagine in modo asincrono utilizzando le opzioni e l'executor forniti.
  • OnImageSavedCallback fornisce callback per esito positivo e negativo.
    • Il callback onImageSaved() gestisce l'acquisizione riuscita dell'immagine e fornisce l'accesso ai risultati dell'immagine salvata.
    • Il callback onError() gestisce gli errori di acquisizione delle immagini.

Opzioni aggiuntive

Consulta la Guida alla configurazione per l'ottimizzazione, il flash e il formato dei file per altri modi per configurare ImageCapture.

Ulteriori risorse

Per saperne di più su CameraX, consulta le seguenti risorse:

Codelab

  • Guida introduttiva a CameraX
  • Esempio di codice

  • App di esempio CameraX