全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android Bitmap压缩方式分析

Android Bitmap压缩方式分析

在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成缩略图。

在Android开发中我们都会遇到在一个100*100的ImageView上显示一张过大的图片,如果直接把这张图片显示上去对我们应用没有一点好处反而存在OOM的危险,所以我们有必要采用一种有效压缩方式来显示上去。

private void calculateBitmapInSimpleSize() {
    Bitmap _bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg_homepage);
    getBitmapDatas(_bitmap);

    BitmapFactory.Options optioins = new BitmapFactory.Options();
    optioins.inJustDecodeBounds = true;
//    optioins.inPreferredConfig = Bitmap.Config.RGB_565;//11158560
    optioins.inPreferredConfig = Bitmap.Config.ARGB_8888;//22317120
    BitmapFactory.decodeResource(getResources(), R.drawable.bg_homepage, optioins);
    int reqWidth = optioins.outWidth;
    int reqHeight = optioins.outHeight;

    Log.w(TAG, "reqWidth = " + reqWidth);
    Log.w(TAG, "reqHeight = " + reqHeight);

    int inSampleSize = 1;
    final int widthRatio = Math.round((float)reqWidth / 100f);
    final int heigthRatio = Math.round((float) reqHeight / 100f);
    // 取最小值 这将保证压缩出来的图片大于或者等于请求的宽度或者高度
    inSampleSize = widthRatio > heigthRatio ? heigthRatio : widthRatio;
    Log.w(TAG, "first inSampleSize = " + inSampleSize);

    final int totalPixel = 100 * 100;
    final int totalReqPixel = reqWidth * reqHeight * 2;

    Log.w(TAG, "totalReqPixel = " + totalReqPixel);

    while (totalPixel / (inSampleSize * inSampleSize) > totalReqPixel) {
      Log.w(TAG, "totalPixel = " + (totalPixel / (inSampleSize * inSampleSize)));
      inSampleSize ++;
    }

    Log.w(TAG, "LastInSampleSize = " + inSampleSize);

    optioins.inJustDecodeBounds = false;

    Bitmap lastBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg_homepage, optioins);
    getBitmapDatas(lastBitmap);

    mImageView.setImageBitmap(lastBitmap);

  }

通过打印log我们可以清楚发现一张原始的图片占有22317120字节,经过压缩后11158560(RGB_565)/ 22317120(RGB8888)明显所占用的内存都减少了,尽量降低这种情况带来的OOM。

做法:

1.optioins.inJustDecodeBounds = true设置为true可用于读取该bitmap的宽高且不会占用内存。

2.optioins.inPreferredConfig = Bitmap.Config.RGB_565设置在内存中以占用最少的方式,相比RGB_8888只有其一半的内存占有。

3.final int widthRatio = Math.round((float)reqWidth / 100f);
final int heigthRatio = Math.round((float) reqHeight / 100f);
inSampleSize = widthRatio > heigthRatio ? heigthRatio : widthRatio;

计算压缩比例,取最小值 这将保证压缩出来的图片大于或者等于请求的宽度或者高度。

4.在要显示到ImageView的时候optioins.inJustDecodeBounds = false设回false这样就能正常显示了

// 计算bitmap所占内存值
 public void getBitmapDatas(Bitmap bitmap) {
     Log.w(TAG, "Bitmap size = " + bitmap.getByteCount());
  }

采用以上的压缩方式 我们就能避免一张过大的图片”浪费”的显示在ImageView上造成内存消耗过大。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # Bitmap压缩方式  # bitmap图片压缩  # 详解android 通过uri获取bitmap图片并压缩  # Android实现图片压缩(bitmap的六种压缩方式)  # Android Bitmap压缩方法的选择详解  # android bitmap compress(图片压缩)代码  # 详解Android Bitmap的常用压缩方式  # 过大  # 就能  # 这将  # 最小值  # 可用于  # 都能  # 我们可以  # 这张  # 希望能  # 这种情况  # 有必要  # 谢谢大家  # 设置为  # 所占  # 两类  # 中以  # 就可以  # 正常显示  # 不改变  # 大致上 


相关文章: 建站之星备案是否影响网站上线时间?  建站之星安装路径如何正确选择及配置?  太平洋网站制作公司,网络用语太平洋是什么意思?  上海网站制作开发公司,上海买房比较好的网站有哪些?  html制作网站的步骤有哪些,iapp如何添加网页?  如何生成腾讯云建站专用兑换码?  香港服务器选型指南:免备案配置与高效建站方案解析  如何在香港免费服务器上快速搭建网站?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  高防服务器如何保障网站安全无虞?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  建站主机助手选型指南:2025年热门推荐与高效部署技巧  宝塔建站教程:一键部署配置流程与SEO优化实战指南  网站企业制作流程,用什么语言做企业网站比较好?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何快速登录WAP自助建站平台?  名字制作网站免费,所有小说网站的名字?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  ppt制作免费网站有哪些,ppt模板免费下载网站?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  网站网页制作专业公司,怎样制作自己的网页?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  高防服务器租用如何选择配置与防御等级?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  建站之星收费标准详解:套餐费用及年费价格表一览  济南网站建设制作公司,室内设计网站一般都有哪些功能?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何通过WDCP绑定主域名及创建子域名站点?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  建站之星安装后界面空白如何解决?  学校建站服务器如何选型才能满足性能需求?  非常酷的网站设计制作软件,酷培ai教育官方网站?  建站三合一如何选?哪家性价比更高?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  如何快速上传建站程序避免常见错误?  网站制作公司排行榜,抖音怎样做个人官方网站  安云自助建站系统如何快速提升SEO排名?  常州企业网站制作公司,全国继续教育网怎么登录?  西安专业网站制作公司有哪些,陕西省建行官方网站?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何快速生成高效建站系统源代码?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  如何获取免费开源的自助建站系统源码?  c++ stringstream用法详解_c++字符串与数字转换利器  如何在七牛云存储上搭建网站并设置自定义域名?  linux top下的 minerd 木马清除方法  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  沈阳制作网站公司排名,沈阳装饰协会官方网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。