zoukankan      html  css  js  c++  java
  • filter的运用

    colorTransform:简单的颜色变化。其中包含整体调整显示对象颜色的值。

    可使用 ColorTransform 类调整显示对象的颜色值。可以将颜色调整或颜色转换应用于所有四种通道:红色、绿色、蓝色和 Alpha 透明度。

    当 ColorTransform 对象应用于显示对象时,将按如下方法为每个颜色通道计算新值:

    • 新红色值 = (旧红色值 * redMultiplier) + redOffset
    • 新绿色值 = (旧绿色值 * greenMultiplier) + greenOffset
    • 新蓝色值 = (旧蓝色值 * blueMultiplier) + blueOffset
    • 新 Alpha 值 = (旧 Alpha 值 * alphaMultiplier) + alphaOffset

    如果计算后任何一个颜色通道值大于 255,则该值将被设置为 255。如果该值小于 0,它将被设置为 0。

    可以通过下列方式使用 ColorTransform 对象:

    • 在 BitmapData 类的 colorTransform() 方法的 colorTransform 参数中
    • 作为 Transform 对象(此对象可以用作显示对象的 transform 属性)的 colorTransform 属性

    必须使用 new ColorTransform() 构造函数创建 ColorTransform 对象后,才能调用 ColorTransform 对象的方法。

    颜色转换不会应用于影片剪辑(如加载的 SWF 对象)的背景色,它们仅应用于附加到影片剪辑的图形和元件。

     

    flash.filters包中的滤镜,常用的有这几个:

    BlurFilter:可使用 BlurFilter 类将模糊视觉效果应用于显示对象。

    可使用 BlurFilter 类将模糊视觉效果应用于显示对象。模糊效果可以柔化图像的细节。您可以生成一些模糊效果,范围从创建一个柔化的、未聚焦的外观到高斯模糊(就像通过半透明玻璃查看图像一样的朦胧的外观)。当此滤镜的 quality 属性设置为低时,结果为柔化的、未聚焦的外观。当 quality 属性设置为高时,该属性接近高斯模糊滤镜。您可以将滤镜应用于任何显示对象(即,从 DisplayObject 类继承的对象),例如 MovieClip、SimpleButton、TextField 和 Video 对象,以及 BitmapData 对象。

    要创建新的滤镜,请使用构造函数 new BlurFilter()。滤镜的具体使用取决于要应用滤镜的对象:

    • 要对影片剪辑、文本字段、按钮和视频应用滤镜,请使用 filters 属性(继承自 DisplayObject)。设置对象的 filters 属性不会修改相应的对象,而清除 filters 属性可以删除相应的滤镜。
    • 要对 BitmapData 对象应用滤镜,请使用 BitmapData.applyFilter() 方法。对 BitmapData 对象调用 applyFilter() 会取得源 BitmapData 对象和滤镜对象,并最终生成一个过滤图像。

    如果对显示对象应用滤镜,显示对象的 cacheAsBitmap 属性将设置为 true。如果删除所有滤镜,将恢复 cacheAsBitmap 的原始值。

    此滤镜支持舞台缩放。但是,它不支持常规缩放、旋转和倾斜。如果对象本身进行了缩放(scaleXscaleY 未设置为 100%),滤镜效果将不进行缩放。只有用户在舞台上进行放大时它才会缩放。

     

    GlowFilter:使用 GlowFilter 类可以对显示对象应用发光效果。

    ColorMatrixFilter:使用 ColorMatrixFilter 类可以将 4 x 5 矩阵转换应用于输入图像上的每个像素的 RGBA 颜色和 Alpha 值,以生成具有一组新的 RGBA 颜色和 Alpha 值的结果。

    使用 ColorMatrixFilter 类可以将 4 x 5 矩阵转换应用于输入图像上的每个像素的 RGBA 颜色和 Alpha 值,以生成具有一组新的 RGBA 颜色和 Alpha 值的结果。该类允许饱和度更改、色相旋转、亮度为 Alpha 以及各种其他效果。您可以将滤镜应用于任何显示对象(即,从 DisplayObject 类继承的对象),例如 MovieClip、SimpleButton、TextField 和 Video 对象,以及 BitmapData 对象。

    参考如下文章:

    一开始觉得AS3的滤镜很难使用,尤其是那些矩阵,让人望而生畏。最近写一个聊天模块,要用到离线状态下的灰色头像,于是认真研究了ColorMatrixFilter,发现其实也没有那么难。所谓的矩阵其实就是一个再普通不过的Array,只要弄懂这个Array各个元素的关系就很容易使用滤镜。

        先发代码,下面再详细介绍。这个程序实现加载一张彩色图像,通过滤镜变成黑白图像之后输出。

    [java] view plaincopy

    1. package {  
    2. import flash.display.Bitmap;  
    3. import flash.display.Loader;  
    4. import flash.display.Sprite;  
    5. import flash.events.Event;  
    6. import flash.filters.ColorMatrixFilter;  
    7. import flash.net.URLRequest;  
    8. public class ColorFilterSample extends Sprite  
    9.     {  
    10. private var loader:Loader;  
    11. public function ColorFilterSample()  
    12.         {  
    13.             loader=new Loader();  
    14.             loader.contentLoaderInfo.addEventListener  
    15.                                              (Event.COMPLETE, onComplete);  
    16.             loader.load(new URLRequest("hehua.jpg"));  
    17.         }  
    18. private function onComplete(e:Event):void{  
    19. //加载一张彩色图片
    20.             var image:Bitmap=new Bitmap();  
    21.             image=Bitmap(loader.content);  
    22. //定义滤镜matrix,一个包含20个项的数组
    23.             var matrix:Array=[0.3086, 0.6094, 0.0820, 0, 0,  
    24. 0.3086, 0.6094, 0.0820, 0, 0,  
    25. 0.3086, 0.6094, 0.0820, 0, 0,  
    26. 0,      0,      0,      1, 0];  
    27. //初始化一个ColorMatrixFilter对象(matrix作为参数)
    28.             var myfilter:ColorMatrixFilter=new ColorMatrixFilter(matrix);  
    29. //将滤镜应用于图片
    30.             image.filters=[myfilter];  
    31.             addChild(image);  
    32.         }  
    33.     }  

        首先定义一个matrix数组:一个包含20个浮点数的数组。AS3.0帮助文档中的计算公式是这样的:

    redResult     = (a[0]  * srcR) + (a[1]  * srcG) + (a[2]  * srcB) + (a[3]  * srcA) + a[4]
    greenResult = (a[5]  * srcR) + (a[6]  * srcG) + (a[7]  * srcB) + (a[8]  * srcA) + a[9]
    blueResult    = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14]
    alphaResult  = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]

        上面的公式看起来有点复杂,没关系,再看下面的图示就清晰多了:

                           srcR    srcG     srcB      srcA     offset

    redResult       a[0]      a[1]     a[2]      a[3]      a[4] 

    greenResult   a[5]      a[6]     a[7]      a[8]      a[9]

    blueResult     a[10]    a[11]   a[12]    a[13]    a[14]

    alphaResult   a[15]    a[16]   a[17]    a[18]    a[19]

        srcR,srcG,srcB,srcA表示原始图像每个像素的RGBA值(关于像素颜色的RGBA值请查阅手册,这里不再展开),redResult,greenResutl,blueResult,alphaResult表示目标图像的RGBA值。上面公式的意思是说:redResult的值是a[0]、a[1]、a[2]、a[3]分别与 srcR,srcG,srcB,srcA相乘,再加上a[4]的总和(a[4]是偏移量)。greenResutl,blueResult,alphaResult以此类推。这样说应该很容易理解了吧?

        好吧,这个公式无非就是说原始图像的像素值,通过和这个数组交叉相乘,得到目标图像的像素值。

        很明显,我们给这个数组定义不同的值,则会得到不同的结果,目标图像的效果也不一样。这里要得到灰度图像应该使用这个数组:

        [0.3086, 0.6094, 0.0820, 0, 0,
         0.3086, 0.6094, 0.0820, 0, 0,
         0.3086, 0.6094, 0.0820, 0, 0,
         0,          0,          0,          1, 0];

        这个数组凭什么得来的呢?应该是某些大师实验得到的吧,百度可以搜索到这方面的专业论述,我这里就说一下大概意思。话说取得原始图像的RGB值,计算得到它们的平均值之后再赋给新的RGB值,这样对每个像素处理之后就得到黑白图像了,或者可以理解成RGB值按照0.33 : 0.33 : 0.33的权值重新分配;后来有些大师研究得到结论:如果RGB值按照0.3086 : 0.6094 : 0.0820的比例分配,得到的灰度图像看起来最顺眼,于是就有了上面的数组!顺便再提一下,这里的alpha值没有改变(那个数字1,你懂的),还有偏移量都为0。

         好了,明白了这个数组之后,将其作为参数传进ColorMatrixFilter的构造函数,生成一个滤镜实例myfilter,再将myfilter添加到图像即可。或许有些童鞋还要问为什么用image.filters=[myfilter]这条语句来添加滤镜?好的,我并不打算好人做到底,童鞋请回家看AS帮助文档吧^_*

  • 相关阅读:
    “XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案
    深入浅出 eBPF 安全项目 Tracee
    Unity3d开发的知名大型游戏案例
    Unity 3D 拥有强大的编辑界面
    Unity 3D物理引擎详解
    Unity 3D图形用户界面及常用控件
    Unity 3D的视图与相应的基础操作方法
    Unity Technologies 公司开发的三维游戏制作引擎——Unity 3D
    重学计算机
    windows cmd用户操作,添加,设备管理员组,允许修改密码
  • 原文地址:https://www.cnblogs.com/axyz/p/3365165.html
Copyright © 2011-2022 走看看