ColorFilter是颜色滤镜,这里以Laya的ColorFilter为例子进行说明。
数据成员:
_matrix 是一维Array数组,表示5X5矩阵。元素的存储方式是行优先(即:数组的前5个元素对应矩阵的第一行,数组的第2组5个元素对应矩阵的第二行,等等)。
_mat 是一维Float32Array数组,数组的元素个数是16,表示 4 X 4 矩阵。元素的存储方式也是行优先。
_alpha 是一维Float32Array数组,数组的元素个数是4,表示rgba值
公式为 , 其中color表示原始(rgba)颜色,mat表示_mat, colorAdd表示_alpha, newColor就是经过ColorFilter处理后的(rgba)颜色。
函数成员:
/***设置矩阵数据
*@param matrix 由 20 个项目(排列成 4 x 5 矩阵)组成的数组
*@return this
*/
setByMatrix(matrix: Array<any>): ColorFilter
{ if (this._matrix !=matrix)this._copyMatrix(matrix); var j=0; var z=0; for (var i=0;i < 20;i++){ if (i % 5 !=4){ this._mat[j++]=matrix[i]; }else { this._alpha[z++]=matrix[i]; } } return this;
}
这个函数是有奇怪之处的:1. 根据函数的注释,输入参数matrix的length应该是20;2. 观察函数 _copyMatrix的实现,发现matrix的lengh应该是25。
这个函数的目的是设置 _matrix, _mat, _alpha。_mat内容就是 _matrix的前4 X 4部分。_alpha是_matrix的最后一列的前4个元素。
网友评论