Android進階之Bitmap、Drawable、byte[]轉換

將Drawable轉化為Bitmap

[java] public static Bitmap drawableToBitmap(Drawable drawable) { 
        // 取 drawable 的長寬  
        int w = drawable.getIntrinsicWidth(); 
        int h = drawable.getIntrinsicHeight(); 
 
        // 取 drawable 的顏色格式  
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 
                : Bitmap.Config.RGB_565; 
        // 建立對應 bitmap  
        Bitmap bitmap = Bitmap.createBitmap(w, h, config); 
        // 建立對應 bitmap 的畫佈  
        Canvas canvas = new Canvas(bitmap); 
        drawable.setBounds(0, 0, w, h); 
        // 把 drawable 內容畫到畫佈中  
        drawable.draw(canvas); 
        return bitmap; 
    } 
public static Bitmap drawableToBitmap(Drawable drawable) {
  // 取 drawable 的長寬
  int w = drawable.getIntrinsicWidth();
  int h = drawable.getIntrinsicHeight();

  // 取 drawable 的顏色格式
  Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
    : Bitmap.Config.RGB_565;
  // 建立對應 bitmap
  Bitmap bitmap = Bitmap.createBitmap(w, h, config);
  // 建立對應 bitmap 的畫佈 www.aiwalls.com
  Canvas canvas = new Canvas(bitmap);
  drawable.setBounds(0, 0, w, h);
  // 把 drawable 內容畫到畫佈中
  drawable.draw(canvas);
  return bitmap;
 }
從資源中獲取Bitmap
[java]  Resources res = getResources(); 
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon); 
  Resources res = getResources();
  Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);

Bitmap → byte[]
[java] public byte[] Bitmap2Bytes(Bitmap bm) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bm.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    return baos.toByteArray(); 

 public byte[] Bitmap2Bytes(Bitmap bm) {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
  return baos.toByteArray();
 }

byte[] → Bitmap
[java] public Bitmap Bytes2Bimap(byte[] b) { 
    if (b.length != 0) { 
        return BitmapFactory.decodeByteArray(b, 0, b.length); 
    } else { 
        return null; 
    } 

 public Bitmap Bytes2Bimap(byte[] b) {
  if (b.length != 0) {
   return BitmapFactory.decodeByteArray(b, 0, b.length);
  } else {
   return null;
  }
 }

Bitmap轉換成Drawable
[java] Bitmap bm=xxx; //xxx根據你的情況獲取  
BitmapDrawable bd= new BitmapDrawable(getResource(), bm);  
因為BtimapDrawable是Drawable的子類,最終直接使用bd對象即可。 
Bitmap bm=xxx; //xxx根據你的情況獲取
BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
因為BtimapDrawable是Drawable的子類,最終直接使用bd對象即可。

摘自 落日小屋
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *