Android影像處理之Bitmap類及關聯類別 && Android logo

來源:互聯網
上載者:User

        Bitmap是Android系統中的影像處理的最重要類之一。用它可以擷取影像檔資訊,進行映像剪下、旋轉、縮放等操作,並可以指定格式儲存影像檔。

(1)Bitmap的產生
        A,Bitmap實現在android.graphics包中。但是Bitmap類的建構函式是私人的,外面並不能執行個體化,只能是通過JNI執行個體化。這必然是某個輔助類提供了建立Bitmap的介面,而這個類的實現通過JNI介面來執行個體化Bitmap的,這個類就是BitmapFactory。

利用BitmapFactory,可以從一個指定檔案中用decodeFile()解出Bitmap;也可以定義的圖片資源中用decodeResource()(http://blog.csdn.net/zhandoushi1982/article/details/8613916中有myView(Context context)執行個體)解出Bitmap。

       B,在使用方法decodeFile()/decodeResource()時,都可以指定一個BitmapFacotry.Options。利用Options的下列屬性,可以指定decode的選項:inPreferredConfig 指定decode到記憶體中,手機中所採用的編碼,可選值定義在Bitmap.Config中,預設值是ARGB_8888;inJustDecodeBounds 如果設定為true,並不會把映像的資料完全解碼,但是解出了映像的基本資料;inSampleSize 設定decode時的縮放比例。

先設定inJustDecodeBounds= true,調用decodeFile()得到映像的基本資料[Step#2~4];再利用映像的寬度(或者高度,或綜合)以及目標的寬度,得到inSampleSize值,再設定inJustDecodeBounds= false,調用decodeFile()得到完整的映像資料[Step#5~8]。
(2)利用Bitmap和Matrix實現映像變換
       Bitmap可以和Matrix結合實現映像的剪下、旋轉、縮放等操作。

        A,用源Bitmap通過變換產生新的Bitmap的方法:

第一個方法是最終的實現,後兩種只是對第一種方法的封裝。第二個方法可以從源Bitmap中指定地區(x,y, width, height)中挖出一塊來實現剪下;第三個方法可以把源Bitmap縮放為dstWidth x dstHeight的Bitmap。

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

如果用Scale實現縮放,跟A中的方法三的縮放,有什麼差別?(疑問)

(3)儲存影像檔

        經過映像變換之後的Bitmap裡的資料可以儲存到映像壓縮檔裡(JPG/PNG)。

這個操作過程中,Bitmap.compress()方法的參數format可設定JPEG或PNG格式;quality可選擇壓縮品質;fOut是輸出資料流(OutputStream)。這部分儲存的代碼可以參照http://blog.csdn.net/zhandoushi1982/article/details/5256132中的save(byte[] data)函數,注意在映像格式的處理上有區別。

(4)跟bitmap處理關聯的兩個類Matrix和PointF
        A,Matrix:矩陣類擁有3 x3的座標變換矩陣。沒有一個建構函式矩陣,所以它必須顯式初始化的使用。Matrix的操作,總共分為translate(平移)、rotate(旋轉)、scale(縮放)和skew(傾斜)四種,每一種變換在Android的API裡都提供了set,post和pre三種操作方式,除了translate,其他三種操作都可以指定中心點。

        接下來我們用到了兩個方法:(1)平移方法:兩個參數分別是要移到的x、y座標,boolean postTranslate(float dx, float dy)。(2)旋轉方法:第一個參數是旋轉多少度,正數是順時針,負數是逆時針;第二三參數是按某個點旋轉的x、y座標,boolean postRotate(float degrees, float px, float py)。

        B,PointF:一個點有兩個浮點座標。該類的一個方法:設定點的x和y座標,final void set(float x, float y) 。

=======================================================================================================

        開機logo一般是兩種:靜態和動畫的。其實在實現logo的過程中,有四幅圖片:(1)uboot顯示(2)kernel顯示(3)android第一幅intilogo.rle(4)android第二幅bootanimation。前三幅一般我們做成相同的,最後一幅為動畫顯示。

                              

不同CPU平台的實現方式,是有差別的。這裡不具體說明。 

參考原文:http://www.open-open.com/lib/view/open1333418945202.html

參考原文:http://www.linuxidc.com/Linux/2012-01/51446.htm

參考原文:http://blog.csdn.net/xubin341719/article/details/8267282

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.