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);
}
}
}
}
这样我们就搞定了。简单吧。
转载请注明出处。