Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >as3中颜色矩阵滤镜ColorMatrixFilter的使用

as3中颜色矩阵滤镜ColorMatrixFilter的使用

作者头像
meteoric
发布于 2018-11-16 07:01:52
发布于 2018-11-16 07:01:52
1.4K00
代码可运行
举报
文章被收录于专栏:游戏杂谈游戏杂谈
运行总次数:0
代码可运行

上面的例子,也是游戏开发中比较常用的功能,与“怪物”战斗后,将其“灰”掉。这其中最重要的还是对AS3颜色矩阵滤镜(ColorMatrixFilter)的使用。

上面实例核心的代码为changeImgGray函数,示例使用flex + sdk3.6编写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <?xml version="1.0" encoding="utf-8"?>

       2: <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600">

       3:     

       4:     <mx:Script>

       5:         <![CDATA[

       6:             

       7:             private function changeImgGray(bool:Boolean=true):void

       8:             {

       9:                 var filter:ColorMatrixFilter;

      10:                 var filterArr:Array = [];

      11:                 var matrix:Array = [];

      12:                 

      13:                 if (bool)

      14:                 {

      15:                     matrix = matrix.concat([0.3086, 0.6094, 0.0820, 0, 0]);        //red

      16:                     matrix = matrix.concat([0.3086, 0.6094, 0.0820, 0, 0]);        //green

      17:                     matrix = matrix.concat([0.3086, 0.6094, 0.0820, 0, 0]);        //blue

      18:                     matrix = matrix.concat([0, 0, 0, 1, 0]);    //alpha

      19:  

      20:                     filter = new ColorMatrixFilter(matrix);

      21:                     filterArr.push(filter);

      22:                 }

      23:                 

      24:                 testContainer.filters = filterArr;

      25:                 

      26:                 grayImg.visible = bool;

      27:             }

      28:             

      29:         ]]>

      30:     </mx:Script>

      31:     

      32:     <mx:Canvas verticalCenter="0" horizontalCenter="0" 

      33:                id="testContainer" 

      34:                borderColor="#ff0000" borderStyle="solid" borderThickness="1">

      35:         

      36:         <mx:Image id="roleImg" source="assets/pic/role.jpg" horizontalCenter="0" verticalCenter="0" />

      37:         

      38:         <mx:Image id="grayImg" source="assets/pic/dead.png" horizontalCenter="0" verticalCenter="0" visible="false" />

      39:         

      40:     </mx:Canvas>

      41:     

      42:     <mx:HBox width="100%" horizontalGap="10" horizontalAlign="center" verticalCenter="-65">

      43:         

      44:         <mx:Button id="setNormalBtn" click="changeImgGray(false)" label="设置正常" />

      45:         

      46:         <mx:Button id="setGrayBtn" click="changeImgGray()" label="设置灰掉" />

      47:         

      48:     </mx:HBox>

      49:     

      50: </mx:Application>

