تعزيز الإضاءة المنخفضة

يقدّم Android 15 ميزة تعزيز الإضاءة المنخفضة، وهو وضع جديد للإضاءة التلقائية يتوفّر لكل من الكاميرا 2 وإضافة الكاميرا في الوضع الليلي. تعمل ميزة "تعزيز الإضاءة المنخفضة" على ضبط سطوع بث المعاينة تلقائيًا في ظروف الإضاءة المنخفضة. ويختلف هذا عن الطريقة التي تنشئ بها إضافة الكاميرا في الوضع الليلي الصور الثابتة، لأن الوضع الليلي يجمع بين مجموعة من الصور لإنشاء صورة واحدة محسّنة. عندما يعمل الوضع الليلي بشكل جيد للغاية لإنشاء صورة ثابتة، لا يمكنه إنشاء تدفق مستمر من الإطارات، ولكن يمكن لميزة "تعزيز الإضاءة المنخفضة" إجراء ذلك. وبالتالي، توفّر ميزة "تعزيز الإضاءة المنخفضة" إمكانات جديدة للكاميرا، مثل ما يلي:

  • توفير معاينة محسّنة للصور، ليتمكّن المستخدمون من استخدام إطارات الصور ذات الإضاءة المنخفضة بشكل أفضل.
  • جارٍ مسح رموز الاستجابة السريعة ضوئيًا في الإضاءة المنخفضة.

إذا فعّلت ميزة "تعزيز الإضاءة المنخفضة"، يتم تشغيلها تلقائيًا عند انخفاض مستوى الإضاءة، ويتم إيقافها عند ارتفاع مستوى الإضاءة.

يمكن للتطبيقات تسجيل فيديو من بث المعاينة في ظروف الإضاءة المنخفضة لحفظ فيديو سطوع.

يمكنك استخدام ميزة "تعزيز الإضاءة المنخفضة" إما من خلال الكاميرا2 أو من خلال إضافات الكاميرا. يتناول هذا المستند كيفية استخدام ميزة "تعزيز الإضاءة المنخفضة" باستخدام تطبيق "كاميرا2". يمكنك أيضًا استخدام ميزة "تعزيز الإضاءة المنخفضة" مع إضافة "الوضع الليلي" في الكاميرا إذا كانت متوافقة مع الجهاز.

التحقّق من مدى التوفّر

قبل استخدام ميزة "تعزيز الإضاءة المنخفضة"، تأكَّد من أنّها متوافقة مع الجهاز. وتُعد ميزة "تعزيز الإضاءة المنخفضة" أحد أوضاع التعرّض للضوء الواردة في camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES، في حال توفّرها. (ميزة "تعزيز الإضاءة المنخفضة" هي إعداداتها الخاصة للتعرض التلقائي للضوء، لأنّ الإعدادات الأخرى الخاصة بالتعرض التلقائي غير متوافقة مع مستوى سطوع المعاينة الذي يتم تنفيذه من خلال ميزة "تعزيز الإضاءة المنخفضة").

لذلك، للتحقّق من توفّر ميزة "تعزيز الإضاءة المنخفضة"، يمكنك الاتصال بالرمز CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) والتحقّق مما إذا كانت الأوضاع التي تم إرجاعها تتضمّن 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
}

تفعيل ميزة "تعزيز الإضاءة المنخفضة"

لتفعيل ميزة "تعزيز الإضاءة المنخفضة" في جلسة تطبيق "كاميرا2"، اضبط CaptureRequest.CONTROL_AE_MODE على ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. بعد إجراء ذلك، عليك التأكّد من تفعيل ميزة "تعزيز الإضاءة المنخفضة"، ويمكنك إجراء ذلك من خلال وضع علامة في المربّع CaptureResult.CONTROL_AE_MODE. يجب التحقّق من ذلك لأنّ ميزة "تعزيز الإضاءة المنخفضة" غير متوافقة مع كل إعدادات الكاميرا. على سبيل المثال، لا يدعم التسجيل عالي السرعة ميزة "تعزيز الإضاءة المنخفضة"، بسبب اعتبارات عدد اللقطات في الثانية. في حال عدم تفعيل ميزة "تعزيز الإضاءة المنخفضة"، قد تحتاج إلى تغيير إعدادات الكاميرا وإعادة المحاولة.

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

مراقبة تعزيز الإضاءة المنخفضة

تعمل ميزة "تعزيز الإضاءة المنخفضة" على زيادة سطوع تدفق المعاينة في ظروف الإضاءة المنخفضة، وليس لها أي تأثير إذا كانت البيئة ساطعة بما يكفي للالتقاط العادي. يمكنك التأكّد مما إذا كانت ميزة "تعزيز الإضاءة المنخفضة" مفعَّلة حاليًا من خلال الاطّلاع على الحقل CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. إذا كانت ميزة "تعزيز الإضاءة المنخفضة" مفعَّلة وكانت مفعَّلة حاليًا، يتم ضبط الحقل على CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. قد تعرض بعد ذلك رمز القمر أو بعض الإشارات الأخرى إلى زيادة سطوع المعاينة.

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