热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

AndroidBitmapUtils工具类使用详解

这篇文章主要为大家详细介绍了AndroidBitmapUtils工具类的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android BitmapUtils工具类的具体代码,供大家参考,具体内容如下

public final class BitmapUtils {
  public static final String TAG = "BitmapUtil";
  private static int sShotScreenWidth = 480;
  private static int sShotScreenHeight = 720;
  private static int sShotScreenSize = sShotScreenWidth * sShotScreenHeight;

  @SuppressLint("StaticFieldLeak")
  private static Context mContext;
  @SuppressLint("StaticFieldLeak")
  private static Activity mActivity;

  public void init(Context context,Activity ac) {
    mCOntext=context;
    mActivity=ac;

    DisplayMetrics dm = new DisplayMetrics();
    ac.getWindowManager().getDefaultDisplay().getMetrics(dm);
    //获取屏幕分辨率
    sShotScreenWidth = dm.widthPixels;
    sShotScreenHeight = dm.heightPixels;
    sShotScreenSize = sShotScreenWidth * sShotScreenHeight;
  }

  /**
   * 图片合成
   * 
   * @param bitmap 位图1
   * @param mark 位图2
   * @return Bitmap
   */
  public static Bitmap createBitmap(Bitmap bitmap, Bitmap mark) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    int mW = mark.getWidth();
    int mH = mark.getHeight();
    Bitmap newbitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个长宽一样的位图

    Canvas cv = new Canvas(newbitmap);
    cv.drawBitmap(bitmap, 0, 0, null);// 在 0,0坐标开始画入bitmap
    cv.drawBitmap(mark, w - mW , h - mH , null);// 在右下角画入水印mark
    cv.save(Canvas.ALL_SAVE_FLAG);// 保存
    cv.restore();// 存储
    return newbitmap;
  }

  /**
   * 放大缩小图片
   * @param bitmap 位图
   * @param w 新的宽度
   * @param h 新的高度
   * @return Bitmap
   */
  public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    Matrix matrix = new Matrix();
    float scaleWidht = ((float) w / width);
    float scaleHeight = ((float) h / height);
    matrix.postScale(scaleWidht, scaleHeight);
    return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
  }

  /**
   * 旋转图片
   * @param bitmap 要旋转的图片
   * @param angle 旋转角度
   * @return bitmap
   */
  public static Bitmap rotate(Bitmap bitmap,int angle) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
        bitmap.getHeight(), matrix, true);
  }

  /**
   * 圆形图片
   *@param source 位图
   * @param strokeWidth 裁剪范围 0表示最大
   * @param bl 是否需要描边
   * @param bl 画笔粗细
   * @param bl 颜色代码
   * @return bitmap
   */
  public static Bitmap createCircleBitmap(Bitmap source, int strokeWidth, boolean bl,int edge,int color) {

    int diameter = source.getWidth()  1) {
      // 缩放图片 此处用到平方根 将宽带和高度压缩掉对应的平方根倍
      // (保持宽高不变,缩放后也达到了最大占用空间的大小)
      return scaleWithWH(bitmap,bitmap.getWidth() / Math.sqrt(i),
              bitmap.getHeight() / Math.sqrt(i));
    }
    return null;
  }

  /***
   * 图片缩放
   *@param bitmap 位图
   * @param w 新的宽度
   * @param h 新的高度
   * @return Bitmap
   */
  public static Bitmap scaleWithWH(Bitmap bitmap, double w, double h) {
    if (w == 0 || h == 0 || bitmap == null) {
      return bitmap;
    } else {
      int width = bitmap.getWidth();
      int height = bitmap.getHeight();

      Matrix matrix = new Matrix();
      float scaleWidth = (float) (w / width);
      float scaleHeight = (float) (h / height);
      
      matrix.postScale(scaleWidth, scaleHeight);
      return Bitmap.createBitmap(bitmap, 0, 0, width, height,
          matrix, true);
    }
  }

  /**
   * YUV视频流格式转bitmap
   * @param data YUV视频流格式
   * @return width 设置宽度
   * @return width 设置高度
   */
  public static Bitmap getBitmap(byte[] data, int width, int height) {
    Bitmap bitmap;
    YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, width, height, null);
    //data是onPreviewFrame参数提供
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    yuvimage.compressToJpeg(new Rect(0, 0, yuvimage.getWidth(), yuvimage.getHeight()), 100, baos);//
    // 80--JPG图片的质量[0-100],100最高
    byte[] rawImage = baos.toByteArray();
    BitmapFactory.Options optiOns= new BitmapFactory.Options();
    SoftReference softRef = new SoftReference(BitmapFactory.decodeByteArray(rawImage, 0, rawImage
        .length, options));
    bitmap = softRef.get();
    return bitmap;
  }

  /**
   * 图片路径转bitmap
   * @param file 图片的绝对路径
   * @return bitmap
   */
  public static Bitmap getAssetImage(String file) {
    Bitmap bitmap = null;
    AssetManager am = mActivity.getAssets();
    try {
      InputStream is = am.open(file);
      bitmap = BitmapFactory.decodeStream(is);
      is.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return bitmap;
  }

  /**
   * bitmap保存到指定路径
   * @param file 图片的绝对路径
   * @param file 位图
   * @return bitmap
   */
  public static boolean saveFile(String file, Bitmap bmp) {
    if(TextUtils.isEmpty(file) || bmp == null) return false;
    
    File f = new File(file);
    if (f.exists()) {
      f.delete();
    }else {
      File p = f.getParentFile();
      if(!p.exists()) {
        p.mkdirs();
      }
    }
    try {
      FileOutputStream out = new FileOutputStream(f);
      bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
      out.flush();
      out.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return false;
    }
    return true;
  }

  /**
   * 回收一个未被回收的Bitmap
   *@param bitmap
   */
  public static void doRecycledIfNot(Bitmap bitmap) {
    if (!bitmap.isRecycled()) {
      bitmap.recycle();
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Mac上配置环境变量,实现Python3的命令行调用的步骤。首先通过官网下载或使用brew安装Python3,并找到安装路径。然后将该路径添加到环境变量中,可以通过编辑.bash_profile文件或执行source命令来实现。配置完成后,即可在命令行中直接调用Python3。 ... [详细]
  • 图片复制到服务器 方向变了_双服务器热备更新配置文件步骤问题及解决方法
    本文介绍了在将图片复制到服务器并进行方向变换的过程中,双服务器热备更新配置文件所出现的问题及解决方法。通过停止所有服务、更新配置、重启服务等操作,可以避免数据中断和操作不规范导致的问题。同时还提到了注意事项,如Avimet版本的差异以及配置文件和批处理文件的存放路径等。通过严格执行切换步骤,可以成功进行更新操作。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文详细介绍了Vim编辑器中的三种模式(命令模式、末行模式和编辑模式)以及它们之间的操作区别和切换方法。Vim编辑器凭借其多种命令快捷键和高效率的操作方式,得到了广大厂商和用户的认可。对于想要高效操作文本的用户来说,了解这些模式的使用方法是必不可少的。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • linux 禁止指定ip访问
    linux中如何禁止指定的ip访问呢?比如被别人暴力破解,被别人使用不同的密码尝试登录:所以我想直接禁用这些ip的访问.怎么办呢?解决方案:修改配置文件etchosts.deny把 ... [详细]
  • 一、修改注册表去掉桌面图标小箭头1按下win+R组合快捷键,打开windows10系统的“运行”窗口,输入“regedit”,打开注册表编辑器,找到HKEY_CLASSES_ROOT\lnkfi ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
author-avatar
新洋之家140
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有