Bitmap是Android系統中的圖像處理的最重要類之一。用它能夠獲取圖像文件信息,進行圖像剪切、旋轉、縮放等操做,並能夠指定格式保存圖像文件。本文從應用的角度,着重介紹怎麼用Bitmap來實現這些功能。 java
1、Bitmap的生成 android
1.1 BitmapFactory decode出Bitmap 函數
Bitmap實如今android.graphics包中。可是Bitmap類的構造函數是私有的,外面並不能實例化,只能是經過JNI實例化。這必然是 某個輔助類提供了建立Bitmap的接口,而這個類的實現經過JNI接口來實例化Bitmap的,這個類就是BitmapFactory。 編碼
圖1、BitmapFactory主要方法及Options選項 spa
利用BitmapFactory能夠從一個指定文件中,利用decodeFile()解出Bitmap;也能夠定義的圖片資源中,利用decodeResource()解出Bitmap。 3d
1.2 decode時的選項 code
在使用方法decodeFile()/decodeResource()時,均可以指定一個BitmapFacotry.Options。 orm
利用Options的下列屬性,能夠指定decode的選項: blog
利用Options的這些值就能夠高效的獲得一幅縮略圖。 接口
圖2、BitmapFactory.decodeFile()
先設置inJustDecodeBounds= true,調用decodeFile()獲得圖像的基本信息[Step#2~4];
利用圖像的寬度(或者高度,或綜合)以及目標的寬度,獲得inSampleSize值,再設置inJustDecodeBounds= false,調用decodeFile()獲得完整的圖像數據[Step#5~8]。
先獲取比例,再讀入數據,若是欲讀入大比例縮小的圖,將顯著的節約內容資源。有時候還會讀入大量的縮略圖,這效果就更明顯了。
2、利用Bitmap和Matrix實現圖像變換
Bitmap能夠和Matrix結合實現圖像的剪切、旋轉、縮放等操做。
圖3、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()),傳入第一個方法,可實現旋轉或縮放。
圖4、Bitmap實現旋轉
3、保存圖像文件
通過圖像變換以後的Bitmap裏的數據能夠保存到圖像壓縮文件裏(JPG/PNG)。
圖5、保存Bitmap數據到文件
這個操做過程當中,Bitmap.compress()方法的參數format可設置JPEG或PNG格式;quality可選擇壓縮質量;fOut是輸出流(OutputStream),這裏的FileOutputStream是OutputStream的一個子類。
總結一下,本文介紹Bitmap的使用方法——用Bitmap實現圖像文件的讀取和寫入,並用Bitmap實現圖像的剪切、旋轉和縮放變換。