·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3中的BitmapData类理解与介绍(3)

时间:2013-08-08 00:09cuplayer
5,与其他BitmapData进行像素值的比较,其实就是求差异(或者叫各像素相减得的差) compare(otherBitmapData:BitmapData):Object 首先这两个BMD的比较分为几种情况: (1)如果宽度不相同,函数返回-3。 (2)如果高

5,与其他BitmapData进行像素值的"比较",其实就是求差异(或者叫各像素相减得的差)

compare(otherBitmapData:BitmapData):Object

首先这两个BMD的比较分为几种情况:

(1)如果宽度不相同,函数返回-3。

(2)如果高度不相同,函数返回-4;

(3)如果宽高都不相同,先算宽,即函数返回-3;

(4)如果两个BMD完全相同,函数返回0;

(5)如果两个BMD长宽相同,颜色不同,则返回一个新的Bitmapdata对象,新BMD对象特征如下:

bmd1.compare(bmd2);

新BMD的每一点像素值为bmd1减bmd2所得,由于有Alpha存在,当RRGGBB不相同时,忽略Alpha的比较,新值为0xFF(RRGGBB差);当RRGGBB相同时,则返回Alpha的差,新值则为0xZZ(Alpha差)XXXXX(RGB值)。

总的来说就是先比较颜色,颜色不同的情况下就不考虑透明度。颜色相同就看透明度的差异。不修改原对象,只返回一个新的BitmapData对象。具体玩法还不明,呵呵。

6,复制通道

copyChannel(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, sourceChannel:uint, destChannel:uint):void

这 个就是对某一区域内所有像素的颜色通道的替换。sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point这三个参数分别对应作用BMD,作用区域,和生成图在原BMD的位置。sourceChannel:uint, destChannel:uint这两个参数就是分别对应用哪个通道的值,去替换哪个通道。具体的通道保存在BitmapDataChannel类中。

注意,这类替换过程并不影响sourceBitmapData的像素信息,他只是将计算的结果重新赋值到原BMD的对应位置上。

7,复制像素

copyPixels(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, alphaBitmapData:BitmapData = null, alphaPoint:Point = null, mergeAlpha:Boolean = false):void

sourceBitmapData, sourceRect, destPoint老三样,就不说了,说说其他三个参数。

alphaBitmapData和alphaPoint貌似是在Copy时有关Alpha通道的Map映射,作为Alpah通道值传入,而mergeAlpha则为是否复制Alpha通道的开关。

后面三个参数其实也不是太确定用法···不过平常的使用前面的就可以了,在涉及到Alpha通道的复制时可以再深入研究。这个函数可以用作截图,当然另外的一个draw方法也可以。

8,释放内存

dispose():void

这个主要作用是释放掉分配给BitmapData的内存,并将宽高设置为0,此后的所有对BitmapData的操作都将不生效。

9,draw方法,显示对象BitmapData化

draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void

这里的六个参数,除了第一个是必选外,其余的都是可选:

source:要被“画”的对象。

matrix:一个变型矩阵,作用于BitmapData。

colorTransform:一个颜色变换,作用于BitmapData。

blendMode:图层叠加模式。具体的模式可以在BlendMode 类中找到。将BitmapData与source进行图层叠加。

clipRect:定义了draw source的区域。

smoothing:定义是否进行图像平滑。只对source是BitmapData时起作用。

这个绝对是BitmapData的重头戏,非常常用的方法。画一切可以“画”的对象,就是文章开头提到的实现了IBitmapDrawable接口的对象都可被“画”。BitmapData和DisplayObject都实现了这个接口。

这样做的好处是可以在显示对象不需要被使用的时候Draw一个假的放在舞台上,或者有很多元件在舞台上运动的时候,统一把结果Draw在一张BitmapData上,节省CPU的开销,实现用内存换取CPU性能

注意,如果跨域没有安全文件的话,draw方法是无法draw到内容的,不过这种情况在一般的内容里不会出现。

10,填充矩形

fillRect(rect:Rectangle, color:uint):void

这个应该很好理解,就是输入一个矩形对象,然后用对应的颜色填充这块矩形对象的区域就OK了。

11,颜料桶填充

floodFill(x:int, y:int, color:uint):void

这个也是另外的一种填充,模拟的是我们平常在IDE里进行的颜料桶填充方式(选中颜色,选中填充的点,就会将所有附近相同颜色的像素一起填充)。对应的x,y就是点的坐标,color自然就是颜色啦。

12,计算滤镜作用区域

generateFilterRect(sourceRect:Rectangle, filter:BitmapFilter):Rectangle

因为滤镜的作用区域不一定总等于输入的作用区域,所以这个函数是用来计算滤镜的实际作用区域的,输入的是一个矩形区域sourceRect和需要作用的滤镜filter,返回的是实际滤镜会影响到的矩形。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器