首页 > 设计 > WEB开发 > 正文

8.6.将Convolution滤镜应用于图像

2023-08-02 23:09:22
字体:
来源:转载
供稿:网友
8.6.1. 问题
我想要让用户改变颜色,对比,或锐利图像。
8.6.2. 解决办法
创建一个ConvolutionFilter 的实例, 绑定ConvolutionFilter 的矩阵属性到用户可以改变的文本输入。然后添加滤镜到图像的滤镜数组,以适用于滤镜。
8.6.3. 讨论
ConvolutionFilter 是flash.filter 包中一个最多功能和复杂的滤镜。它可以用来作浮雕,检测边缘,锐化,模糊,等许多其他的效果。全部参数由Matrix 对象控制的3 维矩阵传递他的结构到滤镜中。ConvolutionFilter 在概念上在源图像上的每个像素一个一个通过计算,并确定最后的像素和像素周边的颜色。一个矩阵,作为一个数值形数组指定,表明每个像素的周围,在多大程度上影响颜色最后的结果。构造在这里显示:
+展开
-ActionScript
ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null,divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true,clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)

他的参数如下:
matrixX:Number (default = 0)
矩阵的x 维(矩阵中列的数量),默认值是0。

matrixY:Number (default = 0)
矩阵的y 维(矩阵中行的数量),默认值是0。

matrix:Array (default = null)
用来做矩阵变幻的数组的值。数组中的项的数量必须等于matrixX * matrixY.

divisor:Number (default = 1.0)
在矩阵变换时使用的除数。默认值是1。除数,整体颜色强度的结果的矩阵的值的和。0被忽略,并使用默认值。

bias:Number (default = 0.0)
添加偏差值到矩阵变换的结果。默认值是0。

preserveAlpha:Boolean (default = true)
值是false 表示alpha 值不保留,卷积适用于所有通道,包括alpha 通道。值是true 表示卷积只适用于颜色通道。默认值是true。

clamp:Boolean (default = true)
源文件的像素,值是true 表明,输入的图像的每个边缘???

color:uint (default = 0)
十六进制的颜色来代替源图形的像素。

alpha:Number (default = 0.0)
alpha 的替代颜色。

一些常见的ConvolutionFilter 效果分别如下:
+展开
-ActionScript
new ConvolutionFilter(3,3,new Array(-5,0,1,1,-2,3,-1,2,1),1)

创建一个边缘检测的图形,只有最大对比的区域保留。
+展开
-ActionScript
new ConvolutionFilter(3,3,new Array(0,20,0,20,-80,20,0,20,0),10)

创建一个黑白边框线。
+展开
-ActionScript
new ConvolutionFilter(5,5,new Array(0,1,2,1,0,1,2,4,2,1,2,4,8,4,2,1,2,4,2, 1,0,1,2,1,0),50);

创建一个模糊效果。
+展开
-ActionScript
new ConvolutionFilter(3,3,new Array(-2,-1,0,-1,1,1,0,1,2),0);

创建一个浮雕效果。
完整的代码如下:
+展开
-XML
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxmlwidth="450height="550">
<mx:Script>
<![CDATA[
import mx.core.BitmapAsset;
[Embed(source="../assets/mao.jpg")]
private var mao:Class;
private function convolve():void
{
var asset:BitmapAsset = new mao() as BitmapAsset;
var convolution:ConvolutionFilter =
new ConvolutionFilter(matrixXSlider.value, matrixYSlider.value,
[input1.text, input2.text, input3.text, input4.text,
input5.text, input6.text],
divisorSlider.value, biasSlider.value, true);
var _filters:Array = [convolution];
asset.filters = _filters;
img.source = asset;
}

]]>
</mx:Script>
<mx:Button click="convolve()label="convolve away"/>
<mx:HBox>
<mx:Text text="Matrix X"/>
<mx:VSlider height="100id="matrixXSlidervalue="5.0"
change="convolve()"/>

<mx:Text text="Matrix Y"/>
<mx:VSlider height="100id="matrixYSlidervalue="5.0"
change="convolve()"/>

<mx:Text text="Divisor"/>
<mx:VSlider height="100id="divisorSlidervalue="5.0"
change="convolve()"/>

<mx:Text text="Bias"/>
<mx:VSlider height="100id="biasSlidervalue="5.0"
change="convolve()"/>

<mx:VBox>
<mx:TextInput id="input1change="convolve()"
width="40"/>

<mx:TextInput id="input2change="convolve()"
width="40"/>

<mx:TextInput id="input3change="convolve()"
width="40"/>

<mx:TextInput id="input4change="convolve()"
width="40"/>

<mx:TextInput id="input5change="convolve()"
width="40"/>

<mx:TextInput id="input6change="convolve()"
width="40"/>

</mx:VBox>
</mx:HBox>
<mx:Image id="img"/>
</mx:VBox>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表