作者 ivm
今天看了Android 群英传 中关于色彩处理部分,发现了色彩矩阵,发现这个真的是厉害,今天给大家分享一下
参考了一些资料:http://www.it165.net/pro/html/201505/40131.html
什么是色彩矩阵
颜色矩阵M是一个5*4的矩阵,如图所示。在Android中,颜色矩阵M是以一维数组m=[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t]的方式进行存储的。
而图像的RGBA值则存储在一个5*1的颜色分量矩阵C中,由颜色分量矩阵C可以控制图像的颜色效果。
要想改变一张图片的颜色效果,只需要改变图像的颜色分量矩阵即可。通过颜色矩阵可以很方便的修改图像的颜色分量矩阵。假设修改后的图像颜色分量矩阵为C1,则有如图所示的颜色分量矩阵计算公式。
由此可见,通过颜色矩阵修改了原图像的RGBA值,从而达到了改变图片颜色效果的目的。并且,通过如图3所示的运算可知,
颜色矩阵M的第一行参数abcde决定了图像的红色成分,
第二行参数fghij决定了图像的绿色成分,
第三行参数klmno决定了图像的蓝色成分,
第四行参数pqrst决定了图像的透明度,
第五列参数ejot是颜色的偏移量。
初始矩阵
{
1,0,0,0,0
0,1,0,0,0
0,0,1,0,0
0,0,0,1,0
}
增加红色
{
2,0,0,0,0
0,1,0,0,0
0,0,1,0,0
0,0,0,1,0
}
增加绿色
{
1,0,0,0,0
0,2,0,0,0
0,0,1,0,0
0,0,0,1,0
}
增加蓝色
{
1,0,0,0,0
0,1,0,0,0
0,0,2,0,0
0,0,0,1,0
}
改变最后一列
{
1,0,0,0,100
0,1,0,0,100
0,0,1,0,0
0,0,0,1,0
}
最后一列是偏移量 ,红色增量100 绿色100 结果是偏黄色
看到这有没有灵光一闪,没错通过 seekbar 可以做一个简易的 调色软件
let’s do it!
布局就不贴了
大概是就一个图片加上一个seekbar 很简单的
我们来说说代码
一般呢修改图片 都是会生成一张新的图片,所以大体逻辑就是:现获取一个图片的 bitmap ,将它一模一样的复制一个,我们去操作这个复制后的bitmap,操作的方法写在seekbar 的监听器里。
那么问题来了,我们获取了seekbar 的进度,将它写进矩阵(也就是数组)通过 colorMatrix set 方法将矩阵数组set进去,接下来就是重点了,用准备好的画笔画布,将图案画到复制的bitmap 上
Ok 开始逻辑部分
1. 声明资源并初始化
2.修改监听器
简易的图片修改器就做好了。
还不快自己动手做一个!
代码地址:https://github.com/lvm0306/PsTest
明天还有哦~敬请期待