Android Bitmap

134 阅读2分钟

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 字节
  1. Bitmap 默认的图片格式是 ARGB_8888
  2. 图片占用内存的大小与图片的颜色格式相关, 占用内存的大小 = 图片的宽度 × 图片的高度 × 每个像素占用的内存大小
  3. 当我们需要做性能优化或者防止 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)圆形图片