1.2.5_使用Paint实现滤镜效果

先来看下原图
在这里插入图片描述

LightingColorFilter

R`= R * mul.R / 0xff + add.R  
G`= G * mul.G / 0xff + add.G  
B`= B * mul.B / 0xff + add.B  

//将红色去除掉 new LightingColorFilter(0x00FFFF, 0x000000)
//将绿色去除掉 new LightingColorFilter(0xFF00FF, 0x000000)
//原始图片 new LightingColorFilter(0xFFFFFF, 0x000000);
//绿色更亮 new LightingColorFilter(0xFFFFFF, 0x003000);
LightingColorFilter lighting = new LightingColorFilter(0xFFFFFF, 0x003000);
mPaint.setColorFilter(lighting);
canvas.drawBitmap(mBitmap, 0, 0, mPaint);

效果示意
在这里插入图片描述

PorterDuffColorFilter

将一个颜色和图层进行混合
比如,使图片添加红色并且更暗

PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.DARKEN);
mPaint.setColorFilter(porterDuffColorFilter);  
canvas.drawBitmap(mBitmap, 0, 0, mPaint);

效果示意
在这里插入图片描述

ColorMatrixColorFilter

色彩矩阵

在Android中,系统使用一个颜色矩阵ColorMatrix,来处理图像的这些色彩效果。Android中的颜色矩阵是一个45的数字矩阵,它用来对图片的色彩进行处理。而对于每个像素点,都有一个颜色分量矩阵来保存颜色的RGBA值,如图所示:
在这里插入图片描述
图中矩阵M就是一个4
5的颜色矩阵。在Android中,它会以一维数组的形式来存储,而C则是一个颜色矩阵分量。在处理图像时,使用矩阵乘法运算MC来处理颜色分量矩阵:
在这里插入图片描述
根据线性代数中的矩阵乘法运算法则,我们可以发现,颜色矩阵是按一下方式划分的

  • 第一行的abcde值用来决定新的颜色值中的R——红色
  • 第二行的fghij值用来决定新的颜色值中的G——绿色
  • 第三行的klmno值用来决定新的颜色值中的B——蓝色
  • 第四行的pqrst值用来决定新的颜色值中的A——透明度
  • 矩阵M中的第五列——ejot值分别用来决定每个分量中的offset,即偏移量

详见 Android色彩矩阵处理图像

我们来尝试一下

泛黄效果

float colormatrix_huan_huang[] = {
    1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 0.5f, 0.0f, 0.0f,
    0, 0, 0, 1.0f, 0
};  

在这里插入图片描述
也可以使用如下这些内部使用色彩矩阵实现的API

亮度调节

ColorMatrix cm = new ColorMatrix();
cm.setScale(1,1,1,1);  
mPaint.setColorFilter(colorMatrixColorFilter);

饱和度调节 0-无色彩 1-默认效果 >1饱和度加强

ColorMatrix cm = new ColorMatrix();
cm.setSaturation(2);
mPaint.setColorFilter(colorMatrixColorFilter);

色度调节
0:修改红色 1:修改绿色 2:修改蓝色

ColorMatrix cm = new ColorMatrix();
cm.setRotate(0,45);  
mPaint.setColorFilter(colorMatrixColorFilter);

以饱和度调节为例,传入参数2,可以看到饱和度明显提升
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值