Android圖像處理之Bitmap類

fmms 12年前發布 | 883K 次閱讀 Android Android開發 移動開發

田海立@CSDN

2011/09/08

 

Bitmap是Android系統中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉、縮放等操作,并可以指定格式保存圖像文件。本文從應用的角度,著重介紹怎么用Bitmap來實現這些功能。

 

一、Bitmap的生成

1.1 BitmapFactory decode出Bitmap

    Bitmap實現在android.graphics包中。但是Bitmap類的構造函數是私有的,外面并不能實例化,只能是通過JNI實例化。這必然是 某個輔助類提供了創建Bitmap的接口,而這個類的實現通過JNI接口來實例化Bitmap的,這個類就是BitmapFactory。

Android圖像處理之Bitmap類

圖一、BitmapFactory主要方法及Options選項

 

利用BitmapFactory可以從一個指定文件中,利用decodeFile()解出Bitmap;也可以定義的圖片資源中,利用decodeResource()解出Bitmap。

 

1.2 decode時的選項

在使用方法decodeFile()/decodeResource()時,都可以指定一個BitmapFacotry.Options

利用Options的下列屬性,可以指定decode的選項:

  • inPreferredConfig 指定decode到內存中,手機中所采用的編碼,可選值定義在Bitmap.Config中。缺省值是ARGB_8888。
  • inJustDecodeBounds 如果設置為true,并不會把圖像的數據完全解碼,亦即decodeXyz()返回值為null,但是Options的outAbc中解出了圖像的基本信息。
  • inSampleSize 設置decode時的縮放比例。

 

利用Options的這些值就可以高效的得到一幅縮略圖。

Android圖像處理之Bitmap類

圖二、BitmapFactory.decodeFile()

 

先設置inJustDecodeBounds= true,調用decodeFile()得到圖像的基本信息[Step#2~4];

利用圖像的寬度(或者高度,或綜合)以及目標的寬度,得到inSampleSize值,再設置inJustDecodeBounds= false,調用decodeFile()得到完整的圖像數據[Step#5~8]。

先獲取比例,再讀入數據,如果欲讀入大比例縮小的圖,將顯著的節約內容資源。有時候還會讀入大量的縮略圖,這效果就更明顯了。

 

二、利用Bitmap和Matrix實現圖像變換

    Bitmap可以和Matrix結合實現圖像的剪切、旋轉、縮放等操作。

Android圖像處理之Bitmap類

圖三、Bitmap方法

 

用源Bitmap通過變換生成新的Bitmap的方法:

    public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height,  
                Matrix m, boolean filter)  
    public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height)  
    public static Bitmap createScaledBitmap(Bitmap src, int dstWidth,  
                int dstHeight,boolean filter)  

第一個方法是最終的實現,后兩種只是對第一種方法的封裝。

第二個方法可以從源Bitmap中指定區域(x,y, width, height)中挖出一塊來實現剪切;第三個方法可以把源Bitmap縮放為dstWidth x dstHeight的Bitmap。

 

設置Matrix的Rotate(通過setRotate())或者Scale(通過setScale()),傳入第一個方法,可實現旋轉或縮放。

Android圖像處理之Bitmap類

圖四、Bitmap實現旋轉

 

三、保存圖像文件

    經過圖像變換之后的Bitmap里的數據可以保存到圖像壓縮文件里(JPG/PNG)。

Android圖像處理之Bitmap類

圖五、保存Bitmap數據到文件

 

這個操作過程中,Bitmap.compress()方法的參數format可設置JPEG或PNG格式;quality可選擇壓縮質量;fOut是輸出流(OutputStream),這里的FileOutputStream是OutputStream的一個子類。

 

總結一下,本文介紹Bitmap的使用方法——用Bitmap實現圖像文件的讀取和寫入,并用Bitmap實現圖像的剪切、旋轉和縮放變換。

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!