O Android 15 apresenta o Realce de pouca luz, um novo modo de exposição automática disponível para Câmera 2 e extensão de câmera do modo noturno. Intensificação de pouca luz ajusta automaticamente o brilho do stream de pré-visualização em ambientes com pouca luz pelas condições Isso é diferente de como a extensão da câmera do Modo noturno cria imagens estáticas, porque o modo noturno combina uma sequência de fotos para criar uma imagem melhorada. Embora o modo noturno funcione muito bem para criar imagens estáticas, ele não pode criar um stream contínuo de frames, mas o recurso Low Light Boost. Assim, O recurso Low Light Boost oferece novos recursos de câmera, como:
- Fornecendo uma visualização de imagem aprimorada para que os usuários possam enquadrar melhor seus fotos com pouca luz.
- Leitura de QR codes com pouca luz.
Se você ativar a "Realização de pouca luz", ela será ativada automaticamente quando houver nível de luz e é desligado quando há mais luz.
Os apps podem gravar fora do stream de pré-visualização em condições de pouca luz para salvar uma vídeo mais claro.
Você pode usar a otimização de pouca luz em Camera2 ou por extensões da câmera. Este documento aborda como usar a otimização de pouca luz com a Camera2. Você também pode usar Aumento de pouca luz com a extensão da câmera Modo noturno, se compatível com o dispositivo.
Conferir a disponibilidade
Antes de usar o recurso Pouca luz, verifique se ele é compatível com o dispositivo. Se for
está disponível, o recurso de Aumento de pouca luz é um dos modos de exposição listados
camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
(com pouca luz
Otimização é a própria configuração de exposição automática, já que outras configurações de exposição automática
não são compatíveis com o brilho da visualização realizado pela otimização de baixa iluminação.)
Portanto, para verificar se a Intensidade de pouca luz está disponível, chame
CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
e verifique se os modos retornados incluem 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 }
Ativar otimização de pouca luz
Para ativar a otimização de pouca luz em uma sessão da Camera2, defina
CaptureRequest.CONTROL_AE_MODE
para
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
Depois de fazer isso, você precisará
confirmar se a otimização de pouca luz foi ativada; você pode fazer isso verificando
CaptureResult.CONTROL_AE_MODE
. Você precisa verificar porque o modo pouca luz
A otimização não é compatível com todas as configurações de câmera. Por exemplo, alta velocidade
a gravação não é compatível com o Low Light Boost, por causa das considerações de QPS. Se
O recurso "Pouca luz" está desativado. Talvez seja necessário mudar a câmera.
e tente novamente.
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 );
Monitorar aumento de pouca luz
A Intensificação de baixa iluminação ilumina o stream de visualização em condições de pouca luz e
não terá efeito se o ambiente já estiver claro o suficiente para
capturar. Para confirmar se a "Otimização de pouca luz" está ativada no momento,
no campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
. Se você transformou
O recurso "Pouca luz" está ativado e está ativo, o campo é definido como
CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
.
Em seguida, você pode mostrar
ícone de lua ou alguma outra indicação de que a visualização está sendo iluminada.
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 );