当前位置: 首页 > news >正文

Android如何高效的加载大型位图

图片有各种形状和大小。在很多情况下,它们的大小超过了典型应用界面的要求。例如,系统“图库”应用会显示使用 Android 设备的相机拍摄的照片,这些照片的分辨率通常远高于设备的屏幕密度。

鉴于使用的内存有限,理想情况下您只希望在内存中加载较低分辨率的版本。分辨率较低的版本应与显示该版本的界面组件的大小相匹配。分辨率更高的图片不会带来任何明显的好处,但仍会占用宝贵的内存,并且会因为额外的动态缩放而产生额外的性能开销。

接下来,我们将向您介绍如何通过在内存中加载较小的下采样版本来解码大型位图,从而不超出每个应用的内存限制。

BitmapFactory 类提供了几种用于从各种来源创建 Bitmap 的解码方法(decodeByteArray()、decodeFile()、decodeResource() 等),可以根据您的图片数据源选择最合适的解码方法。这些方法尝试为构造的位图分配内存,因此很容易导致 OutOfMemory 异常。每种类型的解码方法都有额外的签名,允许您通过 BitmapFactory.Options 类指定解码选项。在解码时将 inJustDecodeBounds 属性设置为 true 可避免内存分配,为位图对象返回 null,但设置 outWidth、outHeight 和 outMimeType。此方法可让您在构造位图并为其分配内存之前读取图片数据的尺寸和类型,示例代码如下:

val options = BitmapFactory.Options().apply {inJustDecodeBounds = true
}
BitmapFactory.decodeResource(resources, R.id.myimage, options)
val imageHeight: Int = options.outHeight
val imageWidth: Int = options.out

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ELK基础搭建
  • 22.计算球体积
  • 二叉树的介绍
  • 2024.8.26
  • 景联文科技:专业人像采集服务,助力人像采集在多领域应用
  • npm阿里云制品仓库
  • C++竞赛初阶L1-14-第六单元-数组(31~33课)542: T456472 数组逆序重存放
  • 使用 ECharts 进行数据可视化
  • Python单例模式:深入解析与应用
  • vue+uniapp
  • 如何使用ssm实现ssm框架的购物网站+vue
  • SpringBoot项目多线程实现定时任务-只需要三步
  • 通过Python绘制不同数据类型适合的可视化图表
  • CSS文本属性与字体
  • 秋招力扣Hot100刷题总结——堆
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • go语言学习初探(一)
  • JavaScript学习总结——原型
  • Mac转Windows的拯救指南
  • magento 货币换算
  • Next.js之基础概念(二)
  • tensorflow学习笔记3——MNIST应用篇
  • VUE es6技巧写法(持续更新中~~~)
  • Vue 动态创建 component
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 阿里云购买磁盘后挂载
  • 搭建gitbook 和 访问权限认证
  • 利用DataURL技术在网页上显示图片
  • 如何优雅地使用 Sublime Text
  • 手写双向链表LinkedList的几个常用功能
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 一个完整Java Web项目背后的密码
  • 在Docker Swarm上部署Apache Storm:第1部分
  • FaaS 的简单实践
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #100天计划# 2013年9月29日
  • #70结构体案例1(导师,学生,成绩)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $.ajax()方法详解
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (附源码)ssm高校实验室 毕业设计 800008
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (三分钟)速览传统边缘检测算子
  • (转) Android中ViewStub组件使用
  • (转)Mysql的优化设置
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net FrameWork简介,数组,枚举
  • .NET Standard 的管理策略
  • .net 简单实现MD5
  • .NET 解决重复提交问题
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例