DisplacementMapFilter实现了图像像素的替换、重组。由此,最直观的理解就是水面的效果。随着水面的涌动,我们看到的水下的物体形状也会跟着变化,也就是图像各个点在眼底的投影位置发生了改变。
DisplacementMapFilter的构造函数如下:
public DisplacementMapFilter(mapBitmap:BitmapData, mapPoint:Point, componentX:Number, componentY:Number, scaleX:Number, scaleY:Number, [mode:String], [color:Number], [alpha:Number])
这里的mapBitmap(映射图像)可理解为水面。正是因为它,我们看水下的物体(目标图像)才会有变化。
mapPoint是一个偏移位置。表示目标影片剪辑的左上角与映射图像左上角之间的偏移量。
componentX/componentY表示通道的标志。取值可为1、2、4、8,分别表示r、g、b、a四个通道。
scaleX/scaleY,一个缩放比例。
上面这些参数放在公式中比较容易理解:
dstPixel[x, y] = srcPixel[x + ((componentX(x, y) - 128) * scaleX) / 256, y + ((componentY(x, y) - 128) * scaleY) / 256]
其中,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的部分,像素位置不变。因此,在上面这种线性变化时看来,即产生了相应的线性偏移的效果。
那么当mapBitmap为纯色的时候,也就很好理解了,根据其灰度的不同,目标图像会进行相应的平移。
当mapBitmap为放射渐变填充的话又会如何呢?效果如下:
图片如下:

反转填充颜色
图片如下:

这些都是在我们在把映射图像作为灰度图像的前提下做的实验,这时componentX(x, y)和componentY(x, y)总是相同的。推广到一般的彩色图像,各个色彩通道的值就不同了,通过选择x方向和y方向所使用的通道,就是对目标图像在两个方向上做了不同的扭曲。
取componentX=1,componentY=2,效果如下:
图片如下:

这时,componentY(x, y)恒等于0,所以,目标图像在y方向上只是平移。通过映射图像各个通道的混合,和scaleX/scaleY的控制,任意操作目标图像的像素偏移。
比如这个::)
图片如下:

虽然比较乱,但明显已经有涟漪的感觉了,不是么?
来加上一个最简单的缩放动画看看效果:
效果
源文件
这就比较逼真了吧。
网上看到的另外的几个涟漪效果,最基本的方法都是一样的。
效果
效果
还有一种合成水波效果的方法,就是配合perlinNoise。效果如下,这就不是上面那种小涟漪了。
效果源文件
如果仅仅想着replacementMapFilter的用途就是模拟水的效果的话,那就太浪费了。其实利用不同的映射图像,可以生成很多PS中滤镜的效果!!
下面简单列出来了四种:喷溅、水彩、飓风、布纹。(点击右键进行选择)感兴趣的朋友可以自己调整调整参数值试试。
效果源文件
这里还有两个国外牛人搞的:
效果
效果
他们提供了源文件
源文件
源文件
除此之外,还可以增强以前的放大镜效果。以前就只是一大一小两张图通过遮罩来模拟,但有一点,就是放大镜的边缘无法产生真实情况中的扭曲效果,现在通过DisplacementMapFilter也可以实现了:
效果
类似的还可以做出这种玻璃球的效果
效果
源文件
可以实现的效果太多了...如果把上面所有的方法结合起来使用,完全有可能实现大部分的PS滤镜的效果!我这里也就只是抛砖引玉了...
:)
DisplacementMapFilter的构造函数如下:
public DisplacementMapFilter(mapBitmap:BitmapData, mapPoint:Point, componentX:Number, componentY:Number, scaleX:Number, scaleY:Number, [mode:String], [color:Number], [alpha:Number])
这里的mapBitmap(映射图像)可理解为水面。正是因为它,我们看水下的物体(目标图像)才会有变化。
mapPoint是一个偏移位置。表示目标影片剪辑的左上角与映射图像左上角之间的偏移量。
componentX/componentY表示通道的标志。取值可为1、2、4、8,分别表示r、g、b、a四个通道。
scaleX/scaleY,一个缩放比例。
上面这些参数放在公式中比较容易理解:
dstPixel[x, y] = srcPixel[x + ((componentX(x, y) - 128) * scaleX) / 256, y + ((componentY(x, y) - 128) * scaleY) / 256]
其中,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的部分,像素位置不变。因此,在上面这种线性变化时看来,即产生了相应的线性偏移的效果。
那么当mapBitmap为纯色的时候,也就很好理解了,根据其灰度的不同,目标图像会进行相应的平移。
当mapBitmap为放射渐变填充的话又会如何呢?效果如下:
图片如下:

反转填充颜色
图片如下:

这些都是在我们在把映射图像作为灰度图像的前提下做的实验,这时componentX(x, y)和componentY(x, y)总是相同的。推广到一般的彩色图像,各个色彩通道的值就不同了,通过选择x方向和y方向所使用的通道,就是对目标图像在两个方向上做了不同的扭曲。
取componentX=1,componentY=2,效果如下:
图片如下:

这时,componentY(x, y)恒等于0,所以,目标图像在y方向上只是平移。通过映射图像各个通道的混合,和scaleX/scaleY的控制,任意操作目标图像的像素偏移。
比如这个::)
图片如下:

虽然比较乱,但明显已经有涟漪的感觉了,不是么?
来加上一个最简单的缩放动画看看效果:
效果
源文件
这就比较逼真了吧。
网上看到的另外的几个涟漪效果,最基本的方法都是一样的。
效果
效果
还有一种合成水波效果的方法,就是配合perlinNoise。效果如下,这就不是上面那种小涟漪了。
效果源文件
如果仅仅想着replacementMapFilter的用途就是模拟水的效果的话,那就太浪费了。其实利用不同的映射图像,可以生成很多PS中滤镜的效果!!
下面简单列出来了四种:喷溅、水彩、飓风、布纹。(点击右键进行选择)感兴趣的朋友可以自己调整调整参数值试试。
效果源文件
这里还有两个国外牛人搞的:
效果
效果
他们提供了源文件
源文件
源文件
除此之外,还可以增强以前的放大镜效果。以前就只是一大一小两张图通过遮罩来模拟,但有一点,就是放大镜的边缘无法产生真实情况中的扭曲效果,现在通过DisplacementMapFilter也可以实现了:
效果
类似的还可以做出这种玻璃球的效果
效果
源文件
可以实现的效果太多了...如果把上面所有的方法结合起来使用,完全有可能实现大部分的PS滤镜的效果!我这里也就只是抛砖引玉了...
:)
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}