随后我在网上找到一个别人写好的as3类ColorMatrixFilterProxy.as

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: package ghostcat.filter

       2: {

       3:     import flash.filters.ColorMatrixFilter;

       4:  

       5:     import ghostcat.debug.Debug;

       6:     import ghostcat.util.core.UniqueCall;

       7:  

       8:     /**

       9:      * 色彩变换滤镜

      10:      *

      11:      * @author flashyiyi

      12:      *

      13:      */

      14:     public dynamic class ColorMatrixFilterProxy extends FilterProxy

      15:     {

      16:         /**

      17:          * 色彩饱和度

      18:          */

      19:         public static const SATURATION:int = 0;

      20:  

      21:         /**

      22:          * 对比度

      23:          */

      24:         public static const CONTRAST:int = 1;

      25:  

      26:         /**

      27:          * 亮度

      28:          */

      29:         public static const BRIGHTNESS:int = 2;

      30:  

      31:         /**

      32:          * 颜色反相

      33:          */

      34:         public static const INVERSION:int = 3;

      35:  

      36:         /**

      37:          * 色相偏移

      38:          */

      39:         public static const HUE:int = 4;

      40:  

      41:         /**

      42:          * 阈值

      43:          */

      44:         public static const THRESHOLD:int = 5;

      45:  

      46:         private var _type:int;

      47:  

      48:         private var _n:int;

      49:  

      50:         private var updateCall:UniqueCall = new UniqueCall(update);

      51:  

      52:         public function ColorMatrixFilterProxy(type:int, n:int)

      53:         {

      54:             super(new ColorMatrixFilter())

      55:             this.type = type;

      56:             this.n = n;

      57:         }

      58:  

      59:         /**

      60:          * 滤镜需要的参数

      61:          * @return

      62:          *

      63:          */

      64:         public function get n():int

      65:         {

      66:             return _n;

      67:         }

      68:  

      69:         public function set n(v:int):void

      70:         {

      71:             _n = v;

      72:             updateCall.invalidate();

      73:         }

      74:  

      75:         /**

      76:          * 滤镜类型

      77:          * @return

      78:          *

      79:          */

      80:         public function get type():int

      81:         {

      82:             return _type;

      83:         }

      84:  

      85:         public function set type(v:int):void

      86:         {

      87:             _type = v;

      88:             updateCall.invalidate();

      89:         }

      90:  

      91:         private function update():void

      92:         {

      93:             switch (type)

      94:             {

      95:                 case SATURATION:

      96:                     changeFilter(createSaturationFilter(n));

      97:                     break;

      98:                 case CONTRAST:

      99:                     changeFilter(createContrastFilter(n));

     100:                     break;

     101:                 case BRIGHTNESS:

     102:                     changeFilter(createBrightnessFilter(n));

     103:                     break;

     104:                 case INVERSION:

     105:                     changeFilter(createInversionFilter());

     106:                     break;

     107:                 case HUE:

     108:                     changeFilter(createHueFilter(n));

     109:                     break;

     110:                 case THRESHOLD:

     111:                     changeFilter(createThresholdFilter(n));

     112:                     break;

     113:                 default:

     114:                     Debug.error("错误的取值")

     115:                     break;

     116:             }

     117:         }

     118:  

     119:         /**

     120:          * 色彩饱和度

     121:          *

     122:          * @param n (N取值为0到255)

     123:          * @return

     124:          *

     125:          */

     126:         public static function createSaturationFilter(n:Number):ColorMatrixFilter

     127:         {

     128:             return new ColorMatrixFilter([0.3086 * (1 - n) + n, 0.6094 * (1 - n), 0.0820 * (1 - n), 0, 0, 0.3086 * (1 - n), 0.6094 * (1 - n) + n, 0.0820 * (1 - n), 0, 0, 0.3086 * (1 - n), 0.6094 * (1 - n), 0.0820 * (1 - n) + n, 0, 0, 0, 0, 0, 1, 0]);

     129:         }

     130:  

     131:         /**

     132:          * 对比度

     133:          *

     134:          * @param n (N取值为0到10)

     135:          * @return

     136:          *

     137:          */

     138:         public static function createContrastFilter(n:Number):ColorMatrixFilter

     139:         {

     140:             return new ColorMatrixFilter([n, 0, 0, 0, 128 * (1 - n), 0, n, 0, 0, 128 * (1 - n), 0, 0, n, 0, 128 * (1 - n), 0, 0, 0, 1, 0]);

     141:         }

     142:  

     143:         /**

     144:          * 亮度(N取值为-255到255)

     145:          *

     146:          * @param n

     147:          * @return

     148:          *

     149:          */

     150:         public static function createBrightnessFilter(n:Number):ColorMatrixFilter

     151:         {

     152:             return new ColorMatrixFilter([1, 0, 0, 0, n, 0, 1, 0, 0, n, 0, 0, 1, 0, n, 0, 0, 0, 1, 0]);

     153:         }

     154:  

     155:         /**

     156:          * 颜色反相

     157:          *

     158:          * @return

     159:          *

     160:          */

     161:         public static function createInversionFilter():ColorMatrixFilter

     162:         {

     163:             return new ColorMatrixFilter([-1, 0, 0, 0, 255, 0, -1, 0, 0, 255, 0, 0, -1, 0, 255, 0, 0, 0, 1, 0]);

     164:         }

     165:  

     166:         /**

     167:          * 色相偏移

     168:          * @return

     169:          *

     170:          */

     171:         public static function createHueFilter(n:Number):ColorMatrixFilter

     172:         {

     173:             const p1:Number = Math.cos(n * Math.PI / 180);

     174:             const p2:Number = Math.sin(n * Math.PI / 180);

     175:             const p4:Number = 0.213;

     176:             const p5:Number = 0.715;

     177:             const p6:Number = 0.072;

     178:             return new ColorMatrixFilter([p4 + p1 * (1 - p4) + p2 * (0 - p4), p5 + p1 * (0 - p5) + p2 * (0 - p5), p6 + p1 * (0 - p6) + p2 * (1 - p6), 0, 0, p4 + p1 * (0 - p4) + p2 * 0.143, p5 + p1 * (1 - p5) + p2 * 0.14, p6 + p1 * (0 - p6) + p2 * -0.283, 0, 0, p4 + p1 * (0 - p4) + p2 * (0 - (1 - p4)), p5 + p1 * (0 - p5) + p2 * p5, p6 + p1 * (1 - p6) + p2 * p6, 0, 0, 0, 0, 0, 1, 0]);

     179:         }

     180:  

     181:         /**

     182:          * 阈值

     183:          *

     184:          * @param n(N取值为-255到255)

     185:          * @return

     186:          *

     187:          */

     188:         public static function createThresholdFilter(n:Number):ColorMatrixFilter

     189:         {

     190:             return new ColorMatrixFilter([0.3086 * 256, 0.6094 * 256, 0.0820 * 256, 0, -256 * n, 0.3086 * 256, 0.6094 * 256, 0.0820 * 256, 0, -256 * n, 0.3086 * 256, 0.6094 * 256, 0.0820 * 256, 0, -256 * n, 0, 0, 0, 1, 0]);

     191:         }

     192:     }

     193: }

