Tăng cường ánh sáng yếu

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 2tiệ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 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
);