在多媒体应用中,位图无处不在,但是如果加载到内存中的图片尺寸大于屏幕上要显示的图片尺寸时,这些高分辨率的图片便会引发许多性能问题。为了减轻应用的内存压力,必须要调整加载到内存中的位图大小。

需要想办法让图片以实际要显示的尺寸大小载入内存,而不是以完整的高分辨率进行加载。如果用户想要查看完整分辨率的图片,可以根据需要显示图片并加载到内存中。

这里要用到Android中的缩放位图(Scaling Bitmap)方法.

可以使用如下方法创建一个特定尺寸大小的Bitmap:

但是有一个缺点,此方法需要先要有一个位图才能使用,也就是说,系统必须先加载图片、解码并创建位图然后才能创建新的特定的尺寸更小的位图。

1》可以在加载位图时调整Bitmap的尺寸大小,这时就要用到BitmapOption对象的inSampleSize属性了。

public int inSampleSize

Added in API level 1

If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory. The sample size is the number of pixels in either dimension that correspond to a single pixel in the decoded bitmap. For example, inSampleSize == 4 returns an image that is 1/4 the width/height of the original, and 1/16 the number of pixels. Any value <= 1 is treated the same as 1. Note: the decoder uses a final value based on powers of 2, any other value will be rounded down to the nearest power of 2.(当inSampleSize的值不是2的多少次方时,就取比它小的、最接近的2的次方数)

2》但是如果你希望指定的图片绽放尺寸不是2的次方时,你需要用到以下方法:

从上面bitmapfactory.cpp实现中可以看出,当设置inScaled 标记后,系统会用目标密度除以当前密度,计算出位图要应用的缩放值。使用这种方法不仅可以调整图片尺寸,还可以为其应用调整尺寸的滤镜,也就是在调整尺寸的过程中加入一些额外的运算以使最后呈现的效果更加出色。但是额外应用滤镜会增加处理时间 ,对于大型图片而言,这会放缓图片尺寸的调整速度。

3>解决方案:将以上两种方法结合起来使用。

(1)首先将inSampleSize应用到图片,将图片调整为目标尺寸的1/4(长、宽各1/4).

(2)然后使用inDensity 和inTargetDensity缩放图片,以使图片尺寸完全符合你想要的尺寸。

由于inSampleSize会减少像素数量,并在随后的密度处理过程中为图片应用调整尺寸的滤镜,因此结合这两种方法可以提高处理速度。

4> 如何获取图片的原始尺寸?

Displaying Bitmaps Efficiently (一)-----Loading Large Bitmaps Efficiently(二)相关推荐

  1. Loading Large Bitmaps Efficiently(官方文档)

    Displaying Bitmaps Efficiently系列 Loading Large Bitmaps Efficiently Processing Bitmaps Off the UI Thr ...

  2. 一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)

    文章目录 一:CF1463F 二:CF1152F2 三:CF1342F 一:CF1463F Max Correct Set 有一个结论:以x+yx+yx+y为周期排列填充一定是不劣于最后的答案的 令p ...

  3. Android花样loading进度条(二)-简单环形进度条

    背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们从圆形进度条讲起,讲简单形式的环形进度条,只有进度色彩,没有进 ...

  4. Android训练课程(Android Training) - 高效的显示图片

    高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...

  5. [原] Android持续优化 - 提高流畅度

    一.形象的感官一下流畅度概念 1. 这是官方给出的概念:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms. 2. 每秒帧数,实际上就是指动画或视频每秒放映的画面数.因此 ...

  6. 读博文学Android

    学习Android的过程中得到来自互联网上乐于分享和奉献的人们的帮助,这里收集了一些Android相关的知识点的介绍,研究,实践的博文地址.每篇文章将带给学习者更多的帮助,有些地址需要FQ的帮助. 基 ...

  7. Android 系统性能优化(42)---Android代码内存优化建议-Android资源篇

    Android代码内存优化建议-Android资源篇 这篇文章主要介绍在实际Android应用程序的开发中,容易导致内存泄露的一些情况.开发人员如果在进行代码编写之前就有内存泄露方面的基础知识,那么写 ...

  8. Bitmap实现照片墙

    Bitmap实现照片墙 Android开发中 位图 的展示 存储 缓存是很重要部分,现代化的用户界面有很多信息都是通过图片形式进行展现,如何更好的展示图片也是衡量一款App 性能和用户体验的重要部分. ...

  9. 看完这篇,让你不再惧怕内存优化

    对于安卓应用开发来说,内存究竟会遇到什么样的问题,有什么方法可以用来测试和分析,以及有什么样的策略可以去实践优化,今天就来好好聊聊这个话题. ​ 缘起 现代计算机是基于冯*诺依曼架构的,计算机的软件是 ...

最新文章

  1. echarts.js 做图表的插件
  2. Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java
  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
  4. 小学计算机ppt课教案,小学信息技术公开课教案《让幻灯片变得更加漂亮》教学设计与反思...
  5. 基于SPI的数据报过滤原理与实现
  6. java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x12问题
  7. 基于spring boot 的ssm项目的简单配置
  8. 安富莱DAC8653模块
  9. 【编辑器】VSCode项目管理器——Project Manager
  10. BN(Batch Normalization)层原理与作用
  11. 阿里大淘系模型治理方案分享
  12. 阿拉伯数字转中国人民币大写字符串
  13. IOM计算机组成原理,计算机组成原理-实验1静态随机存储器实验
  14. 初中不读学计算机难吗,为什么初中生更加适合学习计算机编程?
  15. 欢迎使用CSDN-markdown编辑器不啵啵啵啵啵啵啵啵啵啵啵啵
  16. 2022年4月23日美团笔试
  17. MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC
  18. 数据可视化技能之组合框完成动态图表
  19. 目标检测网络之 YOLOv3
  20. 云ERP与传统ERP系统的区别详解

热门文章

  1. matlab 读取fig数据
  2. 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (3)
  3. Mina2中IoService
  4. 树莓派上 安装并 运行opencv
  5. return 返回值的问题
  6. Xamarin.Forms 中iOS通过URL Scheme判断应用是否安装
  7. mysql 基础配置经验
  8. [ 测试管理 ] 如何描述缺陷报告?
  9. BZOJ1084 [SCOI2005]最大子矩阵 动态规划
  10. docker三剑客之docker-machine