热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图片加载,压缩,缓存

Bitmap的高效加载BitmapFactory提供了四类方法:decodeFiledecodeStreamdecodeResourcedecodeByteArray;分别送文件系

Bitmap的高效加载

BitmapFactory提供了四类方法:decodeFile decodeStream decodeResource decodeByteArray;

分别送 文件系统 资源 输入流 字节数组中加载出一个bitmap对象;其中decodeFile decodeResource间接调用了decodeStream;

图片存储格式

《图片加载,压缩,缓存》 存储方法
《图片加载,压缩,缓存》

我们知道ARGB指的是一种色彩模式,里面A代表Alpha,R表示red,G表示green,B表示blue.

其实所有的可见色都是右红绿蓝组成的,所以红绿蓝又称为三原色,每个原色都存储着所表示颜色的信息值

ALPHA_8就是Alpha由8位组成

ARGB_4444就是由4个4位组成即16位

ARGB_8888就是由4个8位组成即32位

RGB_565就是R为5位,G为6位,B为5位共16位

位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真

高效加载bitmap核心思想就是采用BitmapFactory.Options来加载所需要的尺寸图片。通过bitmapFactory.Options可以按一定采样率来加载缩小后的图片 然后再显示在imageView中这样会降低内存占用从而从一定程度上避免OOM提供加载性能。

BitmapFactory.Options来缩放图片主要是通过它的inSampleSize参数即采样率 当inSampleSize为1时采样后的图片为原始图片大小;为2时为原始图片的二分之一,像素数为原始图的四分之一内存占用大小也为四分之一;inSampleSize的取值应该为2的指数 1 2 4  6 8 ;

如何获取采样率?

1 将BitmapFactory.Options的inJustDecodeBounds参数设置为true;

2 从bitmapFactory.Options中取出图片的原始宽高信息对应与outWidth和outHeight;

3 根据采样率规则并结合目标view计算出所需要的采样率inSampleSize;

4 将BitmapFactory.options的injustDecodeBounds参数设置为false 然后重新加载图片view;

进过这四个步骤加载出来的图片就是最终缩放后的图片

Android中的缓存策略;

缓存策略核心思想:程序第一次从网络加载图片后将其缓存在存储设备上这样下次使用图片时候就不用从网络中获取了为用户节省了流量;有时候为了提升用户体验还会吧图片在内存中缓存一份这样当app打算从网络中请求图片时候程序就会先从内存中获取如果没有就从存储设备中获取如果存储设备也没有再从网络加载;

同样这种思想也适合与其他文件;

缓存策略主要包含缓存的 添加 获取和 删除 三类操作;

为什么要删除缓存呢 因为内存的大小是有限的因此在使用缓存的是总要为缓存设置一个最大容量;

android中常用的缓存算法为LRU(Least Recently Used)

LRU有两种LruCache(内存缓存)和DiskLruCache(存储设备缓存);

LruCache是一个泛型类内部采用了一个LinkedHashMap以强引用的方式存储外界的缓存对象 是线程安全的;

提供了get和put方法来完成缓存的获取和添加操作;

强引用  直接的对象引用

软引用  当一个对象只有软引用时 系统内存不足时就会被GC回收掉;

弱引用  当一个对象只有弱引用时 可能随便会被Gc回收掉;

DiskLruCache不属于androidSDK的一部分

DiskLruCache的创建  

不能通过构造方法创建而是提供了open 方法创建自身 

open方法的四个参数(文件系统的路径,应用的版本号,单个节点对应的数据个数一般为一,缓存文件的总大小);

缓存的添加  

添加操作  通过Editor完成

缓存的获取  通过get方法得到一个Snapshot对象 在通过这个对象就可得到缓存文件的输入流


推荐阅读
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 解决Expo XDE 2.22.1版本启动错误
    根据问题描述,用户在将Expo升级至2.22.1版本后,在尝试打开项目时遇到了错误。本文提供了详细的错误分析及解决方案。 ... [详细]
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 深入理解Flink的水印机制
    本文详细探讨了Apache Flink框架中的水印机制,这是一种用于处理数据流中时间不一致问题的重要工具。通过介绍水印的工作原理及其在实际应用中的实现方式,帮助读者更好地理解和利用这一功能。 ... [详细]
author-avatar
攻玉是我_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有