搜索
热搜: 活动 交友 discuz
查看: 12648|回复: 0
打印 上一主题 下一主题

Bitmap,byte[],Drawable相互转化

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2018-4-25 09:39:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一:resources中获取Bitmap

  1. Resources res = getResources();
  2. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);
复制代码



二:Bitmap 转 byte[]格式

  1. public byte[] Bitmap2Bytes(Bitmap bm) {
  2.         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  3.         bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
  4.         return baos.toByteArray();
  5.   }
复制代码


三:byte[] 转 Bitmap格式
  1. public Bitmap Bytes2Bimap(byte[] b) {
  2.         if (b.length != 0) {
  3.             return BitmapFactory.decodeByteArray(b, 0, b.length);
  4.         } else {
  5.             return null;
  6.         }
  7.     }
复制代码
四:Bitmap缩放

  1. public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {
  2.         int w = bitmap.getWidth();
  3.         int h = bitmap.getHeight();
  4.         Matrix matrix = new Matrix();
  5.         float scaleWidth = ((float) width / w);
  6.         float scaleHeight = ((float) height / h);
  7.         matrix.postScale(scaleWidth, scaleHeight);
  8.         Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
  9.         return newbmp;
  10.     }
复制代码
五:将Drawable转化为Bitmap

  1. public static Bitmap drawableToBitmap(Drawable drawable) {
  2.         // 取 drawable 的长宽
  3.         int w = drawable.getIntrinsicWidth();
  4.         int h = drawable.getIntrinsicHeight();

  5.         // 取 drawable 的颜色格式
  6.         Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
  7.                 : Bitmap.Config.RGB_565;
  8.         // 建立对应 bitmap
  9.         Bitmap bitmap = Bitmap.createBitmap(w, h, config);
  10.         // 建立对应 bitmap 的画布
  11.         Canvas canvas = new Canvas(bitmap);
  12.         drawable.setBounds(0, 0, w, h);
  13.         // 把 drawable 内容画到画布中
  14.         drawable.draw(canvas);
  15.         return bitmap;
  16.     }
复制代码



六:获得圆角图片

  1. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
  2.         int w = bitmap.getWidth();
  3.         int h = bitmap.getHeight();
  4.         Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
  5.         Canvas canvas = new Canvas(output);
  6.         final int color = 0xff424242;
  7.         final Paint paint = new Paint();
  8.         final Rect rect = new Rect(0, 0, w, h);
  9.         final RectF rectF = new RectF(rect);
  10.         paint.setAntiAlias(true);
  11.         canvas.drawARGB(0, 0, 0, 0);
  12.         paint.setColor(color);
  13.         canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
  14.         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  15.         canvas.drawBitmap(bitmap, rect, rect, paint);

  16.         return output;
  17.     }
复制代码


七:Bitmap转换成Drawable

  1. Bitmap bm=xxx; //xxx根据你的情况获取
  2. BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
  3. //因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
复制代码


八:Drawable缩放

  1. public static Drawable zoomDrawable(Drawable drawable, int w, int h) {
  2.         int width = drawable.getIntrinsicWidth();
  3.         int height = drawable.getIntrinsicHeight();
  4.         // drawable转换成bitmap
  5.         Bitmap oldbmp = drawableToBitmap(drawable);
  6.         // 创建操作图片用的Matrix对象
  7.         Matrix matrix = new Matrix();
  8.         // 计算缩放比例
  9.         float sx = ((float) w / width);
  10.         float sy = ((float) h / height);
  11.         // 设置缩放比例
  12.         matrix.postScale(sx, sy);
  13.         // 建立新的bitmap,其内容是对原bitmap的缩放后的图
  14.        Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,matrix, true);
  15.         return new BitmapDrawable(newbmp);
  16.     }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-4 06:08 , Processed in 0.064932 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表