Bitmap學習日記以及android:ScaleType的屬性說明

警言:慎終如始!

摘要:在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?用矩陣來繪制,動態縮小放大圖片來顯示。


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?希望小伙伴們多多支持(如有錯誤,希望指出)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,113評論 25 708
  • 2021期待與你一起共事,點擊查看崗位[http://www.lxweimin.com/p/6f4d67fa406...
    閑庭閱讀 16,712評論 0 75
  • RelativeLayout 第一類:屬性值為true可false android:layout_centerHr...
    兀兀沙彌閱讀 3,023評論 0 15
  • 石榴開花了 淺淺的歌聲遠處飄來 撥動心弦 思念不斷蔓延 飄到了遙遠的云端 世界安靜下來 淚如泉涌源于那份愛 突如其...
    二零一久閱讀 249評論 1 5
  • 今天過得很充實,早上卸了一車的電視機,有6000/8000/610的,看到我們康佳的大倉庫,都是滿滿的錢啊 下午去...
    阿立立哥閱讀 80評論 0 0