Zayıf Işıktan Güçlendirme

Android 15'te, hem Kamera 2 hem de gece modu kamera uzantısı için kullanılabilen yeni bir otomatik pozlama modu olan Düşük Işık Artırma özelliği kullanıma sunuldu. Zayıf Işık Artırma, loş ışık koşullarında Önizleme akışının parlaklığını otomatik olarak ayarlar. Bu, gece modu kamera uzantısının hareketsiz resimler oluşturmasından farklıdır. Çünkü gece modu, seri çekim fotoğrafları birleştirerek tek bir geliştirilmiş resim oluşturur. Gece modu, hareketsiz resim oluşturmak için çok iyi sonuç verir, ancak kesintisiz bir kare akışı oluşturamaz ancak Düşük Işık Artırması bunu yapabilir. Bu sayede Düşük Işık Artışı, aşağıdakiler gibi yeni kamera özelliklerini etkinleştirir:

  • Kullanıcıların düşük ışıkta çekilmiş resimlerini daha iyi çerçeveleyebilmeleri için gelişmiş bir resim önizlemesi sağlama.
  • QR kodları yetersiz ışıkta taranıyor.

Düşük Işık Artırma'yı etkinleştirirseniz düşük ışık seviyesi olduğunda otomatik olarak açılır ve daha fazla ışık olduğunda kapanır.

Uygulamalar, düşük ışık koşullarında Önizleme akışı dışında video kaydederek aydınlatılmış bir video kaydedebilir.

Düşük Işık Artırma'yı Kamera2'de veya kamera uzantıları üzerinden kullanabilirsiniz. Bu dokümanda, Düşük Işık Artırma özelliğinin Kamera2 ile nasıl kullanılacağı açıklanmaktadır. Düşük Işık Artırma'yı, cihaz tarafından destekleniyorsa Gece Modu kamera uzantısıyla da kullanabilirsiniz.

Müsaitlik durumunu kontrol edin

Düşük Işık Artırma'yı kullanmadan önce cihazda desteklendiğinden emin olun. Düşük Işık Artırma, kullanılabiliyorsa camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES sayfasında listelenen pozlama modlarından biridir. (Diğer otomatik pozlama ayarları Düşük Işık Artırma tarafından gerçekleştirilen önizleme parlaklığıyla uyumlu olmadığından Düşük Işık Artırma'nın kendi otomatik pozlama ayarıdır.)

Düşük Işık Artırma'nın kullanılabilir olup olmadığını kontrol etmek için CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) numaralı telefonu arayın ve döndürülen modlarda ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY olup olmadığını kontrol edin:

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
}

Düşük Işık Artışını etkinleştir

Camera2 oturumunda Düşük Işık Artırma'yı etkinleştirmek için CaptureRequest.CONTROL_AE_MODE değerini ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY olarak ayarlayın. Bunu yaptıktan sonra, Düşük Işık Artırma'nın açık olduğunu onaylamanız gerekir. Bunu, CaptureResult.CONTROL_AE_MODE alanını kontrol ederek yapabilirsiniz. Düşük Işık Artırma tüm kamera yapılandırmalarıyla uyumlu olmadığı için bunu kontrol etmeniz gerekir. Örneğin, yüksek hızlı kayıt, FPS ile ilgili hususlar nedeniyle Düşük Işık Artırma'yı desteklemez. Düşük Işık Artırma etkin değilse kamera yapılandırmasını değiştirip tekrar denemeniz gerekebilir.

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

Düşük Işık Artışını İzle

Düşük Işık Artırma, düşük ışık koşullarında önizleme akışının parlaklığını artırır ve ortam zaten normal çekim için yeterince parlaksa hiçbir etkisi olmaz. Düşük Işık Artırma'nın şu anda etkin olup olmadığını CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE alanını kontrol ederek doğrulayabilirsiniz. Düşük Işık Artırma'yı açtıysanız ve şu anda etkinse alan CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE olarak ayarlanır. Ardından bir ay simgesi veya önizlemenin parladığını belirten başka bir işaret görüntüleyebilirsiniz.

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