as3.0对图片进行不规则切割源代码实例

import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.GlowFilter;
import flash.filters.DropShadowFilter;
import flash.display.Bitmap;
import flash.display.MovieClip;

//拖动拼图 数组
var spArray: Array = new Array();
//被触碰拼图 对象
var hit_Object: Object = {};
var rows, cols, w, h, i, j, m, n: Number;
var filterArray: Array = new Array();
//当前拖动的拼图块
var nowDrag_mc:MovieClip;
//定义行数列数 
rows = 8;
cols = 8;
//画曲线的重要参数,curWidth为贝塞尔曲线的参数 
var curWidth: Number;
var ellipseA: Number;
var ellipseB: Number;


//加载外部图片 
var url = new URLRequest("1.jpg");
var _loader = new Loader();
_loader.load(url);
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImgLoad);

//定义滤镜 
var color1: Number = 0x33CCFF;
var alp1: Number = 0.8;
var blurX1: Number = 2;
var blurY1: Number = 2;
var strength1: Number = 2;
var quality1: Number = 3;
var inner1: Boolean = false;
var knockout1: Boolean = false;
var filter1: GlowFilter = new GlowFilter(color, alp1, blurX1, blurY1, strength1, quality1, inner1, knockout1);
filterArray.push(filter1);

var splArray: Array = new Array();
var distance: Number = 3;
var angleInDegrees: Number = 3;
var color: Number = 0x000033;
var alp: Number = 0.8;
var blurX: Number = 3;
var blurY: Number = 3;
var strength: Number = 1;
var quality: Number = 3;
var inner: Boolean = false;
var knockout: Boolean = false;
var hideObject: Boolean = false;
var filter: DropShadowFilter = new DropShadowFilter(distance, angleInDegrees, color, alp, blurX, blurY, strength, quality, inner, knockout, hideObject);
filterArray.push(filter);

//对每个格子的形状初始化,如果left, right, up, down全部为true表示四面有填充的椭圆 
for (i = 0; i < rows; i++) {
	for (j = 0; j < cols; j++) {
		//var ms: MySplit = new MySplit(i, j);

		var ms={row:i,col:j};
		//首先调用随机数,确认本格右方和下方是否填充 
		m = int(Math.random() * 2);
		n = int(Math.random() * 2);
		if (m == 1 && j < cols - 1) {
			ms.right = true;
		}
		if (n == 1 && i < rows - 1) {
			ms.down = true;
		}
		//cuplayer.com检测本格左方是否需要填充 
		if (j > 0 && !splArray[i * cols + j - 1].right) {
			ms.left = true;
		}
		//cuplayer.com检测本格上方是否需要填充 
		if (i > 0 && !splArray[(i - 1) * cols + j].down) {
			ms.up = true;
		}
		splArray.push(ms);
	}
}

