Android 15 ra mắt tính năng Tăng cường ánh sáng yếu, một chế độ tự động phơi sáng mới dành cho cả Máy ảnh 2 và tiện ích máy ảnh ở chế độ ban đêm. Tăng cường ánh sáng yếu tự động điều chỉnh độ sáng của luồng Xem trước trong điều kiện ánh sáng yếu . Điều này khác với cách tiện ích máy ảnh ở chế độ ban đêm tạo ra vì chế độ ban đêm kết hợp hàng loạt ảnh để tạo thành một, hình ảnh nâng cao. Mặc dù chế độ ban đêm hoạt động rất hiệu quả để tạo hình ảnh tĩnh không thể tạo chuỗi khung hình liên tục nhưng tính năng Tăng cường ánh sáng yếu thì có thể. Do đó, Tính năng Cải tiến ánh sáng yếu hỗ trợ các tính năng mới của máy ảnh, chẳng hạn như:
- Cung cấp bản xem trước của hình ảnh nâng cao để người dùng có thể dễ dàng lấy khung hình hình ảnh thiếu sáng.
- Quét mã QR trong điều kiện ánh sáng yếu.
Nếu bạn bật tính năng Tăng cường ánh sáng yếu, tính năng này sẽ tự động bật khi có ánh sáng yếu mức ánh sáng và tắt khi có nhiều ánh sáng hơn.
Các ứng dụng có thể ghi hình ngoài luồng Xem trước trong điều kiện ánh sáng yếu để lưu được tăng độ sáng của video.
Bạn có thể dùng tính năng Cải tiến ánh sáng yếu trong Camera2 hoặc thông qua tiện ích máy ảnh. Tài liệu này trình bày cách sử dụng tính năng Tăng cường ánh sáng yếu bằng Camera2. Bạn cũng có thể sử dụng Cải thiện ánh sáng yếu bằng tiện ích máy ảnh Chế độ ban đêm nếu được hỗ trợ thiết bị.
Kiểm tra tình trạng còn hàng
Trước khi sử dụng tính năng Tăng cường ánh sáng yếu, hãy kiểm tra để đảm bảo thiết bị có hỗ trợ tính năng này. Nếu
có hỗ trợ tính năng Cải thiện ánh sáng yếu là một trong những chế độ phơi sáng có trong danh sách
camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
. (Ánh sáng yếu
Tăng sáng là chế độ cài đặt phơi sáng tự động riêng, vì các chế độ cài đặt phơi sáng tự động khác
không tương thích với chế độ làm sáng bản xem trước do tính năng Tăng cường ánh sáng yếu thực hiện.)
Vì vậy, để kiểm tra xem tính năng Tăng cường ánh sáng yếu có được hỗ trợ hay không, hãy gọi
CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
và kiểm tra xem các chế độ được trả về có bao gồm ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
hay không:
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 }
Bật tính năng Tăng cường ánh sáng yếu
Để bật tính năng Tăng cường ánh sáng yếu trong một phiên sử dụng Camera2, hãy đặt
CaptureRequest.CONTROL_AE_MODE
đến
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
. Sau khi làm như vậy, bạn cần
xác nhận rằng bạn đã bật tính năng Tăng cường ánh sáng yếu; bạn có thể làm điều này bằng cách kiểm tra
Trường CaptureResult.CONTROL_AE_MODE
. Bạn cần kiểm tra vì ánh sáng yếu
Tính năng tăng cường không tương thích với một số cấu hình máy ảnh. Ví dụ: tốc độ cao
Tính năng quay video không hỗ trợ tính năng Tăng cường ánh sáng yếu do những yếu tố cần cân nhắc về khung hình trên giây. Nếu
Tính năng Tăng cường ánh sáng yếu chưa bật, bạn có thể phải đổi máy ảnh
rồi thử lại.
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 );
Theo dõi tăng cường ánh sáng yếu
Tính năng Tăng cường ánh sáng yếu giúp tăng độ sáng của luồng xem trước trong điều kiện ánh sáng yếu, và
không có bất kỳ ảnh hưởng nào nếu môi trường đủ sáng để bình thường
chụp. Bạn có thể kiểm tra để xác nhận xem tính năng Tăng cường ánh sáng yếu có đang hoạt động hay không
trường CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
. Nếu bạn đã bật
Tính năng Tăng cường ánh sáng yếu đang bật và tính năng này đang hoạt động, trường được đặt thành
CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
.
Sau đó, bạn có thể hiển thị
biểu tượng mặt trăng hoặc một số chỉ báo khác cho biết bản xem trước đang được làm sáng.
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 );