Android 15 wprowadza Mocne światło – nowy tryb automatycznej ekspozycji dostępny zarówno w Aparacie 2, jak i w rozszerzeniu do aparatu w trybie nocnym. Funkcja słabego oświetlenia automatycznie reguluje jasność strumienia podglądu przy słabym oświetleniu. Różni się to od sposobu, w jaki rozszerzenie do aparatu w trybie nocnym tworzy obrazy nieruchome, ponieważ tryb nocny łączy serię zdjęć w jedno ulepszone zdjęcie. Tryb nocny sprawdza się bardzo dobrze przy nagrywaniu nieruchomych obrazów, ale nie umożliwia tworzenia ciągłego strumienia klatek, ale funkcja słabego oświetlenia jest dostępna. Funkcja słabego oświetlenia pozwala korzystać z nowych funkcji aparatu, takich jak:
- Funkcja ulepszonego podglądu obrazu, dzięki której użytkownicy mogą lepiej wykadrować zdjęcia w słabym oświetleniu.
- Skanuję kody QR przy słabym oświetleniu.
Jeśli włączysz funkcję słabego oświetlenia, będzie się ona automatycznie włączać przy słabym oświetleniu i wyłączać, gdy jest więcej światła.
Aplikacje mogą nagrywać filmy w trybie „Podgląd” przy słabym oświetleniu.
Ulepszonego oświetlenia możesz używać w aplikacji Camera2 lub za pomocą rozszerzeń kamery. Z tego dokumentu dowiesz się, jak korzystać z funkcji słabego oświetlenia w aplikacji Aparat 2. Z funkcji słabego oświetlenia możesz też korzystać z rozszerzeniem aparatu w trybie nocnym, jeśli jest ono obsługiwane przez urządzenie.
Sprawdź dostępność
Zanim zaczniesz korzystać z funkcji słabego oświetlenia, sprawdź, czy urządzenie ją obsługuje. Jeśli jest dostępna, wzmacnianie słabego oświetlenia jest jednym z trybów ekspozycji wymienionych w artykule camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
. (Wzmocnienie słabego oświetlenia to własne ustawienie automatycznej ekspozycji, ponieważ inne ustawienia automatycznej ekspozycji są niezgodne z rozjaśnieniem w podglądzie za pomocą funkcji Low Light Boost).
Aby sprawdzić, czy funkcja słabego oświetlenia jest dostępna, wywołaj metodę CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
i sprawdź, czy zwracane tryby obejmują ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
:
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 }
Włącz wzmacnianie słabego oświetlenia
Aby włączyć wzmocnienie słabego oświetlenia w sesji Aparatu 2, ustaw w polu CaptureRequest.CONTROL_AE_MODE
wartość ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
. Następnie musisz sprawdzić, czy funkcja słabego oświetlenia została włączona. Aby to zrobić, sprawdź pole CaptureResult.CONTROL_AE_MODE
. Musisz to sprawdzić, ponieważ funkcja Wzmocnienie słabego oświetlenia nie jest zgodna ze wszystkimi konfiguracjami kamer. Na przykład szybkie nagrywanie nie obsługuje funkcji słabego oświetlenia z powodu liczby klatek na sekundę. Jeśli funkcja Ulepszona jasność nie jest włączona, być może musisz zmienić konfigurację kamery i spróbować jeszcze raz.
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 );
Monitorowanie słabego oświetlenia
Funkcja słabego oświetlenia rozjaśnia podgląd strumienia przy słabym oświetleniu i nie ma żadnego efektu, jeśli otoczenie jest już wystarczająco jasne, by można było robić zdjęcia. Aby sprawdzić, czy funkcja słabego oświetlenia jest obecnie aktywna, sprawdź pole CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
. Jeśli ta funkcja jest włączona i jest obecnie aktywna, pole ma wartość CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
.
Może to być ikona księżyca
lub inny rodzaj rozjaśniania podglądu.
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 );