Q:从一幅位图中淡出到另一幅位图
A:使用BitmapData类的pixelDissolve(
)方法
API:
执行源图像到目标图像的像素溶解,或使用同一图像执行像素溶解。Flash 运行时使用 randomSeed
值生成随机像素溶解。函数的返回值必须在后续调用中传入才能继续进行像素溶解,直至完成。
如果源图像不等于目标图像,则会使用所有的属性将像素从源复制到目标。此过程允许从空白图像溶解到完全填充的图像。
如果源图像和目标图像相等,则使用 color
参数填充像素。此过程允许从完全填充的图像溶解掉。在此模式中,将会忽略目标
参数。
point
第一次调用pixelDissolve( )方法时,通过随机种子产生随机位置的像素拷贝,返回的值可以作为下一次的随机种子
该方法语法:
seed = srcBmp.pixelDissolve(destBmp, sourceRect, destPoint,seed, numPixels, fillColor);
sourceBitmapData:BitmapData — 要使用的输入位图图像。源图像可以是另一个 BitmapData 对象,也可以引用当前 BitmapData 实例。
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。
destPoint:Point — 目标图像(当前 BitmapData 实例)中与源矩形的左上角对应的点。
randomSeed:int (default = 0) — 用于开始像素溶解的随机种子。
numPixels:int (default = 0) — 默认值是源区域(宽度 x 高度)的 1/30。
fillColor:uint (default = 0) — 一个 ARGB 颜色值,用于填充其源值等于目标值的像素。
第一个例子使用两幅位图,一幅白色,一幅黑色,每帧拷贝位图的百分之一个像素:
其中的seed参数决定随机样式,它可以是任意值。
如果用同样的seed调用两次方法,得到的图案将是一样的,因此要的到不同的图案必须使用不同的seed,可以用随机数产生它。
package code { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; /** * @author GavinGao */ public class DissolveTest extends Sprite { //黑色 private var _bitmap:BitmapData; //白色 private var _bitmap2:BitmapData; //图 private var _image:Bitmap; //种子 private var _seed:Number; //像素数 private var _pixelCount:int = 0; public function DissolveTest() { _bitmap = new BitmapData(stage.stageWidth,stage.stageHeight,false,0xffffffff); _bitmap2 = new BitmapData(stage.stageWidth,stage.stageHeight,false,0xff0000000); _image = new Bitmap(_bitmap); addChild(_image); _seed = Math.random() * 10000; addEventListener(Event.ENTER_FRAME,onEnterFrame); } private function onEnterFrame(evt:Event):void{ //每帧取Bitmap的百分之一 var numPixelCount:int = (_bitmap.width * _bitmap.width) / 100; _seed = _bitmap.pixelDissolve(_bitmap2,_bitmap.rect,new Point(),_seed,numPixelCount); //判断处理是否完成 _pixelCount +=numPixelCount; if(_pixelCount >(_bitmap.width * _bitmap.height) ){ removeEventListener(Event.ENTER_FRAME,onEnterFrame); } } } }
这样我们就搞定了。简单吧。
转载请注明出处。