//cuplayer.com主处理函数 
function onImgLoad(event: Event): void {
	
	var bitmap: BitmapData = new BitmapData(_loader.width, _loader.height);
	w = _loader.width / rows;
	curWidth = w / (cols-1);
	h = _loader.height / cols;
	//ellipseA始终较大,这样可以适应竖着或横着的椭圆 
	ellipseA = h > w ? h / rows : w / rows;
	ellipseB = h < w ? h / cols : w / cols;
	
	
	
	var sampleSprite: MovieClip ;
	//cuplayer.com逐个分割图片 
	for (i = 0; i < rows; i++) {
		for (j = 0; j < cols; j++) {
			bitmap.draw(_loader);
			sampleSprite= new MovieClip();
			sampleSprite.graphics.lineStyle();
			sampleSprite.graphics.beginBitmapFill(bitmap);
			myDraw(sampleSprite, splArray[i * cols + j]);
			sampleSprite.graphics.endFill();
			if (w * rows > 1000) {
				sampleSprite.scaleX = 1000 / (w * rows);
				sampleSprite.scaleY = 1000 / (w * rows)
			}
			sampleSprite.x = 2 * j;
			sampleSprite.y = 2 * i;
			//标识每块的唯一性 用来检测碰撞
			sampleSprite.id=i.toString()+j.toString();
			dragContainer_mc.addChild(sampleSprite);
			sampleSprite.filters = filterArray;
			spArray.push(sampleSprite);
			sampleSprite.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
			
		}
	}
	
	for (i = 0; i < rows; i++) {
		for (j = 0; j < cols; j++) {
			bitmap.draw(_loader);
			sampleSprite = new MovieClip();
			sampleSprite.graphics.lineStyle();
			sampleSprite.graphics.beginBitmapFill(bitmap);
			myDraw(sampleSprite, splArray[i * cols + j]);
			sampleSprite.graphics.endFill();
			if (w * rows > 1000) {
				sampleSprite.scaleX = 1000 / (w * rows);
				sampleSprite.scaleY = 1000 / (w * rows)
			}
			sampleSprite.x = 2 * j;
			sampleSprite.y = 2 * i;
			hitContainer_mc.addChild(sampleSprite);
			sampleSprite.filters = filterArray;		
			//标识每块的唯一性 用来检测碰撞
			hit_Object[i.toString()+j.toString()]=sampleSprite;
			
		}
	}
	//被碰撞的拼图
	hitContainer_mc.alpha=0;
	
	
	//原图
	var bitmap_yuantu: BitmapData = new BitmapData(_loader.width, _loader.height);
	bitmap_yuantu.draw(_loader);
	var bitmap_yuantuBM=new Bitmap(bitmap_yuantu);
	var scaleNum=2 * cols/bitmap_yuantuBM.width+1;
	bitmap_yuantuBM.scaleX =scaleNum;
	bitmap_yuantuBM.scaleY =scaleNum;
	yuantuContainer_mc.addChild(bitmap_yuantuBM);
	bitmap_yuantuBM.filters = filterArray;
	
}
//cuplayer.com画图函数 
function myDraw(sprite: Sprite, ms: Object) {
	i = ms.row;
	j = ms.col;
	sprite.graphics.drawRoundRect(j * w, i * h, w, h, 5, 5);
	if (ms.right) {
		sprite.graphics.moveTo(w * (j + 1), i * h);
		sprite.graphics.curveTo(w * (j + 1) - curWidth, i * h + h / 2, w * (j + 1), (i + 1) * h);
		sprite.graphics.drawEllipse(w * (j + 1) - 0.5 * curWidth, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
	} else if (j < (cols-1)) {
		sprite.graphics.moveTo(w * (j + 1), i * h);
		sprite.graphics.curveTo(w * (j + 1) + curWidth, i * h + h / 2, w * (j + 1), (i + 1) * h);
		sprite.graphics.drawEllipse(w * (j + 1) + 0.5 * curWidth - ellipseB, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
	}
	if (ms.left) {
		sprite.graphics.moveTo(w * j, i * h);
		sprite.graphics.curveTo(w * j + curWidth, i * h + h / 2, w * j, (i + 1) * h);
		sprite.graphics.drawEllipse(w * j + 0.5 * curWidth - ellipseB, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
	} else if (j > 0) {
		sprite.graphics.drawEllipse(w * j - 0.5 * curWidth, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
		sprite.graphics.moveTo(w * j, i * h);
		sprite.graphics.curveTo(w * j - curWidth, i * h + h / 2, w * j, (i + 1) * h);
	}
	if (ms.down) {
		sprite.graphics.moveTo(w * j, (i + 1) * h);
		sprite.graphics.curveTo(w * j + 0.5 * w, (i + 1) * h - curWidth, (j + 1) * w, (i + 1) * h);
		sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, (i + 1) * h - 0.5 * curWidth, ellipseA, ellipseB);
	} else if (i < (cols-1)) {
		sprite.graphics.moveTo(w * j, (i + 1) * h);
		sprite.graphics.curveTo(w * j + 0.5 * w, (i + 1) * h + curWidth, (j + 1) * w, (i + 1) * h);
		sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, (i + 1) * h + 0.5 * curWidth - ellipseB, ellipseA, ellipseB);
	}
	if (ms.up) {
		sprite.graphics.moveTo(w * j, i * h);
		sprite.graphics.curveTo(w * j + 0.5 * w, i * h + curWidth, (j + 1) * w, i * h);
		sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, i * h + 0.5 * curWidth - ellipseB, ellipseA, ellipseB);
	} else if (i > 0) {
		sprite.graphics.moveTo(w * j, i * h);
		sprite.graphics.curveTo(w * j + 0.5 * w, i * h - curWidth, (j + 1) * w, i * h);
		sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, i * h - 0.5 * curWidth, ellipseA, ellipseB);
	}
}

//cuplayer.com拖曳处理函数 
function onDown(e: MouseEvent) {
	//获取当前被拖动 的对象
	nowDrag_mc=MovieClip(e.currentTarget);
	nowDrag_mc.startDrag();
	stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
}
function onUp(e: MouseEvent) {
	stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
	nowDrag_mc.stopDrag();
}

  

原文地址:https://www.cnblogs.com/dt1991/p/12560351.html