ActionScript3游戏中的图像编程(连载七十六)

总目录:http://www.cnblogs.com/iloveas/p/3879125.html

 

4.3.3 ColorMatrixFilter与ColorTransform在底层处理机制上的差异

 

      代码中最最关键的地方就在于红色标注的一句——设置一个ColorMatrixFilter。注意到matrix是一个数组,只是为了便于用矩阵的形式查看,我们一般都把它分成4行来写。上面的代码中,我用单位矩阵进行填充,所以输出结果与源图像一致。
下面,我们尝试用ColorMatrixFilter进行反色。

 

      ColorTransform的反色代码如下:

 

1 _myColorTransform.redMultiplier = _myColorTransform.greenMultiplier =_myColorTransform.blueMultiplier = -1;
2 _myColorTransform.redOffset = 255 = _myColorTransform.greenOffset = _myColorTransform.blueOffset = 255;

 

      把它代入到ColorMatrixFilter的Transform矩阵中,得到:

 

      

 

      前面提到,ColorTransform在使用了BlendMode之后会出错,那么,改用ColorMatrixFilter之后的结果又会如何呢?我们改一下代码:

 

1 _testSprite_dst.filters = [new ColorMatrixFilter([-1, 0, 0, 0, 255, 
2                                                   0, -1, 0, 0, 255,
3                                                   0, 0, -1, 0, 255, 
4                                                   0, 0, 0, 1, 0])];

 

      效果如图 4.23所示。

 

图 4.23 ColorMatrixFilter的反色


      可以发现,ColorMatrixFilter并没有出现ColorTransform的那种错误,反色效果相当准确,究其原因,就在于ColorTransform的处理基于矢量,单个圆反色后再ADD的结果并不等于ADD后再整体反色。但是ColorMatrixFilter作为BitmapFilter的子类,它不管源对象是矢量还是位图都会把它按照位图的方式进行处理,反色的优先级低于内部的混合模式,所以不会出错。

 

      另一个可以证明该结论的例子,是透明度的设置,如图 4.24和图 4.25所示。
 

图 4.24 ColorTransform设置透明度
 

图 4.25 ColorMatrixFilter的透明度


      此外,受矢量和位图处理模式差异的影响,给没有设置cacheAsBitmap(包括滤镜)的设备字体应用alphaMultiplier将没有任何效果,但是ColorMatrixFilter的alpha则可以让设备字体透明。这一点相信大家都比较熟悉,此处不再赘述。
关于可以用ColorTransform实现的颜色矩阵,我不打算继续展开讨论,因为我已经在ColorTransform一节里面分析得够详细了。在ColorMatrixFilter里要做的,仅仅是把数值代入到Transform的矩阵中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值