Bitmap和Drawable相互转换方法!!!

来源:互联网 发布:mac鼠标右键功能 编辑:程序博客网 时间:2024/06/05 13:13
很多开发者表示,不知道AndroidDrawableBitmap之间如何相关转换。下面Android123给大家两种比较简单高效的方法。

一、Bitmap转Drawable
  1.   Bitmap bm=xxx; //xxx根据你的情况获取
  2.   BitmapDrawable bd=BitmapDrawable(bm);
复制代码
Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

二、 Drawable转Bitmap

转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。
  1. Drawable d=xxx; //xxx根据自己的情况获取drawable
  2. BitmapDrawable bd = (BitmapDrawable) d;
  3. Bitmap bm = bd.getBitmap();
复制代码

最终bm就是我们需要的Bitmap对象了。


R资源图片转bitmap:

Bitmap bmp=BitmapFactory.decodeResource(r, R.drawable.icon);Bitmap newb = Bitmap.createBitmap( 300, 300, Config.ARGB_8888 ); Canvas canvasTemp = new Canvas( newb );   canvasTemp.drawBitmap(bmp, 50, 50, p);

1.  Bitmap 转化为 byteByteArrayOutputStream out = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);byte[] array= out.toByteArray(); 2. byte转化为bitmapfinal ContentResolver contentResolver = context.getContentResolver();final PackageManager manager = context.getPackageManager();final Cursor c = contentResolver.query(uri, null, null, null, null);final int icon3DIndex = c.getColumnIndexOrThrow(ColumnName);byte[] data = c.getBlob(icon3DIndex);Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);3. bitmap转化为DrawableDrawable drawable = new FastBitmapDrawable(bitmap);...

4. Drawable转化为bitmap a. BitmapDrawable, FastBitmapDrawable直接用getBitmap b. 其他类型的Drawable用Canvas画到一个bitmap上      Canvas canvas = new Canvas(bitmap)      drawable.draw(canvas)

android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:

1、Drawable → Bitmap

 

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

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

Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);3、Bitmap → byte[]

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

 

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


原创粉丝点击