美文网首页
Matrix&ColorMatrix

Matrix&ColorMatrix

作者: HOLLE_karry | 来源:发表于2020-05-08 21:32 被阅读0次

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);
    }

相关文章

  • Matrix&ColorMatrix

    1.Matrix提供了一些方法来控制图片变换: •setTranslate(float dx,float dy):...

网友评论

      本文标题:Matrix&ColorMatrix

      本文链接:https://www.haomeiwen.com/subject/jznqnhtx.html