相信大家在開發的過程中
肯定有遇過這些需求吧
許多資料在傳遞時,總是會伴隨著型態的轉換
今天要講的就是其中之一
那我們開始囉!!!
順序為
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 就產生了
留言列表