AndroidAndroid 技术开发Android开发

ColorMatrix 的奇妙用法1

2017-03-16  本文已影响0人  lovesosoi

作者 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

明天还有哦~敬请期待

上一篇 下一篇

猜你喜欢

热点阅读