Android 15 presenta el aumento en condiciones de poca luz, un nuevo modo de exposición automática disponible para la Cámara 2 y la extensión de la cámara del modo nocturno. Aumento con poca luz Ajusta automáticamente el brillo de la transmisión de la vista previa con poca luz. condiciones. Esto es diferente de cómo la extensión de cámara del modo nocturno crea imágenes fijas, porque el modo nocturno combina una ráfaga de fotos para crear una con una imagen mejorada. Si bien el modo nocturno funciona muy bien para crear una imagen estática, no puede crear un flujo continuo de fotogramas, pero el aumento con poca luz sí puede hacerlo. Por lo tanto, La potencia para poca luz habilita nuevas funciones de la cámara, como las siguientes:
- Proporcionar una vista previa mejorada de la imagen, para que los usuarios puedan enmarcar mejor sus fotos con poca luz.
- Escanea códigos QR con poca luz.
Si habilitas la función Refuerzo con poca luz, se activará automáticamente cuando haya poca luz nivel de luz y se apaga cuando hay más luz.
Las apps pueden grabar fuera de la transmisión de vista previa en condiciones de poca luz para guardar una video iluminado.
Puedes usar la función Potenciación con poca luz en Cámara2 o mediante extensiones de cámara. En este documento, se explica cómo usar la amplificación con poca luz con Camera2. También puedes usar Amplificación por poca luz con la extensión de la cámara en Modo nocturno si es compatible con dispositivo.
Comprueba la disponibilidad
Antes de usar la función Potenciación con poca luz, comprueba que sea compatible con el dispositivo. Si es
disponible, el aumento de luz tenue es uno de los modos de exposición que se enumeran en
camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
(Luz baja
Potenciador es su propio parámetro de configuración de exposición automática, ya que otros parámetros de configuración de exposición automática
no son compatibles con el brillo de la vista previa que se realiza con el aumento con poca luz).
Por lo tanto, para comprobar si la función Potenciación con poca luz está disponible, llama
CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
y verifica si los modos mostrados incluyen 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 }
Habilitar realce de poca luz
Para habilitar la potencia con poca luz en una sesión de Camera2, configura
CaptureRequest.CONTROL_AE_MODE
a
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
Después de hacerlo, deberás
confirma que se haya activado la función Poca luz. Para ello, revisa el
CaptureResult.CONTROL_AE_MODE
. Debes comprobarlo porque Poca luz
Boost no es compatible con todas las configuraciones de la cámara. Por ejemplo, alta velocidad
la grabación no es compatible con el aumento de poca luz debido a consideraciones de FPS. Si
Potenciación por poca luz no activada, es posible que debas cambiar la cámara
configuración y vuelve a intentarlo.
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 );
Supervisa el aumento de poca luz
La mejora con poca luz ilumina la transmisión de vista previa en condiciones de poca luz.
no tiene ningún efecto si el entorno ya es lo suficientemente luminoso para
para cada captura. Para confirmar si la función Refuerzo por poca luz está activo, revisa lo siguiente:
el campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
Si convertiste
Amplificación con poca luz activado y está activo en este momento, el campo se establece en
CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
Luego, puedes mostrar
el ícono de luna o alguna otra indicación de que se ilumina la vista previa.
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 );