Android ColorFilter使用

 


ColorMatrix colorMatrix = new ColorMatrix(new float[]{ 

          1, 0, 0, 0, 0,

           0, 1, 0, 0, 0, 

          0, 0, 1, 0, 0, 

          0, 0, 0, 1, 0   });  

 

其中,第一行表示的R(红色)的向量,第二行表示的G(绿色)的向量,第三行表示的B(蓝色)的向量,最后一行表示A(透明度)的向量,这一顺序必须要正确不能混淆!这个矩阵不同的位置表示的RGBA值,其范围在0.0F至2.0F之间,1为保持原图的RGB值。每一行的第五列数字表示偏移值,何为偏移值?顾名思义当我们想让颜色更倾向于红色的时候就增大R向量中的偏移值,想让颜色更倾向于蓝色的时候就增大B向量中的偏移值,这是最最朴素的理解,但是事实上色彩偏移的概念是基于白平衡来理解的,什么是白平衡呢?说得简单点就是白色是什么颜色!如果大家是个单反爱好者或者会些PS就会很容易理解这个概念,在单反的设置参数中有个色彩偏移,其定义的就是白平衡的色彩偏移值,就是当你去拍一张照片的时候白色是什么颜色的,在正常情况下白色是(255, 255, 255, 255)但是现实世界中我们是无法找到这样的纯白物体的,所以在我们用单反拍照之前就会拿一个我们认为是白色的物体让相机记录这个物体的颜色作为白色,然后拍摄时整张照片的颜色都会依据这个定义的白色来偏移!而这个我们定义的“白色”(比如:255, 253, 251, 247)和纯白(255, 255, 255, 255)之间的偏移值(0, 2, 4, 8)我们称之为白平衡的色彩偏移。如果你不理解不要紧,自定义控件系列完结后紧接着就是设计色彩基础~~~~在这你就像我开头说的那样朴素地理解下就好。

 

 

 

像素点颜色修改

需要提到一个点,是怎么通过mul和add来修改一个像素点的,我们知道一张图片在Android里头是一个Bitmap格式的位图,里头包含了图片所有的像素信息,比如一张100X100的图片,其包含了100X100=10000(个)像素点。

Android里头图片的默认格式是ARGB_8888格式的,意思是每个像素点包含以下四个通道值:透明度大小(A)、红色值大小(R),绿色值大小(G),蓝色值大小(G),每个值占8位内存,也就是0~255,所以我们如果要修改一个像素的值,需要同时操作像素点的四个分量,而在Android中,这个修改过程是通过ColorMatrix矩阵来实现的。

以上就是一个ColorMatrix,是一个4*5(4行5列)的矩阵,在Android中用一个数组来存储矩阵的20个值,再看一下每个像素点的颜色值表示:

每个像素点相当于一个向量(或者看做是5行1列的矩阵),除了上面讲的4个RGBA分量之外还多了一个值为1的分量,这是为了计算颜色值的偏移量,像素点的修改其实就是矩阵与向量的乘积:

 

经过矩阵和向量的线性代数基本运算之后,我们就得到后变换之后的颜色值,即:

 

R.r = aR + bG + cB + dA + e; ->矩阵A的第一行a, b, c, d, e决定了变换后的R值

R.g = fR + gG + hB + iA + j; ->矩阵A的第二行f, g, h, i, j决定了变换后的G值

R.b = kR + lG + mB + nA + o; ->矩阵A的第三行k, i, m, n, o决定了变换后的B值

R.a = pR + qG + rB + sA + t; ->矩阵A的第四行p, q, r, s, t决定了变换后的A值

 

简单点说的话,ColorMatrix就是为了方便的计算出颜色的变换值,没有矩阵的话要实现每一个像素点的四个分量的操控是极为困难和繁杂的,通过矩阵可以极其巧妙的实现了这个效果,如图所示,只需要一个计算公式。

值得提一下的是,像素点向量的第五个分量1可以通过矩阵A的第五列(是列不是行)e,j, o, t值实现颜色变换的偏移效果。

原来图像,如果要半透明的结果,那么可以构建一个矩阵:

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值