温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android 实现将本地资源图片转换成Drawable的方法

发布时间:2020-11-06 16:37:09 来源:亿速云 阅读:1787 作者:Leah 栏目:开发技术

这篇文章将为大家详细讲解有关Android 实现将本地资源图片转换成Drawable的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

整个过程的思路:

将本地图片(R.drawable.image)变成Drawable对象

将Drawable对象转换成Bitmap对象

将Bitmap对象根据指定大小创建一个新的Bitmap对象

将Bitmap对象转换成Drawable对象

代码:

1. 将本地图片(R.drawable.image)变成Drawable对象

Drawable drawable = ContextCompat.getDrawable(context, R.drawable.image);

2. 将Drawable对象转换成Bitmap对象

/**
 * 将Drawable转换为Bitmap
 * @param drawable
 * @return
 */
private Bitmap drawableToBitmap(Drawable drawable) {
  //取drawable的宽高
  int width = drawable.getIntrinsicWidth();
  int height = drawable.getIntrinsicHeight();
  //取drawable的颜色格式
  Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE 
        ? Bitmap.Config.ARGB_8888
        : Bitmap.Config.RGB_565;
  //创建对应的bitmap
  Bitmap bitmap = Bitmap.createBitmap(width, height, config);
  //创建对应的bitmap的画布
  Canvas canvas = new Canvas(bitmap);
  drawable.setBounds(0, 0, width, height);
  //把drawable内容画到画布中
  drawable.draw(canvas);
  return bitmap;
}

3. 整个流程的执行

后来发现一个更简洁的方法

/**
 * 将本地资源图片大小缩放
 * @param resId
 * @param w
 * @param h
 * @return
 */
 public Drawable zoomImage(int resId, int w, int h){
  Resources res = mContext.getResources();
  Bitmap oldBmp = BitmapFactory.decodeResource(res, resId);
  Bitmap newBmp = Bitmap.createScaledBitmap(oldBmp,w, h, true);
  Drawable drawable = new BitmapDrawable(res, newBmp);
  return drawable;
}

原来复杂的思路

/**
 * 缩放Drawable
 *@drawable 原来的Drawable
 *@w 指定的宽
 *@h 指定的高
 */
public Drawable zoomDrawable(Drawable drawable, int w, int h){
  //获取原来Drawable的宽高
  int width = drawable.getIntrinsicWidth();
  int height = drawable.getIntrinsicHeight();
  //将Drawable转换成Bitmap
  Bitmap oldbmp = drawableToBitmap(drawable);
  //计算scale
  Matrix matrix = new Matrix();
  float scaleWidth = ((float)w/width);
  float scaleHeight = ((float)h/height);
  matrix.postScale(scaleWidth, scaleHeight);
  //生成新的Bitmap
  Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true);
  //设置bitmap转成drawable后尺寸不变 
  //这个很关键后面解释!!
  DisplayMetrics metrics = new DisplayMetrics();
  manager.getDefaultDisplay().getMetrics(metrics);
  Resources resources = new Resources(mContext.getAssets(), metrics, null);
  return new BitmapDrawable(resources, newbmp);
}

学习中遇到的问题

看网上的教程是没有下面

DisplayMetrics metrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(metrics);
Resources resources = new Resources(mContext.getAssets(), metrics, null);

这段代码的。

假如我指定的宽高是200,生成的Drawable的宽高却只有100。

原来Bitmap转换成Drawable的尺寸是会变小的。

那段代码就能解决尺寸变小的问题。

如果路过的大神有更好的方法,希望能指点一下小白。

补充知识:Android中如何将res里的图片转换成Bitmap.

1.复制代码即可:

Resources res = MainActivity.this.getResources();

Bitmap bmp= BitmapFactory.decodeResource(res, R.mipmap.flower);

关于Android 实现将本地资源图片转换成Drawable的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI