您的位置:首页 > 其它

Drawable、Bitmap、byte[]之间的转换(转)

2014-12-11 13:16 429 查看
android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:

 一、Bitmap转Drawable

Bitmap bm=xxx; //xxx根据你的情况获取

BitmapDrawable
bd=new BitmapDrawable(bm);
因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

二、 Drawable转Bitmap

转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。
Drawable d=xxx; //xxx根据自己的情况获取drawable

BitmapDrawable bd = (BitmapDrawable) d;

Bitmap bm = bd.getBitmap();
最终bm就是我们需要的Bitmap对象了。

// 从资源中获取Bitmap
public static Bitmap getBitmapFromResources(Activity act, int resId) {
Resources res = act.getResources();
return BitmapFactory.decodeResource(res, resId);
}

// byte[] → Bitmap
public static Bitmap convertBytes2Bimap(byte[] b) {
if (b.length == 0) {
return null;
}
return BitmapFactory.decodeByteArray(b, 0, b.length);
}

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

// 1)Drawable → Bitmap
public static Bitmap convertDrawable2BitmapByCanvas(Drawable
drawable) {
Bitmap bitmap = Bitmap
.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
// canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}

// 2)Drawable → Bitmap
public static Bitmap convertDrawable2BitmapSimple(Drawable
drawable){
BitmapDrawable bd = (BitmapDrawable) drawable;
return bd.getBitmap();
}

// Bitmap → Drawable
public static Drawable convertBitmap2Drawable(Bitmap bitmap) {
BitmapDrawable bd = new BitmapDrawable(bitmap);
// 因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
return bd;
}

1、Drawable → Bitmap

Java代码  



public static Bitmap drawableToBitmap(Drawable drawable){

          

        Bitmap bitmap = Bitmap  

                        .createBitmap(  

                                        drawable.getIntrinsicWidth(),  

                                        drawable.getIntrinsicHeight(),  

                                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  

                                                        : Bitmap.Config.RGB_565);  

        Canvas canvas = new Canvas(bitmap);  

        //canvas.setBitmap(bitmap);  

        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  

        drawable.draw(canvas);  

        return bitmap;  

}  

 

2、从资源中获取Bitmap

 

Java代码  



Resources res=getResources();  

  

Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);  

 

3、Bitmap → byte[]

 

Java代码  



private byte[] Bitmap2Bytes(Bitmap bm){  

    ByteArrayOutputStream baos = new ByteArrayOutputStream();    

    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);    

    return baos.toByteArray(); 

}

 

4、 byte[] → Bitmap

Java代码  



private Bitmap Bytes2Bimap(byte[] b){  

            if(b.length!=0){  

                return BitmapFactory.decodeByteArray(b, 0, b.length);  

            }  

            else {  

                return null;  

            }  

      } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: