矩阵在android 图形 中的应用
一个数组在线性代数上可以看成是一个向量。而一个向量,可以通过一个矩阵乘法((一个矩阵行的每一个值乘以另一个矩阵列的每一个值)转化为另一个向量。
android中的点的坐标位置,和颜色值 ,都是一个数组,也都可以看成一个向量。所以他们的变换,实际上应用到线性代数上的矩阵来进行变换。
一个NxN 的矩阵乘以一个N维的向量 ,可以得到转换后的新向量 ,但是由于一般矩阵不能解决偏移量的问题,比如坐标点的偏移,具体见参考,我们可以用 N+1 维的齐次坐标变换矩阵 来解决这个问题。(矩阵的最后一行是固定值,可以忽略) 所以坐标点(x,y) 需要 三维矩阵。而颜色[R, G, B, A] 需要 5维矩阵(或者 5 x 4) 就可以了。 所以 颜色矩阵 ColorMatrix 需要5 x 4 20 个数 [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ] 他的颜色变换公式,就是使用矩阵的乘法(行乘以列),新颜色 的值为 R' = a*R + b*G + c*B + d*A + e; G' = f*R + g*G + h*B + i*A + j; B' = k*R + l*G + m*B + n*A + o; A' = p*R + q*G + r*B + s*A + t;
图片变换和动画 ,其实都可以看成是点 坐标的变换,都会用到 Matrix 类。 而一个图像的颜色改变,(改变 亮度,饱和度,对比度,一般就是 颜色值得变换 ,往往会用到ColorMatrix和 ColorMatrixColorFilter 。 了解矩阵变换的原理,就容易理解Matrix和ColorMatrix 类的使用,就可以很方便的处理图像的形状和颜色。
矩阵的pre post 是先后处理 ,而 set 设置 会清除掉当前的 pre post 设置。
矩阵乘法 http://zh.wikipedia.org/wiki/%E7%9F%A9%E9%99%A3%E4%B9%98%E6%B3%95
矩阵的坐标变换 http://blog.sina.com.cn/s/blog_866fdeb60100xr1f.html
Android图片处理(Matrix,ColorMatrix) http://www.cnblogs.com/leon19870907/articles/1978065.html
Android实现图片倒影效果 http://www.cnblogs.com/jh5240/archive/2012/04/22/2464795.html
Android中Matrix的pre post set方法理解 http://www.linuxidc.com/Linux/2012-07/65035.htm