Android加载超大图片

Android加载超大图片

一、目标

实现超大图片的查看功能。

  • 《金刚经 右街僧 录准公》26800 x 640(32.7M)
  • 《金刚经 王玠》15404 x 950(27.9M)
  • 《溪山清远图》17008 x 720 (23.4M)

二、体验地址

神马笔记最新版本:【神马笔记Version1.1.0_beta.apk

三、准备工作

1. 加载超大图片

2018年12月17日,华为在长沙召开新品发布会,正式发布旗下nova系列新机华为nova 4,主打极点全面屏及4800万超高像素拍照体验。

以RGB_565图片格式计算4800万像素占用内存大小。

2 x 48 x 1000 x 1000 / 1024 / 1024 ≈ 91.55M

如果直接加载完整的图片,大概需要占用91.55M内存空间,对于当下内存配置都是6G起步的手机,占用内容不算大,但Android为每个应用分配的内存是有限的,一次性加载如此大的图片,非常容易导致应用OOM崩溃。

因此必须使用加载部分区域的方式来加载图片。

Android提供了BitmapRegionDecoder来实现这个功能。

2. 获取图片大小

通过BitmapFactory.OptionsinJustDecodeBounds可以不加载图片而获取图片大小。

此外,还需要考虑Exif信息,处理图片旋转或者翻转属性。

Android提供了ExifInterface处理Exif信息。

3. 用户交互

  • 双击缩放图片
  • 双指缩放图片
  • 移动图片
  • ……

四、subsampling-scale-image-view

subsampling-scale-image-view完美解决以上所有问题。

GitHub项目地址:https://github.com/davemorrissey/subsampling-scale-image-view

WIKI帮助手册:https://github.com/davemorrissey/subsampling-scale-image-view/wiki

五、Final

确定目标需求,到GitHub上寻找成品与半成品代码可以有效得提供开发效率。

神马笔记功能逐渐稳定后,会继续开源相关代码。

访问已开源的代码可以访问 https://github.com/jicanghai37927/WhatsAndroid 。

这个项目为神马笔记的原型项目。