Bitmap基本概念:
1.bitmap是Android系統(tǒng)中的圖像處理的重要類之一议纯;
2.通過bitmap我們可以獲取到圖片的相關信息痪署;
3.bitmap文件圖像效果好就需要占用越大存儲空間典奉;
Bitmap的加載方式:
1.BitmapFactory.decodeBetyArray();//字節(jié)數(shù)組
2.BitmapFactory.decodeFile();//文件路徑
3.BitmapFactory.decodeResource();//資源ID
4.BitmapFactory.decodeStream();//流
Bitmap不做處理的加載方式:
Bitmap bitmap = BitmapFactory.decodeResource(getResources,R.drawable.ic_launcher,null);
//最后一個參數(shù)是BitmapFactory.Options,bitmap的高效處理就是通過BitmapFactory.Options來設置的
BitmapFactory.Options的作用:
1.防止內(nèi)存溢出问潭;
2.節(jié)省內(nèi)存開銷;
3.系統(tǒng)更流暢干跛;
BitmapFactory.Options的重要屬性:
1.injustDecodeBounds;
*設為true,那么BitmapFactory并不會真的返回一個Bitmap給你祟绊,它僅僅會把它的寬驯鳖,高取回來給你,這樣就不會占用太多的內(nèi)存久免,也就不會那么頻繁的發(fā)生OOM浅辙。
*設置為false,BitmapFactory返回bitmap;
2.outWidth&outHeight;
*bitmap圖像的寬和高阎姥;
3.inSampleSize;
獲取采樣率
*inSampleSize大于1時记舆,圖像高、寬分別以2的inSampleSize次方分之一縮小
*inSampleSize小于等于1時呼巴,圖像高泽腮、寬不變;
4.inpreferredConfig:
*ALPHA_8: 每個像素用占8位,存儲的是圖像的透明值,占1個字節(jié);
*RGB_565:每個像素用占16位,分別為5-R,6-G,5-B通道,占2個字節(jié);
*ARGB-4444:每個像素占16位,即每個通道用4位表示,占2個字節(jié);
*ARGB_8888:每個像素占32位,每個通道用8位表示,占4個字節(jié);
5.inDither:
*是否進行圖像抖動處理衣赶;
6.inMutable:
*如果設置為true,將返回一個mutable的bitmap,可用于修改BitmapFactory加載而來的bitmap.
7.inScale:
*是否需要放縮位圖
BitmapFactory.options的實際應用:
public static Bitmap readBitmapFromFile(String filePath, int width, int height) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
float srcWidth = options.outWidth;
float srcHeight = options.outHeight;
int inSampleSize = 1;
if (srcWidth > height && srcWidth > width) {
inSampleSize = srcWidth /width;
} else if(srcWidth <height && srcHeight >height ){
inSampleSize = srcHeight /height ;
}
if(inSampleSize <=0){
inSampleSize =1;
}
options.inJustDecodeBounds = false;
options.inSampleSize = inSampleSize;
return BitmapFactory.decodeFile(filePath, options);
}
Bitmap資源回收:
if (bitmap!=null&&!bitmap.isRecycle()) {
bitmap.recycle();
bitmap= null;
system.gc();
}