在网上搜索到的一些资源:

ColorMatrixFilter--颜色矩阵滤镜

AS3的工具类库—ColorMatrixFilterProxy.as

Understanding AS3 ColorMatrixFilter class

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-01-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——3.内存管理
hope kc
2024/09/23
770
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——3.内存管理
【C++】OpenGL:创建线段和多边形示例
首先,将main函数中的//glutDisplayFunc(lines); //传递需要勾画的函数取消注释,这是调用线段的操作;
DevFrank
2024/07/24
1060
【C++】OpenGL:创建线段和多边形示例
as3的InteractivePNG例子
在as3中很多时候需要只能选中png中可视区域,即透明区域“感觉可以穿透”。两张png重叠的时候,鼠标可以分别响应它们的事件。如下图所示:
meteoric
2018/11/15
5600
Strassen矩阵乘法问题(Java)
矩阵乘法是线性代数中最常见的问题之一 ,它在数值计算中有广泛的应用。 设A和B是2个nXn矩阵, 它们的乘积AB同样是一个nXn矩阵。 A和B的乘积矩阵C中元素C[i][j]定义为:
WHYBIGDATA
2023/01/31
7100
Strassen矩阵乘法问题(Java)
【C++修炼之路】C++动态内存管理
C语言的malloc/free如同原始人的燧石,C++用new/delete将其淬炼为青铜利刃。这个看似简单的语法糖衣包裹着面向对象编程的基因突变:当你在堆上new一个对象时,编译器会秘密执行三项神圣仪式——计算内存大小、分配原始空间、调用构造函数。这三个步骤构成的原子操作,使得C++对象摆脱了C语言中先分配内存再初始化的割裂状态。
f狐o狸x
2025/03/13
910
【C++修炼之路】C++动态内存管理
count算法计算容器中元素出现次数
函数原型: #include<iostream> using namespace std; #include<deque> #include<algorithm> #include<string>
大忽悠爱学习
2021/03/02
4790
count算法计算容器中元素出现次数
【C++】第六节—内存管理
现在我们必须要清楚,写一个程序,程序里面的变量都放在我们刚才介绍的那个区域呢?见下题目(面试题,面试会考这样的题,那可得好好学清楚了)
云边有个稻草人
2025/03/31
790
【C++】第六节—内存管理
【C++】C/C++内存管理
程序的运行本质上就是存储一些指令,存储一些数据,对于数据,由于的需求的不同,有的可能使用一下就行了,有的需要长期使用,有的不能修改,因此内存中划分成不同的区域存放相关的一些数据(本文主要目的在于介绍C++相关内存管理方式,对于内存浅浅介绍一些知识,具体相关内存底层知识请移步其他文章。)
ZLRRLZ
2024/12/13
1610
【C++】C/C++内存管理
Flash图片处理 图像处理 效果 滤镜 pixelbender blender mode
  前6个小玩意,正好对应Flash CS滤镜面板的几个效果,使用比较简单,详细可以参考这个: http://blog.sina.com.cn/s/blog_3fbce8b10100o8oz.html 。
