- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android 图片加载性能优化总结
一、Android Bitmap加载大尺寸图片优化:?
压缩原因:1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为;2.最重要的是图片过大时直接加载原图会造成OOM异常(out of memory内存溢出)所以一般对于大图我们需要进行下压缩处理看不懂英文的话木有关系,本篇会有介绍主要处理思路是:1.获取图片的像素宽高(不加载图片至内存中,所以不会占用资源)2.计算需要压缩的比例3.按将图片用计算出的比例压缩,并加载至内存中使用官网大图片加载教程(上面网址里的)对应代码就是:
/**
* 获取压缩后的图片
*?@param?res
*?@param?resId
*?@param?reqWidth? ?? ?? ?? ?所需图片压缩尺寸最小宽度
*?@param?reqHeight? ?? ?? ???所需图片压缩尺寸最小高度
*?@return
*/
public?static?Bitmap decodeSampledBitmapFromResource(Resources res,?int?resId, int?reqWidth,?int?reqHeight) {
? ?
? ??// 首先不加载图片,仅获取图片尺寸
? ??final?BitmapFactory.Options options =?new?BitmapFactory.Options();
? ??// 当inJustDecodeBounds设为true时,不会加载图片仅获取图片尺寸信息
? ? options.inJustDecodeBounds?=?true;
? ??// 此时仅会将图片信息会保存至options对象内,decode方法不会返回bitmap对象
? ? BitmapFactory.decodeResource(res, resId, options);
? ??// 计算压缩比例,如inSampleSize=4时,图片会压缩成原图的1/4
? ? options.inSampleSize?=?calculateInSampleSize(options, reqWidth, reqHeight);
? ??// 当inJustDecodeBounds设为false时,BitmapFactory.decode...就会返回图片对象了
? ? options.?inJustDecodeBounds?=?false;
? ??// 利用计算的比例值获取压缩后的图片对象
? ??return?BitmapFactory.decodeResource(res, resId, options);
}
代码详解:
核心方法是BitmapFactory.decode...(...., options)
...的意思是此外还有一系列的decodeFile/decodeStream等等方法,都是利用options灵活解析获取图片,
只不过解析图片的来源不同罢了,比如网络图片获取,一般就是解析字节流信息然后decode获取图片实例
Options是图片配置信息,参数详细介绍下:
inJustDecodeBounds?是否只解析边界? ???设为true时去decode获取图片,只会加载像素宽高信息? ???设为false时decode则会完全加载图片inSampleSize?压缩比例? ???比如原图200*300,如果值是2时会压缩成100*150; 是4则图片压缩成50*75最好是2的幂数,比如2 4 8 16 .....outHeight?图片原高度outWidth?图片原宽度其他参数自行研究,这里暂时只用到这几个decodeSampledBitmapFromResource方法内的三段代码对应上面的三步流程难点在于中间那步,压缩比例的计算,官网同样提供了个calculateInSampleSize方法其中reqWidth和reqHeight是所需图片限定最小宽高值
/**
* 计算压缩比例值
*?@param?options? ?? ? 解析图片的配置信息
*?@param?reqWidth? ?? ?? ?? ?所需图片压缩尺寸最小宽度
*?@param?reqHeight? ?? ?? ???所需图片压缩尺寸最小高度
*?@return
*/
public?static?int?calculateInSampleSize(BitmapFactory.Options options, int?reqWidth,?int?reqHeight) {
? ?? ??// 保存图片原宽高值
? ?? ??final?
您可能关注的文档
最近下载
- 2022中国能建校园招聘试题及答案解析.docx VIP
- 2025中国能建电规总院招聘(北京)笔试备考题库及答案解析.docx VIP
- 年产200吨聚烯烃催化剂技改项目环评报告书.pdf
- 上海浦东新区中小学教师考试题目汇总2024.docx VIP
- 血细胞形态识别培训课件终版.ppt VIP
- (一模)吉林市2025-2026学年度高三第一次调研测试 英语试卷(含答案解析).docx
- 《汽车维修质量检验》电子教案.pdf
- 工程勘测设计行业质量管理体系专业审核作业指导书.PDF VIP
- 2.2开通抖音直播《直播营销》教学课件.pptx VIP
- 综合实践进位制的认识与探究课件人教版七年级数学上册(1).pptx
原创力文档


文档评论(0)