一起Talk Android吧(第三百九十九回:获取Bitmap的方法总结)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百九十九回:获取Bitmap的方法总结)相关的知识,希望对你有一定的参考价值。
文章目录
各位看官们,大家好,上一回中咱们说的是"从网络中获取Bitmap"的例子,这一回中咱们介绍的例子是"获取Bitmap的方法总结"。闲话休提,言归正转,让我们一起Talk android吧!
获取方式
我们在前面章回中介绍了三种获取Bitmap的方法:
- 从drawable资源中获取
- 从本地存储中获取
- 从网络中获取
这三种方式主要用在不的需求中,获取到Bitmap后将它绑定到ImageView控件上就可以显示Bitmap中包含的图片。这三种方法使用BitmapFactory
类中不同的方法来实现,具体的用法就不再列出了,大家可以参考前面的博客,或者查看BitmapFactory类的文档或者源代码。下面是BitmapFactory类的提供的方法。
public static Bitmap decodeResource(Resources res, int id, BitmapFactory.Options opts)
public static Bitmap decodeResource(Resources res, int id)
public static Bitmap decodeFile(String pathName, BitmapFactory.Options opts)
public static Bitmap decodeFile(String pathName)
public static Bitmap decodeFileDescriptor(FileDescriptor fd, Rect outPadding, BitmapFactory.Options opts)
public static Bitmap decodeFileDescriptor(FileDescriptor fd)
public static Bitmap decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)
public static Bitmap decodeByteArray(byte[] data, int offset, int length)
public static Bitmap decodeStream(InputStream is, Rect outPadding, @Nullable BitmapFactory.Options opts)
public static Bitmap decodeStream(InputStream is)
压缩图片
在获取Bitmap时特别容易引起OOM,这是因为加载图片需要大量的内存,图片越大,占用的内存空间就越大,进而引发OOM。我们通过Options类的的成员来对图片进行缩放,这样可以有效减少图片占用的内存,而且也能保证图片的显示效果。在获取Bitmap时,把Options类的对象传递到具体的方法中就可以实现对图片的缩放。这种方法也是官方推荐的做法,官方称其为"高效率加载图片"。
此外,官方还介绍了如何使用缓冲技术来提升图片的加载效率,这里的缓冲包含使用内存充当缓冲和使用硬盘充当缓冲,详细内容可以参考官方文档。
使用三方库加载图片
在实际项目中,我们可以使用前面博客中介绍过的方法,不过需要处理各种流操作以及异常,因此稍微繁杂。因此一些公司提供了图片加载库,我们只需要使用库中提供的方法就可以高效地加载图片,而且加载时不需要关注加载的细节,也不需要担心发生OOM。
常用的图片加载库有Glide
和Picasso
,其中Glide也是Android官方推荐使用的三方库。我们在后面的博客中会介绍如何使用它来加载图片。
看官们,关于Android中"获取Bitmap的方法总结"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第三百九十九回:获取Bitmap的方法总结)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百九十九回:自定义View实例五:简约工具栏)
一起Talk Android吧(第三百四十九回:解析JSON数组四)
一起Talk Android吧(第三百三十九回: Android中的OkHttp二)
一起Talk Android吧(第三百一十九回:Android中网络通信之TCP概述)