首页 > 代码库 > ActionScript3游戏中的图像编程(连载八十九)

ActionScript3游戏中的图像编程(连载八十九)

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477

4.5.3 基于距离的加权平均矩阵

      现在,我们再测试一下那种圆形模糊的矩阵,对于3*3的矩阵来说,上下左右,以及中心这5个点为1.4,而矩阵四个角上的元素就是1,其计算依据是被卷积点到中心点的距离。这一规则对其它尺寸的矩阵仍然适用,所以我们在getConFilter的数组循环里实现这样的一个算法:

 

private function getConFilter(matrixSize:int, bias:Number = 0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0):ConvolutionFilter{   var amount:int = matrixSize * matrixSize;var divisor:Number = 0; //因为矩阵的元素值不再等于1,所以不能直接用matrixSize*matrixSize得到divisorvar arr:Array = [];for(var i:int = 0; i < amount; i ++){  var matrixX:int = i % matrixSize; //矩阵的横坐标(行数) var matrixY:int = i / matrixSize;  //矩阵的纵坐标(行数) var disX:int = matrixX - matrixSize; var disY:int = matrixY - matrixSize; var value:Number = Math.max(0, matrixSize - Math.sqrt(disX * disX + disY * disY));  //距离越大,要取的色彩数量越少,大于10的将不取色 arr[i] = value;  divisor += value; //累加到divisor上}return new ConvolutionFilter(matrixSize, matrixSize, arr, divisor * 0.5, bias, preserveAlpha, clamp, color, alpha);}

 

      由于大于matrixSize的边角点不再参与运算,所以最后的效果您已经看不到边角处有明显的方块了,当然掉渣的现象依然存在(图 4.57),这种掉渣其实也有专业术语可以描述,叫做振铃现象(就好比铃铛,音钗等发声体振动时的感觉)。

 

图 4.57 改用圆矩阵后的效果

ActionScript3游戏中的图像编程(连载八十九)