现在的位置: 首页 > 综合 > 正文

AS3(BitmapData pixelDissolve) 照片淡出效果

2014年11月14日 ⁄ 综合 ⁄ 共 1857字 ⁄ 字号 评论关闭

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);
			}
		}
	}
}

这样我们就搞定了。简单吧。

转载请注明出处。

【上篇】
【下篇】

抱歉!评论已关闭.