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

      

  • 相关阅读:
    linux centos 常用命令(需掌握)
    centos轻松搭建NFS
    Centos6.1在yum安装软件的时候,居然报错了,如何解决
    安装好Centos后,需要做的几件事情。
    使用scp命令传输文件
    批量删除文件或者批量修改文件
    Centos7搭建常用的LNMP架构
    python实现自动抠名字签名,比PS还快
    inotify软件实现实时同步,ssh-key 秘钥连接方式,saltstack实战批量管理Linux,expect批量分发秘钥
    Cisco 路由器配置OSPF 动态路由 (开放式最短路径优先)
  • 原文地址:https://www.cnblogs.com/dt1991/p/12560351.html
Copyright © 2020-2023  润新知