تقویت نور کم

اندروید 15 کم نور ، یک حالت نوردهی خودکار جدید را معرفی می کند که هم برای دوربین 2 و هم برای پسوند دوربین حالت شب در دسترس است. Low Light Boost به طور خودکار روشنایی جریان پیش نمایش را در شرایط کم نور تنظیم می کند. این با نحوه ایجاد تصاویر ثابت توسط پسوند دوربین حالت شب متفاوت است، زیرا حالت شب مجموعه ای از عکس ها را برای ایجاد یک تصویر واحد و پیشرفته ترکیب می کند. در حالی که حالت شب برای ایجاد یک تصویر ثابت بسیار خوب عمل می کند، نمی تواند یک جریان مداوم از فریم ها ایجاد کند، اما Low Light Boost می تواند. بنابراین، Low Light Boost قابلیت‌های دوربین جدیدی مانند موارد زیر را فعال می‌کند:

  • ارائه یک پیش‌نمایش تصویر پیشرفته، بنابراین کاربران بهتر می‌توانند عکس‌های خود را در نور کم قاب کنند.
  • اسکن کدهای QR در نور کم

اگر Low Light Boost را فعال کنید، هنگامی که سطح نور کم باشد به طور خودکار روشن می شود و زمانی که نور بیشتر باشد خاموش می شود.

برنامه‌ها می‌توانند جریان پیش‌نمایش را در شرایط کم‌نور ضبط کنند تا یک ویدیوی روشن را ذخیره کنند.

می توانید از Low Light Boost در Camera2 یا از طریق افزونه های دوربین استفاده کنید. این سند نحوه استفاده از Low Light Boost با Camera2 را پوشش می دهد. در صورتی که دستگاه پشتیبانی می‌کند، می‌توانید از تقویت نور کم با پسوند دوربین حالت شب استفاده کنید.

در دسترس بودن را بررسی کنید

قبل از استفاده از Low Light Boost، بررسی کنید که در دستگاه پشتیبانی می‌شود. اگر در دسترس باشد، Low Light Boost یکی از حالت‌های نوردهی فهرست شده در camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES است. (تقویت نور کم، تنظیم نوردهی خودکار خودش است، زیرا سایر تنظیمات نوردهی خودکار با روشن‌سازی پیش‌نمایش انجام‌شده توسط کم‌نور تقویت‌کننده سازگار نیستند.)

بنابراین، برای بررسی اینکه آیا تقویت نور کم در دسترس است، با CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) تماس بگیرید و بررسی کنید که آیا حالت‌های بازگشتی شامل ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY هستند یا خیر:

کاتلین

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
}

جاوا

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
}

تقویت نور کم را فعال کنید

برای فعال کردن افزایش نور کم در جلسه Camera2، CaptureRequest.CONTROL_AE_MODE را روی ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY تنظیم کنید. پس از انجام این کار، باید تأیید کنید که Low Light Boost روشن شده است. می توانید این کار را با بررسی فیلد CaptureResult.CONTROL_AE_MODE انجام دهید. باید بررسی کنید زیرا Low Light Boost با تمام تنظیمات دوربین سازگار نیست. به عنوان مثال، ضبط با سرعت بالا به دلیل ملاحظات FPS از تقویت نور کم پشتیبانی نمی کند. اگر Low Light Boost روشن نیست، ممکن است لازم باشد پیکربندی دوربین را تغییر دهید و دوباره امتحان کنید.

کاتلین

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
)

جاوا

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

تقویت نور کم مانیتور

Low Light Boost جریان پیش‌نمایش را در شرایط کم نور روشن می‌کند و اگر محیط از قبل به اندازه کافی برای گرفتن عکس معمولی روشن باشد، تأثیری ندارد. با بررسی فیلد CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE ، می‌توانید تأیید کنید که Low Light Boost در حال حاضر فعال است یا خیر. اگر Low Light Boost را روشن کرده‌اید و در حال حاضر فعال است، فیلد روی CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE تنظیم می‌شود.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. سپس ممکن است یک نماد ماه یا نشانه دیگری از روشن شدن پیش نمایش را نشان دهید.

کاتلین

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
)

جاوا

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