图片的爆破与合成

来源:互联网 发布:mac air 壁纸 编辑:程序博客网 时间:2024/04/29 07:41

demo :: http://www.dreamnight.summerhost.info/explodeImage.swf

 

  MY.jpg  是外部的照片连接名

 

 

源码::

 

 

 

package {
 import flash.display.Bitmap;
 import flash.display.BitmapData;
 import flash.display.Loader;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.geom.Matrix;
 import flash.net.URLRequest;
 import flash.events.MouseEvent;
 import com.greensock.TweenLite;
 import flash.utils.ByteArray;
 import flash.text.TextField
 import flash.events.ProgressEvent
 //import flash.geom.Rectangle;
 //import flash.geom.Point;


 /**
  * ...
  * @author dreamnight

  * @ date  2010/3/12
  */
 public class Main extends Sprite {
  private var str:String;//外部照片的链接地址
  private var bmp:Bitmap;//保存加载进来的的图片
  private var cellWidth:Number;
  private var cellHeight:Number;
  private var smallImages:Array;
  private var storePosition:Array;
  private var container:Sprite;
  private var showText:TextField
  private var row:int;
  private var column:int;
  //判断是否发生click事件
  private var isClick:Boolean;

  public function Main():void {
   if (stage) {
    init();
   } else {
    addEventListener(Event.ADDED_TO_STAGE, addToStage);
   }
  }

  private function addToStage(e:Event = null):void {
   removeEventListener(Event.ADDED_TO_STAGE, addToStage);
   init();
   // entry point
  }

  private function init():void {
   str="MY.jpg";
   container = new Sprite();
   addChild(container);
   //让container处在中间
   loadImage(str);


  }
  private function loadImage(str:String=""):void {
   showText= new TextField();
   
   var loader:Loader = new Loader();
   var urlRequest:URLRequest=new URLRequest(str);
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
   loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);

   loader.load(urlRequest);

  }
  
  
  private function onProgress(e:ProgressEvent){
   var percent:int=int(e.bytesLoaded*100/e.bytesTotal);
   showText.text="正在很努力的加载:"+String(percent) +"%";
   showText.x=stage.stageWidth/2-showText.width/2
   showText.y=stage.stageHeight/2-showText.height/2
   showText.autoSize="left";
   addChild(showText);
   
   }

  private function onComplete(e:Event):void {
   
   trace(e.target.content);
   bmp=Bitmap(e.target.content);
   showText.text="";
   showText=null

   trace(bmp.width);
   trace(bmp.height);
   splite(30,25);//拆分相片 里面的参数必须要是 宽高比的倍数 这样才能将所有的图片显示出来
  }


  private function splite(rowWidth:int=30,columnHeight:int=25):void {
   cellWidth=rowWidth;
   cellHeight=columnHeight;

   smallImages=[];
   storePosition=[];
   //爆破的个数 :  row*column
   row=Math.floor(bmp.width/cellWidth);//横向的个数
   column=Math.floor(bmp.height/cellHeight);//列个数
   trace(row);
   trace(column);

   for (var i:int = 0; i!=column; ++i) {

    for (var j:int = 0; j != row; ++j) {
     var cellBitmapData:BitmapData=new BitmapData(cellWidth,cellHeight);

     var tx:Number=- cellWidth*i;
     var ty:Number=- cellHeight*j;
     var matrix:Matrix = new Matrix();
     matrix.translate(tx ,ty );
     cellBitmapData.draw(bmp,matrix);
     //var rect:Rectangle = new Rectangle(i, j, cellWidth, cellHeight);

     //cellcopyPixels


     var bitmap:Bitmap=new Bitmap(cellBitmapData);
     //对该照片进行复原
     bitmap.x=- tx;
     bitmap.y=- ty;
     smallImages.push(bitmap);
     //保存初始位置:
     var oj:Object= new Object();
     oj.x=- tx;
     oj.y=- ty;
     storePosition.push(oj);
     //将其添加到容器中
     container.addChild(bitmap);
     trace("tx为:"+tx);
     trace("ty为:"+ty);
     //trace("源的X为"+bmp.x+"/nY为"+bmp.y);

    }
   }

   container.x=stage.stageWidth/2-bmp.width/2;

   container.y=stage.stageHeight/2-bmp.height/2;

   //对数组ujinxing复制,以此来保存其初始X,y坐标
   /*
   var copy:ByteArray = new ByteArray();
   copy.writeObject(smallImages);
   copy.position = 0;
   storePosition = copy.readObject()*/


   //增加交换性
   interactive();// 增加交互性

  }

  private function interactive():void {
   isClick=false;
   container.addEventListener(MouseEvent.CLICK, onClick,false,1,true);


  }
  private function onClick(e:MouseEvent):void {
   if (isClick==true) {
    isClick=false;
    trace("yes");
    //进行还原

    for (var j:int = 0; j != row * column; ++j) {
     //还原
     TweenLite.to(smallImages[j],3,{x:storePosition[j].x,y:storePosition[j].y,z:0});
    }


   } else {
    isClick=true;
    trace("ok");

    for (var i:int = 0; i != row * column; ++i) {
     //
     TweenLite.to(smallImages[i],5,{x:Math.random()*stage.stageWidth,y:Math.random()*stage.stageHeight,z:Math.random()>0.5?Math.random()*1000:-Math.random()*1000});
    }

   }


  }

 

 }

}

原创粉丝点击