Android 15 wprowadza Wzmocnienie słabego oświetlenia – nowy tryb automatycznej ekspozycji dostępny Aparat 2 i rozszerzenie aparatu do trybu nocnego. Słabe oświetlenie automatycznie reguluje jasność strumienia podglądu przy słabym oświetleniu warunków. Różni się to od tworzenia przez rozszerzenie aparatu w trybie nocnym zdjęć, ponieważ w trybie nocnym są one łączone w jeden, ulepszony obraz. Choć tryb nocny bardzo dobrze sprawdza się w tworzeniu nieruchomych zdjęć, nie może utworzyć ciągłego strumienia klatek, ale funkcja słabego oświetlenia może to zrobić. W związku z tym: Słabe oświetlenie umożliwia korzystanie z nowych funkcji aparatu, takich jak:
- Udoskonalony podgląd obrazu pozwala użytkownikom lepiej wykadrować robionych w słabym świetle.
- Skanuję kody QR przy słabym oświetleniu.
Jeśli włączysz tryb słabego oświetlenia, włączy się on automatycznie przy słabym oświetleniu poziomem światła i wyłącza się, gdy pojawi się więcej światła.
Aplikacje mogą nagrywać strumienie w wersji testowej przy słabym oświetleniu, aby zaoszczędzić wideo jest rozjaśnione.
Wzmocnienia słabego oświetlenia możesz włączyć w Aparacie2 lub rozszerzeniach aparatu. Z tego dokumentu dowiesz się, jak korzystać z funkcji słabego oświetlenia w aplikacji Camera2. Możesz też użyć Wzmocnienie słabego oświetlenia za pomocą rozszerzenia aparatu w trybie nocnym, jeśli jest ono obsługiwane urządzenia.
Sprawdź dostępność
Zanim zaczniesz korzystać z funkcji słabego oświetlenia, sprawdź, czy urządzenie ją obsługuje. Jeśli jest
Słabe oświetlenie jest jednym z trybów ekspozycji wymienionych
camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
(Słabe oświetlenie
Boost to własne ustawienie automatycznej ekspozycji, ponieważ inne ustawienia automatycznej ekspozycji
są niezgodne z rozjaśnieniem w podglądzie obsługiwanym przez funkcję Słabe oświetlenie).
Aby sprawdzić, czy funkcja Wzmocnienie oświetlenia jest dostępna, wywołaj
CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
i sprawdź, czy zwrócone 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 tryb słabego oświetlenia
Aby włączyć Słabe oświetlenie podczas sesji w Aparacie2, ustaw:
CaptureRequest.CONTROL_AE_MODE
do
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
Następnie wykonaj
Sprawdź, czy Wzmocnienie słabego oświetlenia jest włączone. możesz to zrobić, sprawdzając
CaptureResult.CONTROL_AE_MODE
. Musisz sprawdzić ze względu na słabe oświetlenie
Wzmocnienie nie jest zgodne ze wszystkimi konfiguracjami aparatu. Na przykład szybkie
Wzmocnienie słabego oświetlenia nie jest obsługiwane ze względu na liczbę klatek na sekundę. Jeśli
Wzmocnienie słabego oświetlenia nie jest włączone. Może być konieczna zmiana aparatu
i spróbuj ponownie.
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 );
Wzmocnienie słabego oświetlenia
Wzmocnienie słabego oświetlenia rozjaśnia strumień podglądu przy słabym oświetleniu.
nie ma żadnego efektu, jeśli otoczenie jest już wystarczająco jasne
zdjęcia. Aby sprawdzić, czy funkcja Słabe oświetlenie jest obecnie aktywna, zaznacz
w polu CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
. Jeśli włączysz funkcję
Słabe oświetlenie włączone i obecnie aktywne, pole jest ustawione na
CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
.
Możesz wtedy wyświetlić
ikonę księżyca lub inną wskazówkę, że podgląd jest rozjaśniany.
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 );