android系统提供了 对图片的一些列操作,包括图片的平移、缩放、镜面、倒影等操作。
示例代码
- 旋转
Bitmap copyBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight() + 120, bitmap.getConfig());// 相当于创建了一张白纸
Paint paint = new Paint();// 创建一个画笔
Canvas canvas = new Canvas(copyBitmap); // 创建一个画布,把白纸铺到画布上
Matrix matrix = new Matrix(); //矩阵序列
matrix.setRotate(20, bitmap.getWidth() / 2, bitmap.getHeight() / 2); // 让图片旋转
canvas.drawBitmap(bitmap, matrix, paint); // 执行完copyBitmap里面才有内容
return copyBitmap;
- 平移
Bitmap copyBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight() + 120, bitmap.getConfig());// 相当于创建了一张白纸
Paint paint = new Paint();// 创建一个画笔
Canvas canvas = new Canvas(copyBitmap); // 创建一个画布,把白纸铺到画布上
Matrix matrix = new Matrix(); //矩阵序列
matrix.setTranslate(130, 0); // 让图片平移
canvas.drawBitmap(bitmap, matrix, paint); // 执行完copyBitmap里面才有内容
return copyBitmap;
- 缩放
Bitmap copyBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight() + 120, bitmap.getConfig());// 相当于创建了一张白纸
Paint paint = new Paint();// 创建一个画笔
Canvas canvas = new Canvas(copyBitmap); // 创建一个画布,把白纸铺到画布上
Matrix matrix = new Matrix(); //矩阵序列
matrix.setScale(0.5f, 0.5f); // 让图片缩放
canvas.drawBitmap(bitmap, matrix, paint); // 执行完copyBitmap里面才有内容
return copyBitmap;
- 镜面效果
Bitmap copyBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight() + 120, bitmap.getConfig());// 相当于创建了一张白纸
Paint paint = new Paint();// 创建一个画笔
Canvas canvas = new Canvas(copyBitmap); // 创建一个画布,把白纸铺到画布上
Matrix matrix = new Matrix(); //矩阵序列
// 镜面效果就是 缩放和平移的组合
matrix.setScale(-1.0f, 1);
matrix.postTranslate(copyBitmap.getWidth(), 0); // post是在上一次执行完成的基础上再次进行操作。set操作会覆盖上一次的操作
canvas.drawBitmap(bitmap, matrix, paint); // 执行完copyBitmap里面才有内容
return copyBitmap;
- 倒影效果
Bitmap copyBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight() + 120, bitmap.getConfig());// 相当于创建了一张白纸
Paint paint = new Paint();// 创建一个画笔
Canvas canvas = new Canvas(copyBitmap); // 创建一个画布,把白纸铺到画布上
Matrix matrix = new Matrix(); //矩阵序列
// 倒影效果 缩放和平移的组合
matrix.setScale(1.0f, -1);
matrix.postTranslate(0, copyBitmap.getHeight());
canvas.drawBitmap(bitmap, matrix, paint); // 执行完copyBitmap里面才有内容
return copyBitmap;
注意: 图片处理api分为setXXX和postXXX,其中setXXX每一次都会覆盖之前的操作,而postXXX会在之前操作的基础上再次进行图片处理。