知識普及系列:
圖片有兩種使用的場景:一種是在硬盤上的存儲格式,一個是在內存的展開格式。
一、在內存中的圖片
因爲需要知道圖片的所有信息,所有在內存中,圖片一般是展開的。那以帶透明的Bitmap來說。這裏有一些概念。
1.像素點組成:顏色有R(red紅色)、G (green綠色)、B (Blue藍色) 三色組成,再考慮到透明值的問題會有一個A(alpha阿爾法值)。
2.位深度:你需要用多少Bit來表示一個像素點。如果是位深度是32,則每八位分別表示R,G,B,A
如下圖所示:
如果在內存中完全展開,其所佔內存大小爲:寬像素點數 X 高像素點數 X 位深度 / 8 ,單位是字節
Android中的在內存中完全展開就是Bitmap的格式,Bitmap是最原始的保存着所有的信息,(一般不在硬盤上這麼保存)
圖片中所指的分辨率與打印掃描有關,一般不關注。
在日常交流的過程中所指的分辨率一般指的是其寬和高的像素點個數。
二、在硬盤上的圖片
圖片如果按照內存那樣的方式來進行存儲太浪費空間了。舉個例子,如果有一張圖片全部都是紅色,有必要存儲每個像素點嗎?其只需要記錄下其紅色和大小就好了,在內存中可以重新還原。一般在傳輸和存儲的過程中都對圖片進行壓縮。
1.PNG 是一種無損壓縮。並且帶有透明度值。壓縮的實在有限!
2.JPG是一種有損壓縮,不帶透明值(這就是爲什麼上圖的位深度爲24了)。在不影響使用的情況下回丟棄一部分信息,肉眼一般區分不出來。
對同一張Bitmap圖片保存爲JPG,比保存爲PNG小的多,這就是爲什麼網絡上使用最多是JPG格式的圖片了
三、圖片的顯示
圖片從硬盤加載到內存,最終是需要顯示給用戶來看。手機的屏幕也有分辨率(寬像素點數,高像素點數),舉例,如果有個手機分辨率爲800X1080,一張圖片爲1600X2160,全屏顯示這種圖片,圖片不會失真。
一般用一個控件來顯示圖片,圖片的展示是否失真與控件的大小有關(全填充)。
在寬高比一致的情況,大的圖片在小的控件展示,圖片不會失真。小的圖片在大的控件展示,圖片會失真。
在寬高比不一致的情況下,如果完全填充滿控件,圖片一定會扭曲變形。除非,保持其比例,不完全填充。
在實際的應用過程中,爲了展示的效果更好和節約內存,一般都需要提前得出控件的大小,加載圖片的時候,將圖片處理成與控件的大小一致。