Android 螢幕截圖中的 HDR

自從推出高動態範圍 (HDR) 影片後,串流服務已開始串流 HDR 影片,並著重於全螢幕體驗。近期,社群媒體應用程式已推出 HDR 影片和 Ultra HDR 支援功能,顯示各式應用程式對 HDR 採用率的興趣日益增加。

Android 支援 HDR

以下是 Android 多年來支援 HDR 技術的里程碑:

Android 7

  • 初步支援 HDR 影片解碼和顯示功能。
  • 持續改善 HDR 功能。

Android 13

Android 14

支援 HDR 的螢幕截圖功能也不斷演進,並在多年後經歷了許多變化。

HDR 螢幕截圖功能的進展

本節將追蹤 HDR 螢幕截圖功能在近期 Android 更新中的進展。

Android 9

Android 的圖形合成器 SurfaceFlinger 推出 HDR 影片支援功能。複雜的多項式色調對應器支援 GPU 算繪 HDR 影片和螢幕截圖。這個色調對應曲線不一定等同於顯示器色調對應器,因此螢幕截圖與螢幕上的內容會有所差異。

Android 13

色調對應外掛程式已新增至 SurfaceFlinger 的 GPU 轉譯區塊,讓原始設備製造商 (OEM) 提供 GPU 著色器,以符合其螢幕的色調對應曲線。螢幕截圖幾乎與螢幕上顯示的內容相同,但有以下差異:

  • 螢幕截圖仍會以 SDR 格式顯示。因此,當 HDR 場景與螢幕截圖一同顯示時,螢幕截圖中的 HDR 區域會顯得較暗。
  • 未管理 SDR 亮度,導致螢幕截圖中的 SDR 內容看起來與 HDR 內容一樣亮。

換句話說,螢幕截圖中擷取的任何 HDR 影片都會轉換為 SDR 影片。

Android 14

在 Ultra HDR 模式下,螢幕截圖功能會遇到重大挑戰。與影片不同,圖片通常會在 UI Framebuffer 中轉譯,這有兩個主要意涵:

  • 圖片不得進行圖片處理作業 (包括色調對應),以免與周圍 UI 不同。
  • 應用程式在轉譯 UI 時,必須負責執行以來源為準的色調對應作業。

為瞭解決這個問題,我們提供三種螢幕截圖實作方式:

  • 保留 Ultra HDR 圖片的 HDR 細節,導致螢幕截圖中的應用程式 UI 變暗。
  • 保留應用程式 UI 詳細資料,導致 Ultra HDR 圖片裁剪。
  • 在 HDR 亮點中截斷應用程式 UI 亮度,以達到折衷。

Android 14 實作第三種方法,即將應用程式 UI 調亮,並裁剪 HDR 亮點。

Android 15-QPR1

SurfaceFlinger 包含螢幕截圖的本機色調對應演算法。這項程序包括:

  • 將輸入圖片分割成較小的圖片。
  • 計算每張圖片的最大亮度,並捨棄各個區段中的低亮度值。
  • 透過模糊處理和重新取樣,對計算的亮度進行內插。
  • 根據內插的亮度值,將參數化 Reinhard 色調轉換器套用至輸入圖片。

這個演算法顯示 Android 14 和 Android 15-QPR1 之間的螢幕截圖有顯著改善,如下列範例所示:

  • 範例 1 是 HDR 影片的螢幕截圖,疊加在含有 Ultra HDR 的 Chrome 頁面上。在新的實作方式中,UI 顏色幾乎都會保留,且圖片不會再遭到裁剪。

    Android 14 Android 15-QPR1
    Android 14 中的範例 1 Android 15qpr 中的範例 1

    圖 1. 範例 1 的 Android 14 和 Android 15-QPR1 比較。

  • 範例 2 是 HDR 影片疊加在「設定」畫面上的螢幕截圖,後續的螢幕截圖也是如此。在 Android 14 中,螢幕截圖的顏色會逐漸變暗。在 Android 15-QPR1 中,色調轉換器會正確複製及保留 UI 顏色。

    Android 14 Android 15-QPR1
    Android 14 中的範例 2 Android 15qpr 中的範例 2

    圖 2. 範例 2 中 Android 14 與 Android 15-QPR1 的比較。