一、Bitmap转Drawable
- Bitmap bm=xxx; //xxx根据你的情况获取
- BitmapDrawable bd=BitmapDrawable(bm);
二、 Drawable转Bitmap
转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。
- Drawable d=xxx; //xxx根据自己的情况获取drawable
- BitmapDrawable bd = (BitmapDrawable) d;
- 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 转化为 byte ByteArrayOutputStream out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); byte[] array= out.toByteArray(); 2. byte转化为bitmap final 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转化为Drawable Drawable 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 ; } }