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

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

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

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

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

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

val options = BitmapFactory

http://www.kler.cn/news/283498.html

相关文章:

  • 第J1周:ResNet-50算法实战与解析(TensorFlow版)
  • 数据结构(邓俊辉)学习笔记】串 04——KMP算法:查询表
  • Cmake教程之二(添加一个库)
  • 网创教程自动采集wordpress插件子比主题
  • 提升可执行文件exe为管理员权限
  • 如何从头开始编写一个简单的 RPC 协议(手写 Dubbo 的自定义协议)
  • 数据库:笔记02.关系数据库
  • 刘海屏的优雅回归?华为Mate 70 Pro定义新美学
  • linux 云主机下载 rpm 包安装 oracle java jdk21 实录(华为云 EulerOS)
  • 《黑神话:悟空》爆火,对程序员的 5 点启示(2)
  • RPA自动化流程机器人:企业财务自动化的未来趋势
  • ChatTTS容器构建教程
  • C++基础知识:关系运算符重载以及相关代码演示
  • Java基础(5)- Java代码笔记2
  • 面向对象分析和设计OOA和OOD的区别和联系?
  • 服务器被渗透的表现及检测方法
  • windows安全软件之火绒杀毒的密码忘记后处理
  • erlang学习:用OTP构建系统3,应用程序服务器
  • SQL 优化实践:从慢查询到高性能更新
  • Sinc Function介绍
  • 【Python机器学习】NLP词频背后的含义——距离和相似度
  • 【二叉树进阶】--- 前中后序遍历非递归
  • python之zip函数
  • 【大模型系列篇】词向量 - 从Word2Vec到ELMo
  • C# 匿名函数 delegate(参数...){ }
  • LeetCode 热题100-41 二叉树的层序遍历
  • 如何使用 Pytest 进行测试
  • SSRF和CSRF实战复现
  • 【自动驾驶】决策规划算法概述
  • Kafka消息积压的典型场景及解决方案