10.6.应用高级滤镜效果(浮雕等)

问题
我要应用高级滤镜效果,如浮雕,边检测等
解决办法
使用ConvolutionFilter对象
讨论
flash.filters.ConvolutionFilter类可创建从亮度和对比度变换到更多浮雕,模糊,边检测,锐利等动态效果。

联合滤镜需要一个数组定义一个矩阵,通过调整过的像素值把每个象素映射到新的位图表面上(这里面所涉及到的数学理论已超过本书范围)。ConvolutionFilter类可做到应用多个效果而不必关心矩阵倍增和如何应用像素映射,我们只需要知道矩阵数组所对应的每个滤镜。

ConvolutionFilter构造函数定义所有参数的默认值,但是一旦一个滤镜被应用,则必须定义前三个参数,前两个参数定义矩阵纬数,第三个参数就是矩阵数组。

第一个参数定义列数,第二个参数定义行数,看下面的例子矩阵定义了4列2行:
1 2 3 4
5 6 7 8
虽然可以在任何纬度上定义矩阵,但本书所讨论的都是矩形矩阵(行数和列数都相等的矩阵)。

第三个参数(矩阵数组)指定从左到右,从上到下。例如,下面的矩阵例子可这样用数组表示:
[1, 2, 3, 4, 5, 6, 7, 8]
一个以1为中心周围都是0的矩形矩阵表示没有任何效果,例如:
+展开
-ActionScript
sampleSprite.filteres = [ConvolutionFilter(3, 3, [0, 0, 0, 0, 1, 0, 0, 0, 0])];


当矩阵数组值之和为1,就像上面的例子那样表示亮度上没有效果,如果之和更高表示亮度被提升,更低表示亮度下降,下面的例子表示显示对象上除了亮度提升没有其他任何效果:
+展开
-ActionScript
sampleSprite.filteres = [ConvolutionFilter(3, 3, [0, 0, 0, 0, 2, 0, 0, 0, 0])];


下面的例子应用了模糊效果,但是数组值之和大于1会使对象变得更亮,这样的情况下亮度太高已经很难看到加入的模糊效果了:
+展开
-ActionScript
sampleSprite.filters = [new ConvolutionFilter(3, 3, [1, 1, 1, 1, 1, 1, 1, 1, 1])];

为了解决亮度问题,我们添加了一个除数作为第四个参数。除数会校正亮度问题而不会影响我们需要的效果(如模糊或锐化)。要重置亮度,把除数设置为数组值之和即可。下面的例子应用了模糊效果而且重置了亮度:
+展开
-ActionScript
sampleSprite.filters = [new ConvolutionFilter(3, 3, [1, 1, 1, 1, 1, 1, 1, 1, 1], 9)];
提高中心点的值即可提高模糊效果,不过别忘了提高除数。

加支付宝好友偷能量挖...


评论(0)网络
阅读(114)喜欢(0)flash/flex/fcs/AIR