一、前言
一個軟件,往往會用到位圖資源,比如圖標、圖片、水晶按鈕等。
在使用了位圖資源后,就不能對任意DPI都進行適配,因為這樣適配的代價太大了。
像Win10的縮放比例可以由100%-500%,如果全部適配的話,僅一個圖標就是制作401個不同分辨率的版本,時間成本和空間成本上開銷都太大了。同時,在很多DPI下,這401個圖標當中有很多臨近的圖標的尺寸變化並不明顯,甚至相同,這樣無疑是浪費。
所以,我們就需要以DPI范圍為基礎進行適配。
相信看完的你,一定會有所收獲!
本文地址:https://www.cnblogs.com/lesliexin/p/14636355.html
二、DPI計算公式與適配任意分辨率
1,DPI計算公式
在第一篇中,我通過推理和歸納,總結出了DPI與縮放比例間的對應關系。
但其實,DPI與縮放比例之間是有一個計算公式的,如下:
DPI=縮放比例*96
結果取整數,小數位四舍五入。
示例:
縮放比例為150%時,DPI=150%*96=144。
這也是為什么會出兩個縮放比例對應同一個分辨率。
112%:DPI=112%*96=107.52,四舍五入后,DPI=108;
113%:DPI=113%*96=108.48,四舍五入后,DPI=108;
2,適配任意分辨率
如果需要適配任意分辨率,那么尺寸就需要等比縮放。根據縮放比例進行計算比例,從100%開始,到500%結束。
同時,因為分辨率是都是整數,所以要對計算后的結果進行四舍五入取整處理。
在前言中,我舉了個圖標的例子,但實際上因為圖標的尺寸很小,一般的圖標是16*16,所以真正所需要制作的尺寸並達不到401個。
以16*16分辨率的圖標為例:

從上圖可以看出,在好多縮放比例下,圖標的尺寸都是一樣的,所以綜合下來並達不到401個,但是也有60+,制作這么多圖標,是極其消耗人力的。
三、按DPI范圍適配
適配任意DPI是完美的,但是在實際應用中,這種太過耗費時間與精力。
同時,在實現使用過程中,這些細小的變化對實際的使用影響並不大,而且整體界面尺寸的變化也不大。
所以便可以按照“DPI范圍”進行適配,不同范圍的DPI值對應不同的縮放系數,這也是目前主流的高DPI適配方法。
同時,因為在程序中,我們可以獲取到的是DPI信息,而不是縮放信息,所以為了減小計算,是按照DPI去划分范圍的,而不是按縮放比例去划分范圍的。
在選擇適配范圍時,有多種范圍選擇方法。這里提供一種我個人常用的范圍分配方法:

優點:
1,適配完目前的100%~500%,每個圖標只需要9份即可。
如下:

2,縮放系數以0.5遞增,方便各種尺寸的計算。特別只要是偶數,計算后就會是整數,省去取整時精度損失。
當然,以目前實際應用而言,300%的縮放已經很極限了,所以在此基礎上還可以進一步的簡化,以減少工作量。
還可以在低縮放比例下再次細化,以到達更好的用戶體驗。
四、總結
世間安得雙全法,所以大家可以根據自己的實際需要,來制定自己的適配方案。
本文也只是一家之言,歡迎大家評論指正。
-【END】-
