close

相信大家在開發的過程中
肯定有遇過這些需求吧
許多資料在傳遞時,總是會伴隨著型態的轉換
今天要講的就是其中之一
那我們開始囉!!!

 

順序為
Resource to Bitmap
Base64 to byte[]
byte[] to Bitmap
Bitmap to byte[]
Drawable to Bitmap

 

BitmapFactory.decodeResource(context.getResources()
                            , R.drawable.XXX);

一開始是最基本的
在 Android 中想要從 Rescource 中取得Bitmap 的話
就是用 BitmapFactory 的 decodeResource()
參數意思為
decodeResource( 資源res , 圖片的識別 ID 型態為INT )

 

 public static byte[] convertBase64ToByteArray(String b64Str){
        return Base64.decode(b64Str, Base64.DEFAULT);
    }

這是一個 Base64 轉 byte[] 的 function
只要一行 code 就搞定了
那接下來,我們看其它的 function

 

public static Bitmap convertBase64ToBitmap(String base64Str) {

    byte[] decodedBytes = Base64.decode(base64Str
                                       , Base64.DEFAULT);
    Bitmap bmp = BitmapFactory.decodeByteArray(decodedBytes
                                  , 0 , decodedBytes.length);

    return bmp;
}

想要 Bitmap 的話
可以用剛剛我們拿到的 byte[] 來做轉換
利用 BitmapFactory 裡面的 decodeByteArray() 可以得到我們要的 Bitmap
而三個參數的意思為
decodeByteArray( 資料 , 從哪開始parse , 資料長)

 

public static byte[] convertBitmapToByteArray(Bitmap bmp) {

   ByteArrayOutputStream stream = new ByteArrayOutputStream();
   bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);

   return stream.toByteArray();
}

如果我們反過來
想從 Bitmap 取得 byte[] 呢?
我們可以用 Bitmap 裡的 compress() 把資料塞進 ByteArrayOutPutStream 中就可以了
那麼參數意思如下
compress( 格式 , 品質 , 要存資料的Stream )

 

public static Bitmap convertDrawableToBitmap(Drawable drawable) {

    Bitmap bitmap = Bitmap
            .createBitmap(
            drawable.getIntrinsicWidth()
           ,drawable.getIntrinsicHeight()
           ,drawable.getOpacity() == PixelFormat.OPAQUE ?
                    Bitmap.Config.RGB_565 
                  : Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth()
                      , drawable.getIntrinsicHeight());
    drawable.draw(canvas);
    return bitmap;
}

接下來要看的是 Drawable 轉成 Bitmap 的 function
首先是建立一個 Bitmap 出來

 

creatBitmap() 的參數意思為
Bitmap 的寬度,給予 Drawable 的固定寬度
Bitmap 的高度,給予 Drawable 的固定高度
Bitmap 的設定,判斷 Drawable 是否不透明
不透明的話給 RGB 的設定
透明的話給 ARGB (A為透明度,R紅,G綠,B藍)

 

再來建立一個畫Bitmap 的 Convas 畫布
drawable.setBounds() 是在設定座標
設定為 ( 0 , 0 ) ~ ( 寬 , 高 ) 兩座標所構成的一個矩形面

 

點我看什麼是Convas ?
想知道如何將 Bitmap 放大、縮小、旋轉角度、指定大小 ?點我

 

最後 draw 畫出來,我們的Bitmap 就產生了













 


arrow
arrow
    全站熱搜

    顏澤偉 發表在 痞客邦 留言(0) 人氣()