##Bitmap高效加载
-
- Bitmap的基本概念
-
- Bitmap加载(decode)方式
-
- 如何高效加载Bitmap
####1. Bitmap的基本概念 普适:
- 总的说,
Bitmap为开发者提供了对图像文件的操作支持, 就如File类为我们提供了对本地文件的操作支持一样。 有了Bitmap,才可以对本地的图片、资源图片、网络图片进行各种各样的操作; 通过第2节中的API全集可以体会到Bitmap在处理图片上的强大; Bitmap不是Android特有的概念,计算机图形学中就有这个概念,即位图;- 其
主要作用就是把图像转换成像素信息加入到内存中; 而后可以对这些像素信息进行一定的操作来生成我们想要的效果;
在Android中:
Bitmap是Android系统中的图像处理的最重要的类之一, 几乎只要涉及到图像处理,就要使用到Bitmap;- 通过
Bitmap我们可以获取到图片的信息, 如宽度上的像素值、高度上像素值、总的像素值、α值等等, 还可以通过一个Bitmap去创造一个新的Bitmap; - 获取到信息后,可以对其进行缩放、裁剪等操作;
- 其他功能(可见
Bitmap用途非常广): 可以与画笔Paint结合实现一些特效, 如BitmapShader(shader. 着色器)相关操作等等;
####2. Bitmap加载(decode)方式
- 因为图片可能是我们的资源(
res、Resource), 也可能是就是一个文件/Flie; 也有可能是一个字节数组/ByteArray; 还有可能是一个网络流/Stream;等等 所以Android系统针对不同的图片数据来源提供着多种加载方式;
下面是四种比较主要的加载方式:
BitmapFactory.decodeByteArray();(来源:字节数组)BitmapFactory.decodeFile();(来源:文件路径)BitmapFactory.decodeResource();(来源:资源ID)BitmapFactory.decodeStream();(来源:流)
###
BitmapAPI全集:##
个别API简介:
extractAlpha():取bitmap对象的α值出来单独生成一张Bitmap;compress():对bitmap进行压缩;getByteCount():获取到字节数;- 获取宽高:
- 通过
不同的参数create一系列新的Bitmap:###为什么要用
BitmapFactory,而不是直接用Bitmap呢?Bitmap有引起内存泄漏的风险; 所以使用系统提供的工厂类BitmapFactory中的静态方法来创建一个Bitmap;Bitmap本身的构造方法是private;不允许直接new Bitmap();
实际使用示例:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_background, null);
bitmap.
####为什么要高效加载(decode)Bitmap
Bitmap,图片,意味着
内存消耗大; 市面上现今的相机像素非常高,产出的图片大小以M计数;直接把这样大图片加载进来是十分消耗内存的;
- 防止内存溢出
- 尽可能的节省内存开销
- 内存优化,健壮应用,使app更加流畅地run
####如何高效加载Bitmap
BitmapFactory的内部类Options为我们的高效加载提供了可能