Mit Android 15 wurde die Funktion Optimierung bei wenig Licht eingeführt, ein neuer Modus für die automatische Belichtung Kamera 2 und die Kameraerweiterung für den Nachtmodus verwenden. Booster für wenig Licht Passt die Helligkeit des Vorschau-Streams bei wenig Licht automatisch an . Dies unterscheidet sich von der Art und Weise, wie die Kameraerweiterung für den Nachtmodus da der Nachtmodus eine Reihe von Fotos zu einer einzelnen, optimiertes Bild. Der Nachtmodus eignet sich gut zur Erstellung von Standbildern, kann keinen kontinuierlichen Frame-Stream erstellen, die Funktion für wenig Licht hingegen schon. Das heißt: Die Funktion „Modus für wenig Licht“ ermöglicht neue Kamerafunktionen, darunter:
- Bereitstellung einer optimierten Bildvorschau, damit Nutzer ihre Bilder besser bei schlechten Lichtverhältnissen.
- QR-Codes werden bei wenig Licht gescannt.
Wenn du die Funktion „Boost für wenig Licht“ aktivierst, wird sie bei schlechten Lichtverhältnissen Helligkeit und schaltet sich bei mehr Licht aus.
Apps können bei wenig Licht Aufnahmen aus dem Vorschaustream machen, um einen aufhellendes Video.
Die Optimierung für wenig Licht kann entweder in der Kamera2 oder im Kameraerweiterungen. In diesem Dokument wird beschrieben, wie die Optimierung für wenig Licht mit Camera2 verwendet wird. Sie können auch „Modus für wenig Licht“ mit der Kameraerweiterung „Nachtmodus“ aktivieren, wenn sie vom .
Verfügbarkeit prüfen
Prüfen Sie vor der Verwendung der Funktion für wenig Licht, ob sie von Ihrem Gerät unterstützt wird. Wenn es
ist „Optimierung für wenig Licht“ einer der Belichtungsmodi, die in
camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
(Wenig Licht)
Die Verstärkung ist eine eigene automatische Belichtungseinstellung, da andere
sind nicht mit der Vorschau-Aufhellung kompatibel, die von der Optimierung für wenig Licht durchgeführt wird.)
Wenn Sie prüfen möchten, ob die Funktion „Optimierung für wenig Licht“ verfügbar ist, rufen Sie
CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
und prüfen Sie, ob die zurückgegebenen Modi ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
enthalten:
Kotlin
val characteristics = cameraManager.getCameraCharacteristics(cameraId) val autoExposureModes = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)!! val lowLightBoostSupported = autoExposureModes.contains( CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY) if (lowLightBoostSupported) { // Enable Low Light Boost (next section) } else { // Proceed without Low Light Boost }
Java
CameraCharacteristics characteristics = mCameraManager.getCameraCharacteristics(cameraId); int[] autoExposureModes = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES); boolean lowLightBoostSupported = autoExposureModes.contains( CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY); if (lowLightBoostSupported) { // Enable Low Light Boost (next section) } else { // Proceed without Low Light Boost }
„Boost für wenig Licht“ aktivieren
Um die Funktion für wenig Licht in einer Camera2-Sitzung zu aktivieren,
CaptureRequest.CONTROL_AE_MODE
bis
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
Anschließend müssen Sie
Prüfen, ob die Optimierung für wenig Licht aktiviert ist können Sie dies tun, indem Sie
CaptureResult.CONTROL_AE_MODE
-Feld. Das musst du überprüfen, da wenig Licht
Die Optimierung ist nicht mit allen Kamerakonfigurationen kompatibel. Zum Beispiel sind hohe Geschwindigkeiten
wird die Optimierung bei wenig Licht aus Gründen der FPS nicht unterstützt. Wenn
Die Funktion „Optimierung für wenig Licht“ ist nicht aktiviert. Möglicherweise musst du die Kamera wechseln.
und versuchen Sie es noch einmal.
Kotlin
val captureRequestBuilder = camera.createCaptureRequest( CameraDevice.TEMPLATE_PREVIEW) if (isLowLightBoostAvailable(cameraId)) { captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY ) } // other capture request params session.setRepeatingRequest( captureRequestBuilder.build(), object : CaptureCallback() { @Override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) { // verify Low Light Boost AE mode set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY } }, cameraHandler )
Java
CaptureRequest.Builder captureRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); if (isLowLightBoostAvailable(cameraId)) { captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY); } // other capture request params mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // verify Low Light Boost AE mode set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY; } }, mCameraHandler );
„Booster bei wenig Licht“ im Blick behalten
Mit dieser Funktion wird die Vorschau des Streams bei wenig Licht aufgehellt.
Hat keine Auswirkung, wenn die Umgebung bereits hell genug für normale Lichtverhältnisse ist.
aufnehmen. Ob die Funktion „Optimierung für wenig Licht“ derzeit aktiviert ist, sehen Sie an
Das Feld CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
Wenn Sie
die Funktion „Boost für wenig Licht“ aktiviert und derzeit aktiv ist, ist das Feld auf
CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
Daraufhin wird eine
oder ein anderer Hinweis darauf, dass die Vorschau aufgehellt wird.
Kotlin
session.setRepeatingRequest( captureRequestBuilder.build(), object : CaptureCallback() { @Override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) { // check if Low Light Boost is active or inactive if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) { // Low Light Boost state is active // Show Moon Icon } else { // Low Light Boost state is inactive or AE mode is not set // to Low Light Boost // Hide Moon Icon } } }, cameraHandler )
Java
mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // check if Low Light Boost is active or inactive if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) { // Low Light Boost state is active // Show Moon Icon } else { // Low Light Boost state is inactive or AE mode is not set // to Low Light Boost // Hide Moon Icon } } }, mCameraHandler );