Paint MaskFilter类进行处理、颜色RGB的滤镜处理

本文介绍了如何使用Android的MaskFilter类实现图像模糊和浮雕效果,通过ColorMatrixColorFilter进行色彩调整,包括色彩平移、缩放、投射及旋转等操作。此外还探讨了LightingColorFilter和PorterDuffColorFilter的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

颜色值时32位的int值,ARGB :A---Alpha值,RGB---颜色值

1、Alpha滤镜处理
MaskFilter类进行处理

BlurMaskFilter--用来绘制模糊阴影
EmbossMaskFilter -- 用来实现浮雕效果

2、颜色RGB的滤镜处理


1、色彩的平移运算---加法运算
在最后一列加上某个值,这样就可以增加特定色彩的饱和度


色彩的反转/反相;增加饱和度


2、色彩的缩放运算--乘法运算


高亮图片
颜色通道过滤(单独红色、绿色、蓝色)


3、色彩的投射运算

黑白照片
色彩反色(两个颜色交换)
复古照片
4、色彩的旋转运算


3、两者混合叠加---Matrix,PortDuffColorFilter


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.EmbossMaskFilter;
import android.graphics.LightingColorFilter;
import android.graphics.MaskFilter;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by linyaokui on 17/5/17.
 */

public class FilterView extends View{

    private Paint paint;
    private Bitmap bitmap;

    public FilterView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        paint  = new Paint(Paint.ANTI_ALIAS_FLAG);
        bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.xyjy2);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        setLayerType(LAYER_TYPE_SOFTWARE,null);//去掉硬件加速

        //BlurMaskFilter用法 阴影效果
        /**
         * Create a blur maskfilter.
         *
         * @param radius 阴影的半径
         * @param style  NORMOL -- 整个图像都被模糊掉
         *               SOLID -- 图像边界外产生一层与Paint颜色一致阴影效果,不影响图像的本身
         *               OUTER -- 图像边界外产生一层阴影,并且将图像变成透明效果
         *               INNER -- 在图像内部边沿产生模糊效果
         * @return
         */
        MaskFilter maskFilter = new BlurMaskFilter(50, BlurMaskFilter.Blur.NORMAL);
        paint.setMaskFilter(maskFilter);
        canvas.drawBitmap(bitmap,100,100,paint);

        //EmbossMaskFilter 浮雕效果
        /**
         * Create an emboss maskfilter
         *
         * @param direction  指定光源的位置,长度为xxx的数组标量[x,y,z]
         * @param ambient    环境光的因子 (0~1),越接近0,环境光越暗
         * @param specular   镜面反射系数 越接近0,镜面反射越强
         * @param blurRadius 模糊半径 值越大,模糊效果越明显
         */
        Rect rect = new Rect(100,100,600,600);
        paint.setColor(Color.RED);
        MaskFilter embossMaskFilter = new EmbossMaskFilter(new float[]{1,1,1},0.1f,0.1f,50);
        paint.setMaskFilter(embossMaskFilter);
        canvas.drawRect(rect,paint);

        //颜色RGB的滤镜处理 ColorMatrixColorFilter用法
        // 平移运算---加法
        ColorMatrix colorMatrix = new ColorMatrix(new float[]{
            1,0,0,0,0,
            0,1,0,0,100,
            0,0,1,0,0,
            0,0,0,1,0,
        });

        //  反相效果 -- 底片效果
        ColorMatrix colorMatrix = new ColorMatrix(new float[]{
                -1,0,0,0,255,
                0,-1,0,0,255,
                0,0,-1,0,255,
                0,0,0,1,0
        });

        //  反相效果 -- 底片效果
        ColorMatrix colorMatrix = new ColorMatrix(new float[]{
                1.2f,0,0,0,0,
                0,1.2f,0,0,0,
                0,0,1.2f,0,0,
                0,0,0,1.2f,0
        });
        // 黑白照片
        // 去色原理:只要把R G B 三通道的色彩信息设置成一样,那么图像就会变成灰色,
        // 同时为了保证图像亮度不变,同一个通道里的R+G+B =1
        //
        ColorMatrix colorMatrix = new ColorMatrix(new float[]{
                0.213f, 0.715f,0.072f,0,0,
                0.213f, 0.715f,0.072f,0,0,
                0.213f, 0.715f,0.072f,0,0,
                0,0,0,1,0,
        });

        // 发色效果---(比如红色和绿色交换)
        ColorMatrix colorMatrix = new ColorMatrix(new float[]{
                0,1,0,0,0,
                1, 0,0,0,0,
                0,0,1,0,0,
                0,0,0,1,0,
        });
        // 复古效果
        ColorMatrix colorMatrix = new ColorMatrix(new float[]{
                1/2f,1/2f,1/2f,0,0,
                1/3f, 1/3f,1/3f,0,0,
                1/4f,1/4f,1/4f,0,0,
                0,0,0,1,0,
        });
        // 颜色通道过滤
        ColorMatrix colorMatrix = new ColorMatrix(new float[]{
                1, 0,0,0,0,
                0,0,0,0,0,
                0,0,0,0,0,
                0,0,0,1,0,
        });
        //另一种写法
        ColorMatrix colorMatrix = new ColorMatrix();
        ColorMatrix colorMatrix1 = new ColorMatrix();
        colorMatrix.setScale(1.2f,1.2f,1.2f,1);
        colorMatrix.setSaturation(0.5f); //设置饱和度 sat A value of 0 maps the color to gray-scale. 1 is identity

        //aixs-- 0 红色轴,1,绿色,2,蓝色
        // degrees -- 旋转的角度
        colorMatrix1.setRotate(0,60);
        colorMatrix.setConcat(colorMatrix,colorMatrix1);//两个ColorMatrix合并

        paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
        canvas.drawBitmap(bitmap,100,100,paint);

       // LightingColorFilter只是修改RGB值
        LightingColorFilter lightingColorFilter = new LightingColorFilter(0x00ff00,0xff0000);
        paint.setColorFilter(lightingColorFilter);
        canvas.drawBitmap(bitmap,100,100,paint);

        //PorterDuffColorFilter
        PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(Color.argb(255,140,90,200), PorterDuff.Mode.MULTIPLY);
        paint.setColorFilter(porterDuffColorFilter);
        canvas.drawBitmap(bitmap,100,100,paint);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值