用户1258909
2018/07/24
1.4K0
探讨缓存行与伪共享
最近项目中有个需求,需要用到有界队列对访问请求量进行流量削峰请求,同时作为一个缓冲层对请求处理进行后续处理,Java 内置有界队列 ArrayBlockingQueue 可以满足这方面的需求,但是性能上并不满足,于是使用了 Disruptor,它是英国外汇交易公司 LMAX 开发的一个高性能队列,了解到它内部解决伪共享问题,今天就和大家一起学习缓存行与伪共享相关的知识。
张乘辉
2020/08/20
7990
C/C++内存管理
选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区) globalVar在哪里?____ staticGlobalVar在哪里?____ staticVar在哪里?____ localVar在哪里?____ num1 在哪里?____ char2在哪里?____ *char2在哪里?____ pChar3在哪里?____ *pChar3在哪里?____ ptr1在哪里?____ *ptr1在哪里?____ 是不是有点乱,看一下图解吧。
小志biubiu
2025/02/27
970
C/C++内存管理
Android 自定义View高级特效,神奇的贝塞尔曲线
(这就是贝塞尔曲线 ) 投稿作者:一口仨馍/csdn 原文链接: http://blog.csdn.net/qq_17250009/article/details/51027183 效果图 效果图中
非著名程序员
2018/02/02
2.1K0
Android 自定义View高级特效,神奇的贝塞尔曲线
C++传送锚点的内存寻址:内存管理
我们直到在堆上动态开辟空间需要使用malloc,realloc等函数,不仅要保证前后类型一致,还要断言空指针,感觉还是太麻烦了,所以在C++使用了更简洁方便的动态开辟函数
DARLING Zero two
2025/02/02
1110
C++传送锚点的内存寻址:内存管理
C/C++内存管理
注意: 申请和释放单个元素的空间,使用 new 和 delete 操作符;申请和释放连续的空间,使用 new[] 和 delete[]。
waves浪游
2024/12/15
1161
C/C++内存管理
基于层次聚类的工业数据分析研究
聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。从统计学的观点看,聚类分析是通过数据建模简化数据的一种方法。传统的统计聚类分析方法包括系统聚类法、分解法、加入法、动态聚类法、有序样品聚类、有重叠聚类和模糊聚类等。
用户7623498
2020/08/04
6320
基于层次聚类的工业数据分析研究
c++STL容器之使用list容器对自己定义的数据类型进行排序
需求;有一个类,类中有姓名和年龄成员变量,现在要按姓名升序排序,在姓名相同时按名字升序排序。
西西嘛呦
2020/08/26
1.4K0
c++那些事儿9.0指针
知识点综述: ---- 指针:地址。 1.0在32位的cpu上,cpu一般由32根地址线组成,所以地址大小为32位 即4byte,同理可得指针大小为4byte; 2.0指针是有类型的,和它指向的数据类型相同; double p1=11,*p2; p2=&p1;//p2为double型指针 3.0数组名是一个const指针。 int arr[6]; arr是常量指针。 二维数组名是指向行的指针,它指向一整行元素而非个
热心的社会主义接班人
2018/04/27
7160
c++那些事儿9.0指针
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
(1)绘制线条: imageline($p1, $p2, $p3, $p4, $p5, $6)
IT工作者
2021/12/20
1.1K0
Opencv 源码初探
序言 这篇博客主要是想记录一下关于 opencv 这个库的一些学习心得,并穿插一些图像处理的基本知识。 分析基于 opencv 4.5.1,其他版本可能会存在一些接口的变动,还请注意。 准备 首先是 opencv 的安装。对于 python 版的 opencv,可以直接使用 pip install 进行安装。对于 C++ 版则可以自己下载源码进行编译与安装。这里介绍在 ubuntu 下如何编译源码:
苏州程序大白
2021/08/13
2.9K0
Opencv 源码初探
内存分配算法 伙伴系统
 伙伴系统是常用的内存分配算法,linux内核的底层页分配算法就是伙伴系统,伙伴系统的优点就是分配和回收速度快,减少外部碎片。算法描述: 
用户4415180
2022/06/23
1.7K1
内存分配算法 伙伴系统
相关推荐
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——3.内存管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验