1. 程式人生 > >Android 中 Bitmap 和 Drawable 相互轉換的方法

Android 中 Bitmap 和 Drawable 相互轉換的方法

一、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;
        }

    }