Android 中 Bitmap 和 Drawable 相互轉換的方法
阿新 • • 發佈:2019-02-04
一、Drawable 轉換成 Bitmap
方法一
通過 BitmapFactory 中的 decodeResource 方法,將資原始檔中的 R.drawable.ic_drawable 轉化成Bitmap
Resources res = getResources();
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.ic_drawable);
方法二
將 Drable 物件先轉化成 BitmapDrawable ,然後呼叫 getBitmap 方法 獲取
Resource res = gerResource();
Drawable drawable = res.getDrawable(R.drawable.ic_drawable);//獲取drawable
BitmapDrawable bd = (BitmapDrawable) drawable;
Bitmap bm = bd.getBitmap();
方法三
根據已有的Drawable建立一個新的Bitmap
public static Bitmap drawableToBitmap(Drawable drawable) {
int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight ();
System.out.println("Drawable轉Bitmap");
Bitmap.Config config =
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(w, h, config);
//注意,下面三行程式碼要用到,否則在View或者SurfaceView裡的canvas.drawBitmap 會看不到圖
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, w, h);
drawable.draw(canvas);
return bitmap;
}
二、Bitmap 轉換成 Drawable
使用 BitmapDrawable 對 Bitmap 進行強制轉換
Drawable drawable = new BitmapDrawable(bmp);
三、Bitmap 轉換成 byte[]
public static byte[] getBytes(Bitmap bitmap){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
四、byte[] 轉化成 Bitmap
public static Bitmap Bytes2Bimap(byte[] b) {
if (b.length != 0) {
return BitmapFactory.decodeByteArray(b, 0, b.length);
} else {
return null;
}
}