根據Android版本的不一樣,bitmap data存放的位置是不一樣的,3.0之前是分配在native heap上,3.0之後是分配在VM heap上。 spa
BitmapFactory裏就那麼幾個decode方法,很容易找到BitmapFactory .decodeStream就能夠解決。下面貼一下代碼: code
BitmapFactory.Options options = new BitmapFactory.Options(); orm
options.inPreferredConfig = Config.ARGB_8888; 圖片
options.inPurgeable = true;// 容許可清除 內存
options.inInputShareable = true;// 以上options的兩個屬性必須聯合使用纔會有效果 開發
String sname = String.format( 「xxx.png」, sTowerStyle, j, sDirction, i); it
InputStream is = am.open(sname); io
arrBmp[ iBmpIndex] = BitmapFactory .decodeStream(is, null, options); form
Java代碼
Bitmap.Config ALPHA_8
Bitmap.Config ARGB_4444
Bitmap.Config ARGB_8888
Bitmap.Config RGB_565 map
首先
Java代碼
A:Alpha透明度
R:Red紅色
G:Green綠色
B:Blue藍色
而後
Java代碼
Bitmap.Config ALPHA_8 圖形參數應該由一個字節來表示,應該是一種8位的位圖
Bitmap.Config ARGB_4444 圖形的參數應該由兩個字節來表示 分別用4個bit來記錄每一個像素的A、R、G、B數據,16色位圖
Bitmap.Config ARGB_8888 圖形的參數應該由四個字節來表示 分別用8個bit來記錄每一個像素的A、R、G、B數據,就是常說的32bit位圖、256色位圖(這個也多是RGB888這種24bit位圖)
Bitmap.Config RGB_565 圖形的參數應該由兩個字節來表示 分別用5個、6個和5個bit記錄像素的R、G、B數據,其中G的6個bit中一個是無效保留的,32色位圖
通常狀況下咱們都是用ARGB_8888 可是它也相對的很佔內存 由於一個像素8+8+8+8=32位 8位一個字節 也就是一個像素4個字節 若是是800*480的圖片的話 也就是 800*480*4/1024/124 估計也有1M多了 因此做爲手機應用開發人員你使用的內存是有限的