1. 详解
Bitmap位图包括像素以及长、宽、颜色等描述信息。长宽和像素位数是用来描述图片的,可以通过这些信息计算出图片的像素占用内存的大小。
位图可以理解为一个画架,把图放到上面然后可以对图片做一系列的处理。
位图文件图像显示效果好,但是非压缩格式,需要占用较大的存储空间。
Config
表示图片像素类型
- ARGB_8888
- ARGB_4444
- RGB_565
- ALPHA_8
使用场景
- ARGB_4444失真严重,基本不用
- ALPHA_8使用场景特殊,比如设置遮盖效果等
- RGB_565,不需要设置透明度
- ARGB_8888,既要设置透明度,对图片质量要求又高
CompressFormat
压缩格式
- Bitmap.CompressFormat.JPEG
- Bitmap.CompressFormat.PNG
- Bitmap.CompressFormat.WEBP
特点:
- JPEG:一种有损压缩(JPEG2000既可以有损也可以无损),".jpg"或者".jpeg"; 优点:采用了直接色,有丰富的色彩,适合存储照片和生动图像效果;缺点:有损,不适合用来存储logo、线框类图。
- PNG: 一种无损压缩,".png"; 优点:支持透明、无损,主要用于小图标,透明背景等;缺点:若色彩复杂,则图片生成后文件很大;
- WEBP:以WebP算法进行压缩;Google开发的新的图片格式,同时支持无损和有损压缩,使用直接色。无损压缩,相同质量的webp比PNG小大约26%;有损压缩,相同质量的webp比JPEG小25%-34% 支持动图,基本取代gif
2. 加载
BitmapFactory类提供了四类方法:
decodeFile()
decodeResource()
decodeStream()
decodeByteArray()
分别表示从文件系统,资源,输入流,字节数组中加载出一个Bitmap对象。
高效加载
采用BitmapFactory.Options来加载所需尺寸的图片。通过inSmapleSize参数设置图片采样率。
public static Bitmap compressImageToBitmap(String imagePath){
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(imagePath,options);
if(bitmap != null){
System.out.println("bitmap=========1>>>>"+bitmap.getByteCount());
}else{
System.out.println("kong");
}
options.inJustDecodeBounds = false;
//采样率为2,那么采样后的图片其宽/高均为原图的1/2
options.inSampleSize = 2;
bitmap = BitmapFactory.decodeFile(imagePath,options);
System.out.println("bitmap=========2>>>>"+bitmap.getByteCount());
return bitmap;
}