מצב חשיפת אוטומטית עם הגברת התאורה החלשה

ב-Android 15 נוסף מצב חשיפה אוטומטית (AE) לשיפור הצילום בתאורה חלשה, מצב חשיפה אוטומטית חדש שזמין גם ב-Camera 2 וגם בתוסף המצלמה למצב לילה. מצב AE לשיפור התאורה החלשה מכוונן באופן אוטומטי את הבהירות של התצוגה המקדימה בתנאי תאורה חלשה. זה שונה מהאופן שבו התוסף למצלמה של מצב לילה יוצר תמונות סטילס, כי מצב לילה משלב רצף של תמונות כדי ליצור תמונה אחת משופרת. מצב לילה מתאים מאוד ליצירת תמונה סטטית, אבל הוא לא יכול ליצור רצף של פריימים. לעומת זאת, מצב AE לשיפור התאורה בתנאי תאורה חלשה יכול לעשות את זה. כך, מצב AE לשיפור התאורה החלשה מאפשר יכולות חדשות של המצלמה, כמו:

  • תצוגה מקדימה משופרת של התמונה, כדי שהמשתמשים יוכלו למסגר טוב יותר את התמונות בתאורה חלשה.
  • סריקת קודי QR בתאורה חלשה.

אם מפעילים את מצב AE לשיפור התאורה, הוא מופעל אוטומטית כשרמת התאורה נמוכה, ונכבה כשיש יותר אור.

אפליקציות יכולות להקליט מתוך סטרימינג של תצוגה מקדימה בתנאי תאורה חלשה כדי לשמור סרטון מואר.

אפשר להשתמש במצב AE לשיפור התאורה החלשה ב-Camera2 או באמצעות תוספי מצלמה. במסמך הזה מוסבר איך להשתמש במצב AE לשיפור התאורה בתנאים חשוכים באמצעות Camera2. אם המכשיר תומך בכך, אתם יכולים להשתמש גם במצב AE לשיפור התאורה החלשה עם תוסף המצלמה "מצב לילה".

בדיקת זמינות

לפני שמשתמשים במצב AE לשיפור התאורה, צריך לבדוק אם המכשיר תומך בו. אם התכונה זמינה, מצב AE של "הגברת התאורה" הוא אחד ממצבי החשיפה שמופיעים ב-camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (התכונה "שיפור התאורה" היא הגדרת חשיפה אוטומטית בפני עצמה, כי הגדרות אחרות של חשיפה אוטומטית לא תואמות להבהרת התצוגה המקדימה שמתבצעת במצב AE של "שיפור התאורה".)

כדי לבדוק אם מצב AE לשיפור התאורה החלשה זמין, מפעילים את הפונקציה 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 AE Mode (next section).
} else {
    // Proceed without Low Light Boost AE Mode.
}

הפעלת מצב AE לשיפור התאורה החלשה

כדי להפעיל את מצב החשיפה האוטומטית "שיפור בתאורה חלשה" בסשן של Camera2, מגדירים את CaptureRequest.CONTROL_AE_MODE לערך ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. אחרי שתעשו את זה, תצטרכו לוודא שהמצב Low Light Boost AE הופעל. כדי לעשות את זה, בודקים את השדה CaptureResult.CONTROL_AE_MODE. חשוב לבדוק את זה, כי אי אפשר להשתמש בשיפור האיכות בתאורה חלשה בכל הגדרות המצלמה. לדוגמה, הקלטה במהירות גבוהה לא תומכת במצב AE של הגברת התאורה החלשה, בגלל שיקולי FPS. אם מצב החשיפה האוטומטית "שיפור התאורה בתנאי תאורה חלשה" לא מופעל, יכול להיות שתצטרכו לשנות את הגדרות המצלמה ולנסות שוב.

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 AE mode set successfully.
            result.get(CaptureResult.CONTROL_AE_MODE) ==
                CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
        }
    },
    cameraHandler
)

מצב AE של הגברת התאורה החלשה במסך

מצב AE של "הגברת התאורה" מבהיר את שידור התצוגה המקדימה בתנאי תאורה חלשה, ואין לו השפעה אם הסביבה כבר בהירה מספיק לצילום רגיל. כדי לבדוק אם מצב החשיפה האוטומטית לשיפור התאורה בתנאי תאורה חלשה פעיל, בודקים את השדה CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. אם הפעלתם את מצב AE לשיפור התאורה וגם הוא פעיל כרגע, השדה מוגדר לערך CameraMetadata.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 AE Mode is active or inactive.
            if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
                CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
            ) {
                // Low Light Boost AE Mode state is active.
                // Show Moon Icon.
            } else {
                // Low Light Boost AE Mode state is inactive or AE mode is not set
                // to Low Light Boost AE Mode.
                // Hide Moon Icon.
            }
        }
    },
    cameraHandler
)