Hiển thị hình ảnh Ultra HDR

Định dạng hình ảnh Ultra HDR cho phép hình ảnh lưu trữ nhiều thông tin hơn về cường độ ánh sáng, giúp tạo ra các vùng sáng và bóng chi tiết hơn, đồng thời có màu sắc đậm hơn. Android hỗ trợ hình ảnh Ultra HDR kể từ Android 14 (API cấp 34). Nếu ứng dụng của bạn đang chạy trên các phiên bản đó, thì bạn phải định cấu hình ứng dụng để hiển thị những hình ảnh này đúng cách. Mặt khác, nếu ứng dụng của bạn không hiển thị hình ảnh Ultra HDR, thì bạn có thể tiết kiệm tài nguyên thiết bị bằng cách không bật màn hình Ultra HDR. Trang này giải thích cách kiểm tra xem nội dung đồ hoạ có hỗ trợ tính năng Ultra HDR hay không và cách hiển thị những hình ảnh đó đúng cách.

Hình đồ hoạ mô phỏng sự khác biệt giữa dải động chuẩn và dải động cao. Hình ảnh minh hoạ một phong cảnh bầu trời đầy mây. Nửa bên phải, mô phỏng HDR, có các vùng sáng sáng hơn, vùng tối tối hơn và màu sắc rõ ràng hơn.
Hình 1. Mô phỏng sự khác biệt giữa hình ảnh dải động chuẩn (SDR) và hình ảnh có dải động cao (HDR). Nếu thiết bị hỗ trợ HDR, hình ảnh có thể có vùng tối tối hơn và vùng sáng sáng hơn.

Kiểm tra sự hiện diện của bản đồ khuếch đại

Hình ảnh Ultra HDR chứa bản đồ thu thập. Bản đồ khuếch đại dùng để xác định độ sáng tăng của từng pixel trong hình ảnh. Để xác minh xem hình ảnh có ở định dạng Ultra HDR hay không, hãy chuyển đổi hình ảnh hoặc đối tượng có thể vẽ thành Bitmap rồi gọi Bitmap.hasGainMap() (có kể từ Android 14) để kiểm tra xem hình ảnh đó có bản đồ khuếch đại hay không.

Định cấu hình cửa sổ để hiển thị Ultra HDR

Để hiển thị hình ảnh Ultra HDR với dải động đầy đủ, hãy đặt chế độ màu của cửa sổ thành ActivityInfo.COLOR_MODE_HDR. Hãy thực hiện việc này bằng cách gọi phương thức setColorMode() của cửa sổ. (Các API này có trên Android 8; tuy nhiên, hình ảnh sẽ không hiển thị ở chế độ Ultra HDR trừ phi thiết bị đang chạy Android 14 trở lên.)

Kết hợp kiến thức đã học

Đoạn mã sau đây sẽ cho thấy toàn bộ quy trình. Mã này giả định một hình ảnh được tải vào Bitmap và kiểm tra xem hình ảnh đó có bản đồ khuếch đại hay không. Nếu có, mã sẽ chuyển chế độ màu của cửa sổ thành COLOR_MODE_HDR. Nếu hình ảnh không có bản đồ khuếch đại, mã sẽ chuyển cửa sổ sang chế độ màu mặc định.

Kotlin

val bitmap = /* Get Bitmap from Image Resource */
binding.imageContainer.setImageBitmap(bitmap)

// Set color mode of the activity to the correct color mode.
requireActivity().window.colorMode =
   if (bitmap.hasGainmap()) ActivityInfo.COLOR_MODE_HDR else ActivityInfo.COLOR_MODE_DEFAULT

Java

final Bitmap bitmap = /* Get Bitmap from Image Resource */
binding.imageContainer.setImageBitmap(bitmap);

// Set color mode of the activity to the correct color mode.
int colorMode = ActivityInfo.COLOR_MODE_DEFAULT;
if (bitmap.hasGainmap()) colorMode = ActivityInfo.COLOR_MODE_HDR;
requireActivity().getWindow().setColorMode(colorMode);

Tài nguyên khác

Để tìm hiểu thêm về hình ảnh Ultra HDR, hãy xem thêm các tài nguyên sau đây: