Android 15 เปิดตัวการเพิ่มแสงน้อย ซึ่งเป็นโหมดการรับแสงอัตโนมัติแบบใหม่ที่มีให้ใช้งาน ทั้งกล้อง 2 และส่วนขยายกล้องในโหมดกลางคืน การเพิ่มแสงในสภาวะแสงน้อย ปรับความสว่างของสตรีมตัวอย่างในสภาวะแสงน้อยโดยอัตโนมัติ ซึ่งแตกต่างจากวิธีที่ส่วนขยายกล้องโหมดกลางคืนสร้าง เพราะโหมดกลางคืนจะรวมภาพถ่ายอัจฉริยะเข้าด้วยกันเพื่อสร้างเป็นภาพถ่ายเดี่ยว รูปภาพที่ปรับปรุงคุณภาพแล้ว แม้โหมดกลางคืนจะได้ผลดีมากสำหรับการสร้างภาพนิ่ง ไม่สามารถสร้างสตรีมเฟรมอย่างต่อเนื่อง แต่การเพิ่มแสงน้อยได้ ดังนั้น การเพิ่มแสงน้อยช่วยให้กล้องมีความสามารถใหม่ๆ ดังตัวอย่างต่อไปนี้
- ให้การแสดงตัวอย่างรูปภาพที่ปรับปรุงแล้ว เพื่อให้ผู้ใช้สามารถจัดเฟรมภาพได้ดีขึ้น ภาพในสภาวะแสงน้อย
- กำลังสแกนคิวอาร์โค้ดในที่ที่มีแสงน้อย
หากคุณเปิดใช้การเพิ่มในสภาวะแสงน้อย จะเป็นการเปิดโดยอัตโนมัติเมื่อโหมดแสงน้อย ระดับแสง และจะปิดเมื่อมีแสงสว่างมากขึ้น
แอปสามารถบันทึกสตรีมตัวอย่างในสภาพแสงน้อยเพื่อบันทึก เป็นวิดีโอที่สว่างขึ้น
คุณสามารถใช้การเพิ่มในสภาวะแสงน้อยได้ในกล้อง 2 หรือผ่าน ส่วนขยายกล้อง เอกสารนี้ครอบคลุมถึงวิธีใช้การเพิ่มแสงน้อยด้วย Camera2 คุณยังสามารถใช้ การเพิ่มแสงน้อยโดยใช้ส่วนขยายกล้องในโหมดกลางคืนหากระบบรองรับ อุปกรณ์
ตรวจสอบห้องว่าง
ก่อนใช้การเพิ่มแสงน้อย ให้ตรวจสอบว่าระบบรองรับฟีเจอร์นี้ในอุปกรณ์ หากเป็น
โหมดแสงน้อยคือโหมดการรับแสงอย่างหนึ่งที่แสดงอยู่ใน
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 }
เปิดการเพิ่มแสงน้อย
หากต้องการเปิดใช้การเพิ่มในสภาวะแสงน้อยในเซสชัน Camera2 ให้ตั้งค่า
CaptureRequest.CONTROL_AE_MODE
ถึง
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
หลังจากนั้น คุณจะต้อง
ตรวจสอบว่าได้เปิดการเพิ่มแสงน้อยแล้ว คุณสามารถทำได้โดยทำเครื่องหมายที่
CaptureResult.CONTROL_AE_MODE
คุณต้องตรวจสอบเนื่องจากแสงน้อย
Boost ใช้ไม่ได้กับการกำหนดค่ากล้องบางอย่าง เช่น ความเร็วสูง
การบันทึกไม่รองรับการเพิ่มสภาวะแสงน้อย เนื่องจากการพิจารณา FPS ถ้า
ไม่ได้เปิดฟีเจอร์ลดแสงน้อย คุณอาจต้องเปลี่ยนกล้อง
การกำหนดค่าแล้วลองอีกครั้ง
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 );