壹、基礎概念:
px:像素(pixel),指的是屏幕上的物理點,最小的獨立顯示單位。
ppi:指的是水平方向或者豎直方向上每英寸的像素值,每英寸像素點(就是每英寸像素點的數量),通過屏幕長寬計算出對角線的長度,再除以屏幕對角線英寸值。X/x = Y/y = ppi,這裏X為水平像素值,x為水平英寸值,Y為豎直像素值,y為豎直英寸值。所以ppi=√(X?+Y?)/對角線英寸
dpi:每英寸點(mdpi:150,hdpi:240),每英寸的像素點的數量
dp:與像素點無關,虛擬像素,px = dp (dpi/160)
densityDpi:是屏幕每英寸對應多少個點(不是像素點)density = densityDpi/160
in:英寸,等於2.54厘米。
二、計算:
1、像素的計算
px = dp (dpi/160)
以Nexus6為例,壹張180 180的圖片,放在設置了wrap-content的ImageView中,當這張圖片,分別放在drawable-nodpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi,drawable-xxxhdpi的資源目錄下,在屏幕上顯示多大像素的圖片?
hdpi:int(180560/240)+0.5f)=420px
xhdpi:int(180 (560/320)+0.5f) = 315px
xxhdpi:int(180 (560/480)+0.5f) = 210px
2、內存的計算:
ALPHA8,RGB565,ARGB_4444,ARGB8888,Android系統默認ARGB8888.(分別占的字節數為1,2,2,4Byte)
hdpi的內存:4204204=705600byte = 689kb
xhdpi的內存:3153154= 396900byte = 387.6kb
xxhdpi的內存:2102104=176400byte = 172.2kb
drawable-ldpi (dpi=120, density=0.75)
drawable-mdpi (dpi=160, density=1)
drawable-hdpi (dpi=240, density=1.5)
drawable-xhdpi (dpi=320, density=2)
drawable-xxhdpi (dpi=480, density=3)
3、bitmap的內存占用:Bitmap 在內存當中占用的大小其實取決於:
色彩格式,如果是 ARGB8888 那麽就是壹個像素4個字節,如果是 RGB565 那就是2個字節
原始文件存放的資源目錄(是 hdpi 還是 xxhdpi )等
目標屏幕的密度(所以同等條件下,紅米在資源方面消耗的內存肯定是要小於三星S6的)
4、內存計算:
720 720px的圖片放到手機屏幕是320dpi,縮放的文件夾是mdpi,采用默認的存儲格式,則占用的內存是:
(720 (160/320)+0.5f)^2