TP Icon 136

Android CameraX: Let’s take a selfie

Problem

Die Benutzung der Kamera war schon immer eine kleine Herausforderung bei Android. Nachdem Google die alte android.hardware.camera-API mit Android 5 (Lollipop) aufgrund zu geringen Funktionsumfangs als „deprecated“ markiert hat, wurde im Gegenzug die Camera2-API eingeführt. Diese ermöglicht es Hersteller und Entwickler, auch komplexe Funktionen in die Kamera zu integrieren. Im Gegenzug hat sich aber auch der Aufwand und die Komplexität der Implementierung stark erhöht.

Lösung

Um der erhöhten Komplexität entgegen zu wirken, wurde auf der Google IO 2019 die CameraX-Bibliothek vorgestellt, welche Teil des Android Jetpack Komponentensets ist. CameraX setzt auf die Camera2-API auf und kann ab Android 5 verwendet werden. Dabei wird die Idee von Use-Cases umgesetzt, um eine einfache API zu gewährleisten. Derzeit werden drei Use Cases bereitgestellt:

  • Preview: Zeigt eine Vorschau der Bilder an.
  • Image Analysis: Bietet einen Zugang zu einem Stream von Bildern zur anschließenden Weiterverarbeitung.
  • Image Capture: Speichert Bilder in hoher Auflösung.

CameraX bietet aber nicht nur verschiedene Use Cases an, sondern übernimmt auch die Konfiguration von gerätespezifischen Einstellungen. Google stellt hierfür ein eigenes Test Lab bereit, worin eine Vielzahl unterschiedlicher Geräte automatisiert getestet werden.

Außerdem wird ein optionales Add-on mit den Namen „extensions“ bereitgestellt, welches den Zugriff auf gerätespezifische Effekte (wie beispielsweise HDR-, Nacht- oder Potrait-Modus) ermöglicht.

Folgendes Snippet zeigt, mit wie wenig Aufwand der Preview-Use-Case in das System eingebunden werden kann. Das Ergebnis ist im Screenshot zu sehen.

Android CameraX Preview-Use-Case

Beispiel

private fun bindPreviewUseCase() {
    // Get screen metrics used to setup camera for full screen resolution
    val metrics = DisplayMetrics().also { textureView.display.getRealMetrics(it) }
    val screenAspectRatio = Rational(metrics.widthPixels, metrics.heightPixels)

    // Set up the view finder use case to display camera preview
    val viewFinderConfig = PreviewConfig.Builder().apply {
        setLensFacing(CameraX.LensFacing.FRONT)
        setTargetAspectRatio(screenAspectRatio)
        setTargetRotation(textureView.display.rotation)
    }.build()

    // Use the auto-fit preview builder to automatically handle size/orientation changes
    preview = AutoFitPreviewBuilder.build(viewFinderConfig, textureView)

    // Apply declared configs to CameraX using the same lifecycle owner
    CameraX.bindToLifecycle(viewLifecycleOwner, preview)
}

Weiterführende Aspekte

---

Autor: Kevin Stieglitz / Software Engineer / Business Division Automotive World

Android CameraX: Let’s take a selfie - jambit ToiletPaper

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen