Android项目中如何优化Bitmap的加载?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
一 . 高效加载 Bitmap
BitMapFactory 提供了四类方法: decodeFile,decodeResource,decodeStream 和 decodeByteArray 分别用于从文件系统,资源,输入流以及字节数组中加载出一个 Bitmap 对象。
高效加载 Bitmap 很简单,即采用 BitMapFactory.options
来加载所需要尺寸图片。BitMapFactory.options
就可以按照一定的采样率来加载缩小后的图片,将缩小后的图片置于 ImageView 中显示。
通过采样率即可高效的加载图片,遵循如下方式获取采样率:
- 将
BitmapFactory.Options
的 inJustDecodeBounds 参数设置为 true 并加载图片 - 从
BitmapFactory.Options
中取出图片的原始宽高信息,即对应于 outWidth 和 outHeight 参数 - 根据采样率的规则并结合目标 View 的所需大小计算出采样率 inSampleSize
- 将
BitmapFactory.Options
的 injustDecodeBounds 参数设置为 false,然后重新加载图片
过上述四个步骤,加载出的图片就是最终缩放后的图片,当然也有可能没有缩放。
代码实现如下:
public Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(res, resId, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeResource(res, resId, options);}public int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { if (reqWidth == 0 || reqHeight == 0) { return 1; } // Raw height and width of image final int height = options.outHeight; final int width = options.outWidth; Log.d(TAG, "origin, w= " + width + " h=" + height); int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int halfHeight = height / 2; final int halfWidth = width / 2; // Calculate the largest inSampleSize value that is a power of 2 and // keeps both height and width larger than the requested height and width. while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) { inSampleSize *= 2; } } Log.d(TAG, "sampleSize:" + inSampleSize); return inSampleSize;}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1142
183.71 KB下载数642
644.84 KB下载数2755
相关文章
发现更多好内容猜你喜欢
AI推送时光机Android项目中如何优化Bitmap的加载
后端开发2023-05-31
Android Bitmap的加载优化与Cache相关介绍
后端开发2022-06-06
Git如何优化Java项目的实时加载?
后端开发2023-09-21
如何在使用 PHP 和 Django 的项目中优化资源加载?
后端开发2023-08-28
vue项目中怎么优化首页加载速度
后端开发2024-04-02
如何在PHP项目中优化图片加载速度和压缩大小?
后端开发2023-11-02
Android中RecyclerView 滑动时图片加载的优化
后端开发2022-06-06
如何在Java项目中动态加载类
后端开发2023-06-06
vue项目中如何使用cdn优化
后端开发2024-04-02
如何优化 PHP 代码中的加载速度?
后端开发2023-08-12
如何优化Java中的缓存加载算法?
后端开发2023-09-27
VUE项目中如何加载已保存的笔记
后端开发2024-04-02
Python中如何优化数据加载速度?
后端开发2023-08-11
android中H5本地缓存加载优化的方法
后端开发2023-06-14
如何优化Python中HTTP对象的加载速度?
后端开发2023-09-28
DownloadManager下载器如何在Android项目中使用
后端开发2023-05-31
PHP开发中如何优化图片压缩和优化加载
后端开发2023-10-21
vuejs项目打包之后首屏加载优化的示例分析
后端开发2024-04-02
Laravel和PHP:如何在项目中高效加载依赖项?
后端开发2023-07-24
vue之项目中如何封装loading加载效果
后端开发2022-12-08
咦!没有更多了?去看看其它编程学习网 内容吧