【2012-02-05】更新至【4.3.1
B】
最近有些忙,没有及时更新,非常抱歉。
我会继续更新的,谢谢各位网友的关注!!2012-01-28
(2012-02-05 15:47)
我们还可以在图像之间复制通道。一个非常普遍的用法是将一个图像的alpha通道复制到另一个图像中。图TextureWrapTest实例。接下来,我们来看另外一个例子。假如我们加载了一张没有alpha通道的图像,但又希望为该图像添加边框效果。当然,可以给这张图像添加一个遮罩层来实现。但是如果我们需要对BitmapData做进一步的处理或需要单独对alpha通道添加效果呢。那么最好的方法是为图像添加alpha通道。copyChannel()方法可以胜任这项任务。
如图4-21,左图是用绘图API绘制的一个图形,右图是应用了该图像的alpha通道后的效果。
图4-21.将左图图形中的alpha通道复制到右图图像中的效果
本例完整的代码请参考下面的CopyAlphaChannelTest
(2012-02-05 15:45)
如前面讨论的,一个通道是包含了一组0~255的8位数据的图像。显示在舞台上时是一张黑白图像。只有当多个图像组合成24位(或32位)时,才能产生彩色图像。在Photoshop中,可以在通道面板中查看每个通道灰色预览图,如图4-19:
图4-19.Photoshop的通道面板中显示每个通道灰色缩略图
你可以将每个通道复制到其他通道中,创建自定义的8位通道预览图,比如将红色通道复制到其他两个颜色通道中。当所有通道的亮度值都相同时,组合效果将是一张灰色图像,表示一个单独的灰色通道。下面的代码,来自CopyChannelTest.as,即可实现这个效果:
(2012-02-01 11:33)
在上一章中,我们了解了如何使用copyPixels()方法在图像之间复制像素。copyChannel()方法拥有类似的一个功能,可以将一个图像的颜色通道复制到另一个颜色通道中,或者在同一个图像中的不同颜色通道之间复制。
public function
copyChannel (
sourceBitmapData:BitmapData,
sourceRect:Rectangle,
destPoint:Point,
sourceChannel:uint,
destChannel:uint
&nbs
(2012-02-01 11:32)
如果一个导演只有一张演员名单,而不去跟每个演员沟通交流,很难拍出一部电影。如果无法处理每个音轨的音乐,真的无法想象如何在录影棚里混音合成工作。庆
幸的是,ActionScript中的BitmapData不仅可以影响组合的图像数据,也可以组成图像的每个颜色通道进行单独处理。
目前我们所接触的图像处理方法都会应用到所有的颜色通道中,或者将所有的通道组成一个数据使用。不过,还有一些方法是专门对图像的每个颜色通道进行单独处理的,可以尽可能的帮我们实现更多炫酷的效果。
(2012-01-28 20:29)
通过DisplacementMapFilter可以实现更多复杂的效果,相应的这也需要更多复杂的数学运算。不过我们不会因此去研究这些复杂的算法。实际上,我将向你推荐Rakuto
Furntani的as3Filter类库,(你可以在
http://code.google.com/p/asfilters中找到这个类库,它是符合MIT许可的)。它包含了大量的方法,可以创建旋转、挤压、膨胀等不同效果的置换图像。不过我们还是先看看内置的置换图像能实现什么样的效果吧!
下面的FisheyelensTest类在Rakuto的代码基础上进行了修改,实现随鼠标移动,扭曲鼠标下方的图像。编译这个类或运行以及编译好的SWF文件,可以看到图4-18所示的效果。

图4-18.棋盘图像随着鼠标移动动态实现鱼眼扭曲效果
上
(2012-01-28 19:53)
置换图像可以实现的一个简单的应用是伪3D效果,看起来仿佛是伪一个对象包裹了一层纹理。特别是在一个平面上,为一些倾斜面添加不规则纹理(比如TextField)扭曲,效果是非常明显逼真的。如图4-17所示:

图4-17.利用置换图像,依照倾斜面为文字添加石头纹理
源代码可以在本章的TextureWrapTest.as中找到。源码中首先创建了一个文本对象,然后为其添加BevelFilter滤镜,作为一个简单的置换图像。
package {
(2012-01-18 18:03)
如果要在互联网编年史上描述2011年的话,那么无需任何插件即可在浏览器中直接嵌入支持硬件加速的3D图形一定会被记上重重的一笔。
随着大部分现代浏览器都增加了对WebGL的支持(微软IE除外),以及最近发布的Flash
11,开发者终于可以开始把构建高性能互动3D体验放上
(2012-01-17 19:39)
在第2章结束部分,我们见到了解了DisplacementMapFilter,它可以用来扭曲像素,效果如图4-16
4-16.第2章中的DisplacementMapFilter扭曲图像示意图,左图为置换图
当时,我们没有深入讨论这个滤镜,因为当时有很多的知识点都还没学,现在我们已经具备这个能力了,那就一起把它拿下吧!
DisplacementMapFilter滤镜结构如下:
与显示对象的filters属性添加滤镜不同的是,applyFilter()方法会永久性的修改图像。因此它又一定的破坏性,也就是说,一旦应用了滤镜后,无法撤销动作。不过它的优点是在已经应用滤镜的图像上添加其他滤镜时,已有滤镜不会进行重复计算或者重新添加滤镜,另外,我们还可以将滤镜后像素分解出来,或进行其他的操作,而不是利用原数据。这些功能是用显示对象的filters属性添加的滤镜无法完成的。applyFilter()方法是一个相对简单方法(至少跟本章介绍的方法比起来是这样的),结构如下:
public function
applyFilter (
sourceBitmapData:BitmapData,
sourceRect:Rectangle,
&nbs
(2011-12-30 21:18)