ב-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
:
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 AE Mode (next section) } else { // Proceed without Low Light Boost AE Mode }
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 AE Mode (next section) } else { // Proceed without Low Light Boost AE Mode }
הפעלת מצב AE עם הגברת התאורה החלשה
כדי להפעיל את מצב AE לשיפור התאורה הנמוכה בסשן של Camera2, מגדירים את CaptureRequest.CONTROL_AE_MODE
לערך ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
. לאחר מכן, צריך לוודא שמצב ה-AE לשיפור התמונה בתאורה חלשה מופעל. כדי לעשות זאת, מסמנים את השדה CaptureResult.CONTROL_AE_MODE
. צריך לבדוק כי התכונה 'שיפור תמונה בתאורה נמוכה' לא תואמת לכל הגדרות המצלמה. לדוגמה, אי אפשר להשתמש במצב AE עם הגברת התאורה החלשה בצילום במהירות גבוהה בגלל שיקולים של FPS. אם מצב ה-AE לשיפור התמונה בתאורה נמוכה לא מופעל, יכול להיות שתצטרכו לשנות את הגדרות המצלמה ולנסות שוב.
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 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 AE mode set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY; } }, mCameraHandler );
מעקב אחר מצב AE עם הגברת התאורה החלשה
מצב AE לשיפור התמונה בתאורה חלשה מאיר את מקור הווידאו בתצוגה המקדימה בתנאים של תאורה חלשה, ואין לו השפעה אם הסביבה כבר מספיק מוארת לצילום רגיל. כדי לבדוק אם מצב ה-AE לשיפור התמונה בתאורה נמוכה פעיל כרגע, בודקים את השדה CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
.
אם הפעלתם את מצב ה-AE לשיפור התמונה בתאורה חלשה וגם הוא פעיל כרגע, השדה מוגדר לערך 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 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 )
Java
mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // 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 } } }, mCameraHandler );