1.Matrix提供了一些方法来控制图片变换:
•setTranslate(float dx,float dy):控制Matrix进行位移。
•setSkew(float kx,float ky):控制Matrix进行倾斜,kx、ky为X、Y方向上的比例。
•setSkew(float kx,float ky,float px,float py):控制Matrix以px、py为轴心进行倾斜,kx、ky为X、Y方向上的倾斜比例。
•setRotate(float degrees):控制Matrix进行depress角度的旋转,轴心为(0,0)。
•setRotate(float degrees,float px,float py):控制Matrix进行depress角度的旋转,轴心为(px,py)。
•setScale(float sx,float sy):设置Matrix进行缩放,sx、sy为X、Y方向上的缩放比例。
•setScale(float sx,float sy,float px,float py):设置Matrix以(px,py)为轴心进行缩放,sx、sy为X、Y方向上的缩放比例。
2.Matrix缩放
private void bitmapScale(float v, float v1) {
// 因为要将图片放大,所以要根据放大的尺寸重新创建Bitmap,Android不允许对原图进行处理
Bitmap afterBitmap = Bitmap.createBitmap(
(int) (bitmap.getWidth() * v),
(int) (bitmap.getHeight() *v1), bitmap.getConfig());
Canvas canvas = new Canvas(afterBitmap);
// 初始化Matrix对象
Matrix matrix = new Matrix();
// 根据传入的参数设置缩放比例
matrix.setScale(v, v1);
// 根据缩放比例,把图片draw到Canvas上
canvas.drawBitmap(bitmap, matrix,paint);
iv2.setImageBitmap(afterBitmap);
}
3.Matrix旋转
private void scale(int i) {
// 创建一个和原图一样大小的图片
Bitmap afterBitmap = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), bitmap.getConfig());
Canvas canvas = new Canvas(afterBitmap);
Matrix matrix = new Matrix();
// 根据原图的中心位置旋转
matrix.setRotate(i, bitmap.getWidth() / 2,
bitmap.getHeight() / 2);
canvas.drawBitmap(bitmap, matrix, paint);
iv2.setImageBitmap(afterBitmap);
}
4.Matrix位移
private void translate(int i, int i1) {
// 需要根据移动的距离来创建图片的拷贝图大小
Bitmap afterBitmap = Bitmap.createBitmap(
(int) (bitmap.getWidth() + i),
(int) (bitmap.getHeight() + i1), bitmap.getConfig());
//画板/画布
Canvas canvas = new Canvas(afterBitmap);
//矩阵
Matrix matrix = new Matrix();
// 设置移动的距离
matrix.setTranslate(i, i1);
canvas.drawBitmap(bitmap, matrix, paint);
iv2.setImageBitmap(afterBitmap);
}
5.Matrix倾斜
private void bitmapSkew(float v, float v1) {
// 根据图片的倾斜比例,计算变换后图片的大小,
Bitmap afterBitmap = Bitmap.createBitmap(bitmap.getWidth()
+ (int) (bitmap.getWidth() * v), bitmap.getHeight()
+ (int) (bitmap.getHeight() * v1), bitmap.getConfig());
Canvas canvas = new Canvas(afterBitmap);
Matrix matrix = new Matrix();
// 设置图片倾斜的比例
matrix.setSkew(v, v1);
canvas.drawBitmap(bitmap, matrix, paint);
iv2.setImageBitmap(afterBitmap);
}
6.ColorMatrix去除红色效果
private void red() {
Bitmap bitmap1 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
//去掉红色
float[] mMatrix = new float[]{
0, 0, 0, 0, 0,//红色
0, 1, 0, 0, 0,//绿色
0, 0, 1, 0, 0,//蓝色
0, 0, 0, 1, 0,//透明色
};
//色彩矩阵
ColorMatrix colorMatrix = new ColorMatrix(mMatrix);
//画板
Canvas canvas = new Canvas(bitmap1);
//画笔
Paint paint = new Paint();
//给画笔设置颜色过滤器,里面使用色彩矩阵
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
//将mBitmap临摹到bitmap上,使用含有色彩矩阵的画笔
canvas.drawBitmap(bitmap, 0, 0, paint);
iv1.setImageBitmap(bitmap1);
}
7.ColorMatrix去除绿色效果
private void green() {
Bitmap bitmap2 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
//去掉绿色
float[] mMatrix = new float[]{
1, 0, 0, 0, 0,//红色
0, 0, 0, 0, 0,//绿色
0, 0, 1, 0, 0,//蓝色
0, 0, 0, 1, 0,//透明色
};
//色彩矩阵
ColorMatrix colorMatrix = new ColorMatrix(mMatrix);
//画板
Canvas canvas = new Canvas(bitmap2);
//画笔
Paint paint = new Paint();
//给画笔设置颜色过滤器,里面使用色彩矩阵
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
//将mBitmap临摹到bitmap上,使用含有色彩矩阵的画笔
canvas.drawBitmap(bitmap, 0, 0, paint);
iv1.setImageBitmap(bitmap2);
}
8.ColorMatrix去除蓝色效果
private void blue() {
Bitmap bitmap3 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
//去掉绿色
float[] mMatrix = new float[]{
1, 0, 0, 0, 0,//红色
0, 1, 0, 0, 0,//绿色
0, 0, 0, 0, 0,//蓝色
0, 0, 0, 1, 0,//透明色
};
//色彩矩阵
ColorMatrix colorMatrix = new ColorMatrix(mMatrix);
//画板
Canvas canvas = new Canvas(bitmap3);
//画笔
Paint paint = new Paint();
//给画笔设置颜色过滤器,里面使用色彩矩阵
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
//将mBitmap临摹到bitmap上,使用含有色彩矩阵的画笔
canvas.drawBitmap(bitmap, 0, 0, paint);
iv1.setImageBitmap(bitmap3);
}
9.ColorMatrix灰度特效
private void grey() {
Bitmap bitmap4 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
//去掉绿色
float[] mMatrix = new float[]{
0.33f, 0.59f, 0.11f, 0, 0,
0.33f, 0.59f, 0.11f, 0, 0,
0.33f, 0.59f, 0.11f, 0, 0,
0, 0, 0, 1, 0,
};
//色彩矩阵
ColorMatrix colorMatrix = new ColorMatrix(mMatrix);
//画板
Canvas canvas = new Canvas(bitmap4);
//画笔
Paint paint = new Paint();
//给画笔设置颜色过滤器,里面使用色彩矩阵
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
//将mBitmap临摹到bitmap上,使用含有色彩矩阵的画笔
canvas.drawBitmap(bitmap, 0, 0, paint);
iv1.setImageBitmap(bitmap4);
}
10.ColorMatrix图像反转
private void covert() {
Bitmap bitmap5 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
//去掉绿色
float[] mMatrix = new float[]{
-1, 0, 0, 1, 1,
0, -1, 0, 1, 1,
0, 0, -1, 1, 1,
0, 0, 0, 1, 0,
};
//色彩矩阵
ColorMatrix colorMatrix = new ColorMatrix(mMatrix);
//画板
Canvas canvas = new Canvas(bitmap5);
//画笔
Paint paint = new Paint();
//给画笔设置颜色过滤器,里面使用色彩矩阵
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
//将mBitmap临摹到bitmap上,使用含有色彩矩阵的画笔
canvas.drawBitmap(bitmap, 0, 0, paint);
iv1.setImageBitmap(bitmap5);
}
网友评论