警言:慎終如始!
摘要:在android系統當中,bitmap是圖像處理最重要的類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉、縮放等操作,并可以指定格式保存圖像文件。
首先我們已經知道已經知道Bitmap在Android的圖像處理中占有舉足輕重的作用,既然那么重要,下面我們我們一起學習下它的基本用法.
1.獲取Bitmap
(1)從資源文件中得到圖片
Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.aaa);
(2)從SD卡中得到圖片(讀取文件)
Bitmap rawBitmap1 = BitmapFactory.decodeFile(String filePath, null);
(3)從SD卡中得到圖片(輸入流的形式)
InputStream inputStream=getBitmapInputStreamFromSDCard("aa.jpg");
Bitmap rawBitmap2 = BitmapFactory.decodeStream(inputStream);
2.圖片處理
// 得到圖片原始的高寬
int rawHeight = rawBitmap.getHeight();
int rawWidth = rawBitmap.getWidth();
// 設定圖片新的高寬
int newHeight = 500;
int newWidth = 500;
// 計算縮放比例
float heightScale = ((float) newHeight) / rawHeight;
float widthScale = ((float) newWidth) / rawWidth;
// 創建矩陣
Matrix matrix = new Matrix();
//設置縮放比例
(1)matrix.postScale(heightScale, widthScale);
// 設置圖片的旋轉角度
(2)matrix.postRotate(-30);
// 設置圖片的傾斜
(3)matrix.postSkew(0.1f, 0.1f);
//生成處理后的圖片
Bitmap newBitmap = Bitmap.createBitmap(rawBitmap, 0, 0, rawWidth,rawWidth, matrix, true);
(4)圖片圓角處理
Bitmap roundCornerBitmap=this.toRoundCorner(rawBitmap, 40);
imageView.setImageBitmap(roundCornerBitmap);
3.圖片存儲
(1)保存到Sd卡
this.compressAndSaveBitmapToSDCard(newBitmap, "aa.jpg", 80);
(2)這個方法較為常用,按輸出流存儲,其中?quality參數一般為80,數值過大,會導致圖片變大
compress(Bitmap.CompressFormat.JPEG, quality, fileOutputStream);
4.圖片回收
在Android應用里,最耗費內存的就是圖片資源。而且在Android系統中,讀取位圖Bitmap時,分給虛擬機中的圖片的堆棧大小只有8M,如果超出了,就會出現OutOfMemory異常。所以,對于圖片的內存優化,是Android應用開發中比較重要的內容。所以盡可能的回收釋放Bitmap資源
// 先判斷是否已經回收
if(bitmap !=null&& !bitmap.isRecycled()){
// 回收并且置為null
bitmap.recycle();
bitmap =null;
}
System.gc();
5.android:ScaleType的使用
android:scaleType是控制圖片如何resized/moved來匹對ImageView的size。ImageView.ScaleType /
android:scaleType值的意義區別:
(1)CENTER /center?按圖片的原來size居中顯示,當圖片長/寬超過View的長/寬,則截取圖片的居中部分
顯示
(2)CENTER_CROP / centerCrop?按比例擴大圖片的size居中顯示,使得圖片長(寬)等于或大于View的長
(寬)
(3)CENTER_INSIDE / centerInside?將圖片的內容完整居中顯示,通過按比例縮小或原來的size使得圖片
長/寬等于或小于View的長/寬
(4)FIT_CENTER / fitCenter?把圖片按比例擴大/縮小到View的寬度,居中顯示
(5)FIT_END / fitEnd?把圖片按比例擴大/縮小到View的寬度,顯示在View的下部分位置
(6)FIT_START / fitStart?把圖片按比例擴大/縮小到View的寬度,顯示在View的上部分位置
(7)FIT_XY / fitXY?把圖片 不按比例 擴大/縮小到View的大小顯示
(8)MATRIX / matrix?用矩陣來繪制,動態縮小放大圖片來顯示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?希望小伙伴們多多支持(如有錯誤,希望指出)