Zayıf Işıktan Güçlendirme

Android 15'te Düşük Işık Artırma özelliği kullanıma sunuldu. Otomatik pozlama modu Hem Kamera 2 hem de gece modu kamera uzantısı. Düşük Işık Artışı Önizleme akışının parlaklığını loş ışıkta otomatik olarak ayarlar koşullar. Bu, gece modu kamera uzantısının oluşturma işleminden farklıdır. sabit resimler kullanır, çünkü gece modu birden fazla fotoğraftan birini geliştirilmiş resim. Gece modu hareketsiz görüntü oluşturmak için çok iyi çalışsa da, sürekli bir kare akışı oluşturamaz ancak Düşük Işık Artırma özelliği oluşturabilir. Böylece, Düşük Işık Artırma, aşağıdakiler gibi yeni kamera özellikleri sunar:

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

Düşük Işık Artırımı'nı etkinleştirirseniz düşük ışık olduğunda otomatik olarak açılır ve daha fazla ışık olduğunda söner.

Uygulamalar, düşük ışık koşullarında önizleme akışının dışında bir alan kaydederek parlaklaştırılmış video.

Zayıf Işık Artırma özelliğini Kamera2 uygulamasında veya kamera uzantıları. Bu dokümanda, Düşük Işık Artışı'nın Kamera2 ile nasıl kullanılacağı açıklanmaktadır. Ayrıca şunu da kullanabilirsiniz: tarafından destekleniyorsa Gece Modu kamera uzantısıyla Düşük Işık Artırma özelliği olanak tanır.

Müsaitlik durumunu kontrol edin

Düşük Işık Artışı'nı kullanmadan önce bu özelliğin cihazda desteklendiğinden emin olun. Eğer Düşük Işık Artışı, şurada listelenen pozlama modlarından biridir: camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (Zayıf Işık Diğer otomatik pozlama ayarları olduğundan Boost kendi otomatik pozlama ayarıdır tarafından gerçekleştirilen önizleme parlaklığıyla uyumlu değildir.)

Zayıf Işık Artışı'nın kullanılıp kullanılamadığını kontrol etmek için CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) ve döndürülen modların ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY içerip içermediğini 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ırma'yı etkinleştir

Camera2 oturumunda Düşük Işık Artışı'nı etkinleştirmek için şu ayarı yapın: CaptureRequest.CONTROL_AE_MODE - ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Bunu yaptıktan sonra, Düşük Işık Artırma'nın açık olduğunu onaylayın; bunu kontrol ederek CaptureResult.CONTROL_AE_MODE alanına giriş yapın. Düşük Işık nedeniyle kontrol etmeniz gerekiyor Güçlendirme tüm kamera yapılandırmalarıyla uyumlu değildir. Örneğin, yüksek hızlı kayıt, FPS ile ilgili nedenlerden dolayı Düşük Işık Artırma özelliğini desteklemiyor. Eğer Düşük Işık Artırımı açık değil, kamerayı değiştirmeniz gerekebilir yapılandırıp tekrar deneyin.

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ı izle

Düşük Işık Artışı, düşük ışık koşullarında önizleme akışının parlaklığını artırır ve ortam normal kalabilecek kadar aydınlıksa hiç bir etkisi olmaz. yakalamanız gerekir. Düşük Işık Artırmanın şu anda etkin olup olmadığını kontrol ederek onaylayabilirsiniz CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE alanına girin. Projeyi Düşük Işık Artırımı açık ve şu anda etkin durumdaysa alan CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Daha sonra bu kişilere önizlemenin parlak olduğunu belirten ay simgesi veya başka bir gösterge.

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