標籤:android 位元影像 影像處理 android開發
bitmap是android中重要的影像處理工具類,通過bitmap可以對映像進行剪下、旋轉、縮放等操作,同時還可以指定格式和壓縮品質儲存影像檔。
一、拿到一個Bitmap對象
查看源碼我們知道,Bitmap被final修飾,因此不可以通過new來獲得一個bitmap的執行個體,獲得一個Bitmap對象一般都是通過BitmapFactory來獲得,主要有以下幾方式。
每一個方法都有自己的重載方法,重載方法多出的參數是Options,解釋一下這個參數,這個主要是對產生Bitmap對象做一些簡單的處理。
inPreferredConfig 指定decode到記憶體中,手機中所採用的編碼,可選值定義在Bitmap.Config中。預設值是ARGB_8888。inJustDecodeBounds 如果設定為true,並不會把映像的資料完全解碼,亦即decodeXyz()傳回值為null,但是Options的outAbc中解出了映像的基本資料。inSampleSize 設定decode時的縮放比例。當值大於1時會對映像進行壓縮,比如設定為4時,返回的映像寬高都將是原始映像的四分之一,像素是原始映像的十六分之一,如果設定的值小於1,則會被當作1來處理。注意,這裡設值必須是2的次冪,其他值會被就近取離2的次冪最近的值。
通過option的這些屬性,我們就可以獲得一張圖片的縮圖啦,一個基本思路是先設定inJustDecodeBounds為true,拿到映像的基本資料,比如寬和高,根據基本資料結合縮圖目標寬高,算出inSampleSize ,然後再設定inJustDecodeBounds為false,獲得縮圖。
想要獲得一個Bitmap對象,可以通過一個映像的完整路徑,或者是通過一個位元組流或者是通過位元組亦或者是通過本地的資源檔,都可以獲得一個Bitmap對象。
if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // /storage/emulated/0/DCIM/Camera/123.jpg String path = Environment.getExternalStorageDirectory() .getAbsolutePath() + File.separator + "DCIM" + File.separator + "Camera" + File.separator + "123.jpg"; BitmapFactory.Options option = new BitmapFactory.Options(); option.inSampleSize = 1; //通過完整路徑獲得Bitmap對象 Bitmap bm = BitmapFactory.decodeFile(path,option); FileInputStream is = new FileInputStream(new File(path)); //通過一個輸入資料流獲得Bitmap對象 Bitmap bm2 = BitmapFactory.decodeStream(is); //通過本地資源獲得一個Bitmap對象 Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); iv.setImageBitmap(bm2); }
二,儲存影像檔
拿到了Bitmap之後可以直接顯示出來,也可以先儲存到本地等待處理,Bitmap可以儲存為jpg,png,gif等格式,儲存方式也是非常簡單:
Bitmap bp = revitionImageSize(path + "123.jpg"); FileOutputStream out = new FileOutputStream(path + "456.gif"); //0意味著壓縮到最小,100意味著壓縮後的品質最好,PNG是無損映像,會忽略這個參數// bp.compress(Bitmap.CompressFormat.JPEG, 100, out); bp.compress(Bitmap.CompressFormat.PNG, 0, out); out.flush(); out.close();
直接調用compress方法,第一個參數表示壓縮的方式,有多種,PNG屬於無損壓縮,JPEG是有損壓縮。第二個參數表示壓縮品質,取值為0-100,100表示壓縮映像品質最高,但同時壓縮率低,0表示壓縮映像品質最差,同時壓縮率高。但是,這個參數是否有效與第一個參數有關,如果第一個參數選擇了PNG,及無損壓縮,那麼第二參數是無效的。第三個參數是你要輸出的位元組流。
本文參考
本文源碼下載
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。若有錯誤地方,還望批評指正,不勝感激。
android開發之bitmap使用