1 Bitmap创建
1 Bitmap的静态方法createBitmap()
2 BitmapFactory的 decodeXX 系列静态方法
2 Bitmap颜色配置和压缩方式信息
Bitmap中两个枚举类:Config(颜色配置) & CompressFormat(压缩方式)
1 Config
描述Bitmap如何存储像素信息,影响图片的质量(颜色深度)、显示透明、不透明颜色
| 颜色格式 | 颜色信息 | 每个像素占用内存大小 |
|---|---|---|
| Bitmap.Config.ALPHA_8 | 颜色信息只由透明度组成 | 8 位,即 1 字节 |
| Bitmap.Config.ARGB_4444 | 颜色信息由透明度与R(Red),G(Green),B(Blue)四部分组成,每个部分都占4位,总共占16位 | 16 位,即 2 字节 |
| Bitmap.Config.ARGB_8888 | 颜色信息由 透明度、R(Red),G(Green),B(Blue)四部分组成,每个部分都占8位,总共占32位。是Bitmap默认的颜色配置信息,也是最占空间的一种配置 | 32 位,即 4 字节 |
| Bitmap.Config.RGB_565 | 颜色信息由R(Red),G(Green),B(Blue)三部分组成,R占5位,G占6位,B占5位,总共占16位 | 16 位,即 2 字节 |
- Bitmap 默认的图片格式是 ARGB_8888
- 图片占用内存的大小与图片的颜色格式相关, 占用内存的大小 = 图片的宽度 × 图片的高度 × 每个像素占用的内存大小
- 当我们需要做性能优化或者防止 OOM 的时候,可以将 Bitamp 的颜色配置该为 RGB_565 ,它的占用内存大小是 ARGB_8888的一半
2 CompressFormat
描述Bitmap以什么方式压缩。
| Bitmap.CompressFormat.JPEG | 有损 |
|---|---|
| Bitmap.CompressFormat.PNG | 无损 |
| Bitmap.CompressFormat.WEBP | 有损。质量相同的情况下WebP格式比JPEG小40% |
3 Bitmap保存和转换
1 Bitmap转换成byte数组
bitmapToByteArray()
2 Bitmap保存为文件
bitmapToFile()
4 Bitmap缩放
总内存 = 宽的像素数 × 高的像素数 × 每个像素点占用的大小
1 手动设置缩放参数
创建Bitmap对象时,有一个可选的Option对象,其中的inSampleSize参数设置缩放比例。宽、高缩放为原先的1/inSampleSize。
这时,总内存=1/2 × 1/2,变成原来的1/4了。通常在加载大图时可以用这个特性避免OOM发生。
5 Bitmap其他操作
1 旋转
matrix.postRotate(degree);
return Bitmap.createBitmap(...,matrix,...);
degree最好为90的倍数,否则图片旋转后变成“斜的”,但此时图片宽高方向还是水平和竖直方向,导致最终旋转后的图片会变大,多次旋转后,导致OOM。
2 镜像
/**
*水平镜像
*/
matrix.postRotate(-1f,1f);
return Bitmap.createBitmap(...,matrix,...);
/**
*竖直镜像
*/
matrix.postRotate(1f,-1f);
return Bitmap.createBitmap(...,matrix,...);
3 裁剪
裁剪出一个宽高为(width)(height)图片
从图片中间位置裁剪出一个半径为(radius)圆形图片