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

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

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

4.5.4 振铃现象的处理

      振铃现象无法通过以上修正矩阵的方法进行消除。在Flash IDE中,我们通过提升品质的方法达到了优化滤镜细节的效果。根据帮助文件的描述,品质实际上就是模糊次数。所以我们也不妨用这样的方法进行处理。

 

      首先把getConFilter方法中的value写死为1,我们用回绝对平均的矩阵。然后,设置滤镜的代码修改为:

 

var con:ConvolutionFilter = getConFilter(20, 0, false) _main_txt.filters = [con, con];

 

      我把convolutionFilter的创建单独写出来,方便修改的同时也避免了代码不必要的重复创建行为。效果如图 4.58所示。

 

 

图 4.58 对文本进行两次卷积操作

 

      与中品质的BlurFilter的差距较大(图 4.59),模糊程度比较严重,确实,每模糊一次,其模糊范围都会放大一倍,因此,我们首先要把ConvolutionFilter的矩阵大小减半,然后才可以把两次模模糊所带来的影响给抵消回来,即getConFilter的第一个参数修改为10。

 

图 4.59 中品质的Flash模糊滤镜


      再次运行,得到如图 4.60的效果,模糊程度比较接近了,但是又有新的问题:因为模糊的范围变小,所以色彩明显变深。

 

图 4.60 将矩阵尺寸减半

 

      这时候,我们自然而然想到的就是divisor的影响了。把乘以0.5去掉,让颜色变淡,结果就跟中品质的模糊滤镜比较吻合了(图 4.61)。

 

图 4.61 去掉因子0.5后的效果

 

      受篇幅所限,高品质,或者blurX不等于blurY时的效果我就不在这里逐一为大家展示了,有兴趣的读者可以自行测试。

 

      至此,Flash简单滤镜的算法原理已被完全揭开,模糊实际上就是均值滤波矩阵作用的结果。总体上说,计算的公式比较简单,处理的步骤也比较少,虽然在品质上作出了一定的牺牲,但换来的则是比较快的执行速度,让cpu可以做更多其它的事情。

 

      据相关资料显示,Photoshop中的投影模糊算法也是中品质模糊(图 4.62),该结论经笔者测试,基本可靠。因为其模糊次数等于2,所以在图形学上称之为二次均值滤波算法(图形学与Flash无关,也无法用视觉的角度去描述算法,怎么可能会用品质这种感性词汇呢)。当然了,Photoshop中的模糊算法远不止这一种,由于它们不基于ConvolutionFilter,所以此处暂不展开讨论。

 

图 4.62 Photoshop中的模糊投影

 

      既然算法已经可以深入到每一个像素点,那么在我们拥有像素级工具——BitmapData以后,就完全可以用数学公式实现滤镜的算法了,它除了可以帮助您实现Photoshop更复杂的图层样式以外,还可以轻松转移到任何支持图像编程的高级语言上(之所以说高级语言,是因为像汇编这样的低级语言,运算指令较少,要实现起来也相当有难度,像Starling的模糊滤镜,其算法就部分采用了AGAL汇编语言,有兴趣的读者可以自行查阅Starling的源文件研究其算法),而不必担心它是否已内置了相关的滤镜。

 


 

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