Wzmocnienie słabego oświetlenia

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
);