Android 8.1 以上版本支援色彩管理,可為各種顯示技術提供一致的體驗。在 Android 上執行的應用程式可以存取廣色域螢幕的完整功能,充分發揮螢幕裝置的效用。
先前的 Android 版本不支援色彩管理,而是依賴內容和螢幕的相容性 (這通常是電視產業的目標)。不過,近期的螢幕技術可支援更大的色域,但這類螢幕無法如預期顯示現有內容。搭載 Android 8.1 以上版本的裝置若使用廣色域螢幕 (例如主動矩陣有機發光二極體或 AMOLED,以及部分 LCD),就能在應用程式中觀看廣色域內容。
確認裝置支援
搭載 Android 8.1 以上版本的裝置若配備廣色域螢幕,應支援色彩管理 (廣色域)。啟用這項功能前,請確認裝置符合下列需求:
- 裝置螢幕符合硬體需求,包括支援 Display-P3 色域的特徵化螢幕。如果螢幕不符合這項規定,請勿啟用色彩管理功能。為減少 CPU 和 GPU 的影響,建議在顯示管線中支援擴展 sRGB 和 HDR10。
 - 裝置支援原廠校正程序,可產生校正資料 (儲存在裝置上),以因應螢幕行為的製造差異。校正資料至少應能讓螢幕準確顯示 sRGB 內容,以及 D65 和 D73 白點。
 
符合上述條件後,即可為裝置啟用色彩管理功能。
導入色彩管理
如要實作色彩管理,請先更新 Hardware Composer 2 (HWC2) 驅動程式,瞭解色彩模式並將這些模式套用至硬體。具體來說,HWC2 合成器必須使用 HWCDisplay::GetColorModes 回報 Display-P3 和 sRGB 色彩模式。
接著,啟用必要的 OpenGL 擴充功能和程式庫支援,將 OpenGL 色域轉換為 HAL 資料空間。必要的 OpenGL 擴充功能包括:
- 
EGL_EXT_pixel_format_float。 允許應用程式建立可呈現的 EGLSurface,並使用 16 位元浮點顏色元件。優先順序:高 (預期這是支援廣色域的應用程式預設的像素格式)。需要驅動程式支援。 - 
EGL_KHR_gl_colorspace。 對於想要使用 sRGB 格式預設緩衝區,更輕鬆地在顯示裝置上實現 sRGB 算繪的應用程式,這項擴充功能可建立 EGLSurface,以便在支援該功能的 OpenGL 環境中以 sRGB 算繪。需要驅動程式支援 sRGB 行為。 
Android 也提供下列選用擴充功能:
- 
EGL_EXT_colorspace_scrgb_linear。 這項擴充功能提供新的色域選項 scRGB,應用程式可以在建立 EGLSurface 時選擇這個選項。scRGB 色域定義的線性顯示參照空間,與 sRGB 具有相同的白點和原色 (因此可與 sRGB 向下相容)。這項功能不應需要驅動程式支援,且可在 Android EGL 包裝函式中實作。如要發揮作用,這項擴充功能必須支援 16 位元浮點數 (FP16)。 - 
EGL_EXT_gl_colorspace_display_p3和EGL_EXT_gl_colorspace_display_p3_linear。對於想要使用 Display-P3 格式預設緩衝區,更輕鬆地在顯示裝置上實現 sRGB 算繪的應用程式,這個擴充功能可建立 EGLSurface,並由支援該功能的 OpenGL 情境以 Display-P3 格式算繪。這項功能可在 EGL 驅動程式包裝函式中實作。 - 
VK_EXT_swapchain_colorspace(Vulkan)。讓應用程式使用色彩空間標記交換鏈。包括 DCI-P3、Display-P3、AdobeRGB 和 BT2020 等常見色域。 
自訂
您可以納入對各種色彩標準 (例如 DCI-P3、AdobeRGB、Rec709 和 Rec2020) 的支援,自訂色彩管理功能。其他自訂項目包括:
- 在螢幕管道中支援色彩轉換的硬體。支援硬體中的多個色彩轉換。
 - 支援在多個圖層上進行獨立的色彩轉換 (例如,部分圖層可以是 sRGB,其他圖層則為擴展 sRGB,每個圖層都有自己的色彩管道)。如果顯示多個色彩空間,部分色彩空間必須轉換為螢幕的色彩空間。理想情況下,這項轉換作業最好由螢幕引擎提供 (否則 Android 必須執行 GPU 合成)。
 
測試
如要測試色彩管理功能,請在 opengl/tests 中使用下列資源:
gl2_basic是簡單的 OpenGL 示範,會要求 Display-P3 色域。- 
EGL_test測試必要的擴充功能和設定支援 (10:10:10:2 和 FP16)。 test_wide_color會以與 SurfaceFlinger 相同的方式建立表面 (例如設定、色彩空間和像素格式)。
參考實作
如需參考實作方式,請參閱 frameworks/native。如需標題相關資訊,請參閱:
system/core/include/system/graphics.hsystem/core/include/system/graphics-base.hHAL_DATASPACE_*HAL_COLOR_MODE_*