本篇学习Paint的颜色过滤器ColorFilter。
ColorFilter下有3个子类ColorMatrixColorFilter, LightingColorFilter, PorterDuffColorFilter ,下面逐一学习一下。
1.LightingColorFilter
LightingColorFilter的构造方法有三个参数,LightingColorFilter(int mul,int add)
参数说明:
mul和add都是和颜色值格式相同的int值(十六进制),其中mul用来和目标像素相乘,add用来和目标像素相加,计算公式如下
R’ = R * mul.R / 0xff + add.R
G’ = G * mul.G / 0xff +add.G
B’ = B * mul.B / 0xff + add.B
2.PorterDuffColorFilter
PorterDuffColorFilter 的构造方法PorterDuffColorFilter(int color,PorterDuff.Mode mode),它表示图像与颜色混合
参数说明:
color 具体的颜色值,如Color.RED
mode 指定PorterDuff.Mode混合模式(图层混合18种模式),mode具体的说明在上一篇文章
3.ColorMatrixColorFilter
ColorMatrixColorFilter有两个构造方法
ColorMatrixColorFilter(float[] colorMatrix)
ColorMatrixColorFilter(ColorMatrix cm)
在构造方法一中,colorMatrix表示4x5的颜色矩阵。
在构造方法二中则传递了ColorMatrix 对象。
ColorMatrixColorFilter它是颜色矩阵。在Android中,系统使用一个颜色矩阵ColorMatrix来处理图像的色彩效果,对于图像的每个像素点,都有一个颜色分量矩阵用来保存颜色的RGBA值(下图C)。Android中的颜色矩阵是一个4x5的数字矩阵(下图A),它用来对图片的色彩进行处理。
如果想要改变一个图像的颜色显示效果,那么可以通过矩阵的乘法运算来计算新的颜色值
利用线性代数的知识,可以得出R1,G1,B1以及A1的值,分别表示计算后新的颜色值。
在矩阵A中,
第一行adcde决定新颜色值的红色(R),
第二行fghij决定新颜色值的绿色(G),
第三行klmno决定新颜色值的蓝色(B),
第四行pqrst决定新颜色值的透明度(A),
第五列ejot决定每个分量(RGBA)的偏移量如果令矩阵A中agms为1,其他均为0,那么得到一个新的矩阵
它表示不会对图像的颜色做任何的变化,对应的agms就是RGBA的系数值。
那么,如果我们要修改一个图像的颜色值,1)可以修改ejot偏移量 2)修改agms即RGBA的系数值。
在Api中提供了ColorMatrix 类,主要提供了这几个方法,调节色彩饱和度setSaturation()、色调调节setRotate()、修改RGBA系数值setScale()
在setSaturation(float sat)方法中,sat取值有三个0,1,其他不为1的值,分别表示五色彩(黑白图),默认效果以及饱和度增强
在setRotate(int axis,float degrees)方法中,axis取值同样也有三个0,1,2,分别表示红色,绿色,蓝色,degrees参数则表示旋转角度
在setScale(float rScale,float gScale,float bScale,float aScale)方法中,参数分别表示R、G、B、A的系数值
关于ColorFilter目前就学习了这些,等搞明白了颜色值的计算再来补充