android開發之bitmap使用

來源:互聯網
上載者:User

標籤: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使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.