Flash 的一个位图特效 鼠标点击会出现扭曲效果。主要是DisplacementMapFilter类的应用。DisplacementMapFilter类不怎么好理解,用的好的话可以实现PS中的大多数效果。以下是摘自闪吧的教程,2.0时代的教程,不过这个类在3.0中没有变动。以下是DisplacementMapFilter类的使用方法(源自闪吧论坛):
-------------------------------------华丽的分割线---------------------------------
DisplacementMapFilter实现了图像像素的替换、重组。由此,最直观的理解就是水面的效果。随着水面的涌动,我们看到的水下的物体形状也会跟着变化,也就是图像各个点在眼底的投影位置发生了改变。DisplacementMapFilter的构造函数如下:
DisplacementMapFilter(mapBitmap:BitmapData = null, mapPoint:Point = null, componentX:uint = 0, componentY:uint = 0, scaleX:Number = 0.0, scaleY:Number = 0.0, mode:String = "wrap", color:uint = 0, alpha:Number = 0.0)
这里的mapBitmap(映射图像)可理解为水面。正是因为它,我们看水下的物体(目标图像)才会有变化。mapPoint是一个偏移位置。表示目标影片剪辑的左上角与映射图像左上角之间的偏移量。componentX/componentY表示通道的标志。取值可为1、2、4、8,分别表示r、g、b、a四个通道。 scaleX/scaleY,一个缩放比例。
上面这些参数放在公式中比较容易理解: 其中,componentX(x, y) 从 mapBitmap 属性获得 (x - mapPoint.x ,y - mapPoint.y) 处的 componentX 颜色值。即结果图像某点的像素值是源图像某点的像素值,通过mapBitmap的特性完成这样一个映射。
为了容易理解,假设mapBitmap是一个灰度图像,mapPoint为(0, 0)。灰度图像即黑白照片。仅由黑、白、灰组成。如果不深究的话可以认为灰度图像中r、g、b三个颜色通道的值相同。对于上面的公式而言,即componentX(x, y)等于componentY(x, y)。并且当mapPoint为(0, 0)时,componentX(x, y)即为mapBitmap在(x, y)点的灰度值,取值为0—255。0即黑色,225即白色。若mapPoint为(x, y),则相应可理解mapBitmap的位置相对于目标图像移动到(x, y)处。scaleX和scaleY控制置换点与目标点之间的距离。
当他们都为正值时(设为10),mapBitmap取从白色到黑色的线性渐变的矩形,映射后结果如图:
如果源图像是一个网格,则效果如下:
把数据代入公式看看,就是如果在影射图像灰度值小于128的部分,即颜色比较深的部分,目标图像的像素值为源图像中该点左上方的像素值;而较浅的部分,目标图像的像素值为源图像中该点右下方的像素值。在灰度值等于128的部分,像素位置不变。因此,在上面这种线性变化时看来,即产生了相应的线性偏移的效果。
回复Comments
作者:
{commentrecontent}