安卓開發必備顏色知識

前言

Oreo版Android開始獲顏色管理支持,有助不一樣設備顏色校準。隨此更新到來,Android設備可顯sRGB色域外顏色。算法

簡單說,顏色管理可保顏色在不一樣顯示器看起來一致。如顏色#ff0000(紅色)出現於不一樣技術顯示屏,看到的顏色可能有所不一樣,有些屏幕可顯比其它屏幕更飽和或更強烈顏色。據sRGB表達方式,#ff0000表一特定紅色(sRGB色空間中),這樣彩色顯示管理便可精確產生符合觀衆指望顏色。架構

廣色域圖像顯示

圖像可嵌入顏色配置文件,聲明其顏色信息所屬顏色空間。相似許多相機能捕捉廣色域並嵌入適當顏色配置文件,從而顯超出標準sRGB色域顏色。應用中展現具備廣色域特徵圖像需在每Activity聲明,即在manifestactivitycolorMode屬性: ide

也可 Window建立前於 onCreate代碼設置。廣色域支持爲可選,因它需更多系統資源(可能致應用性能降低),開發者文檔強調:

啓用廣色域模式時活動窗口用更多內存和GPU處理能力進行畫面組合。啓用廣色域模式前應仔細考慮活動可否真正從中受益。全屏顯示照片活動很適合採用廣色域模式而顯示縮略圖界面不夠適合。
複製代碼

注意用單一Activity架構則將廣色域圖像顯示分解爲新Activity可能有意義。性能

下面示例呈現兩顯示相同廣色域測試圖像界面(嵌入Display P3顏色配置文件的PNG文件),畫面上部分Activity聲明廣色域顏色模式而下半部分Activity無聲明。屏幕支持則上部分應能見一Android小機器人而下部分不見。 測試

顏色準確渲染

許多Android設備好久前即擁有顯較廣色域屏幕。Android 8.0顏色管理前全部內容被假定sRGB,但寬色域顯示器將顏色值重解釋爲其工做色域並有效對顏色值換算(通常紅更紅,綠更綠)致更飽和成像效果。但這種拉伸不精確,實際不存在預測所想顏色的換算算法。spa

許多應用已對圖像等資源進行處理,如下降一些飽和度進行顏色彌補。在具校準顯示功能設備顯示時顏色可能較柔和。在顏色顯示精確設備(如Pixel 2),非飽和圖片資源顯示效果將不如顯示不精確設備飽滿。準確顏色渲染技術普遍流行後應用開發者無需對資源顏色自行處理並保內容定期顯示。然此前可採起措施保內容在顏色精確顯示器及非顏色管理設備看起來一樣棒。設計

Android 8.0添一新widecg資源限定符(resource qualifier),該限定符可更改配備廣色域屏幕並支持廣色域渲染設備上顏色(nowidecg相反)。3d

注意廣色域支持不一樣於當前活動是否在wideColorGamut顏色模式運行。設備支持顏色準確渲染則該限定符適用,而不論該活動是否於寬色域模式運行。code

應用可在res/values/colors.xml聲明一基色調色板: cdn

並在 res/values-widecg/colors.xml聲明另外一套設置
如上代碼所示,可爲色彩顯示準確設備(左側)和較舊設備提供不一樣顏色:
固然可在可柵格化成位圖資源用上述作法(如 res/drawable-widecg-mdpi/foo.png),但這意味應用體積幾乎倍增,也許不值。定要作可考慮用可動態着色的矢量圖形。

更廣支持即將到來

雖最近宣佈計劃添一新飽和顏色模式,讓用戶選擇不用顏色精確渲染(像nowidecg設備),但仍認爲那些擁有顏色管理功能設備更新應用很是重要。更新應用並更好支持顏色準確渲染,選擇退出此模式用戶會變少,畢竟你們更喜歡精準顏色。故計劃在廣色域支持領域繼續進行投入,在未來版中添更多API界面處理廣色域(如更新後的Paint APICanvas API已可接受更高比特精度顏色)。

現在頻繁和現代顯示設備打交道,設計師和開發者需瞭解色彩空間、顏色管理等知識及如何在應用中付諸實施。愈來愈多設備開始提供廣色域顯示和顏色精確渲染,此時領先一步尤顯必要,更新應用,爲用戶提供最佳體驗。這是向用戶提供卓越體驗最佳方式,確保用戶所看顏色即開發者想展現顏色。

相關文章
相關標籤/搜索