package com.icefox.Loader
{
import flash.media.Microphone;
import com.icefox.utils.localToStage;
import flash.text.*;
import flash.net.*;
import flash.events.*;
import flash.display.*;
import flash.geom.*;
public class PicLoader extends MovieClip
{
public var picData:BitmapData;
private var loading:Sprite=new Sprite();
public var mainLoader:Loader;
private var txt:TextField;
private var zoom:Number = 1;
private var parentW:Number;
private var parentH:Number;
private var autoDetectParentWid:Boolean = true;
private var autoDetectParentHei:Boolean = true;
private var disRec:Rectangle=new Rectangle();
public var pic:Bitmap;
public function set ParentWidth(wid:Number):void
{
autoDetectParentWid = false;
parentW = wid;
}
public function set ParentHeight(hei:Number):void
{
autoDetectParentHei = false;
parentH = hei;
}
public function PicLoader():void
{
this.mainLoader=new Loader();
this.txt=new TextField();
addEventListener("addedToStage",added);
}
public function load(url:URLRequest):void
{
mainLoader.load(url);
}
public function proc(event:ProgressEvent):void
{
loading.graphics.clear();
loading.graphics.beginFill(0xff0000);
loading.graphics.drawRect(0, -2, event.bytesLoaded /
event.bytesTotal * parentW,4 );
loading.graphics.endFill();
txt.text = Math.round(event.bytesLoaded / event.bytesTotal * 100) +
"%";
}
public function completed(event:Event):void
{
loading.graphics.clear();
centerPos();
mainLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,proc);
mainLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,completed);
addChild(pic);
dispatchEvent(new Event("Converted"));
}
public function added(event:Event):void
{
if (this.parent != stage)
{
if (autoDetectParentWid)
{
parentW = this.parent.width;
}
if (autoDetectParentHei)
{
parentH = this.parent.height;
}
}
else
{
if (autoDetectParentWid)
{
parentW = stage.stageWidth;
}
if (autoDetectParentHei)
{
parentH = stage.stageHeight;
}
}
disRec = this.parent.getRect(null);
mainLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,proc);
mainLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
completed);
addChild(loading);
loading.x = disRec.x;
loading.y = disRec.y + this.parentH / 2;
}
public function centerPos():void
{
var picWidth:Number;
var picHeight:Number;
picWidth = Bitmap(mainLoader.content).bitmapData.width;
picHeight = Bitmap(mainLoader.content).bitmapData.height;
zoom = ((parentW / picWidth) < (parentH /
picHeight))?(parentW / picWidth):(parentH / picHeight);
var matrix:Matrix = new Matrix();
matrix.scale(zoom,zoom);
picData = new BitmapData(picWidth * zoom,picHeight * zoom);
picData.draw(Bitmap(mainLoader.content).bitmapData, matrix, null,
null, null, true);
pic = new Bitmap(picData);
this.x += disRec.x;
this.y += disRec.y;
this.x+=(parentW-pic.bitmapData.width)/2;
this.y+=(parentH-pic.bitmapData.height)/2;
}
public function reListen():void
{
mainLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completed);
if(pic!=null)
{
pic.bitmapData.dispose();
}
this.x = 0;
this.x = 0;
this.y = 0;
}
}
}
package com.icefox.Display {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import com.icefox.Loader.PicLoader;
import com.icefox.utils.setRegPoint;
public class Displayer extends MovieClip {
public var target:PicLoader = new PicLoader();
private var initRec:Rectangle;
private var mirrorObject:Sprite = new Sprite();//镜像容器
private var bitmapCopy:Bitmap;//复制对象
//private var mirrorMask:Sprite = new Sprite();//遮罩对象
public function Displayer(rec:Rectangle)
{
initRec = rec;
//建立矩形空间
graphics.moveTo(rec.left, rec.top);
graphics.lineTo(rec.left, rec.bottom);
graphics.lineTo(rec.right, rec.top);
graphics.moveTo(rec.right, rec.bottom);
graphics.lineTo(rec.left, rec.bottom);
graphics.lineTo(rec.right, rec.top);
//装载子加载器
addChild(target);
}
public function changePic(url:String):void {
target.load(new URLRequest(url));
target.reListen();
}
public function loadPic(url:String):void {
target.addEventListener("Converted", makeMirror);
target.load(new URLRequest(url));
}
public function makeMirror(event:Event):void {
bitmapCopy = new Bitmap();
bitmapCopy.bitmapData = target.picData.clone();
mirrorObject.addChild(bitmapCopy);
mirrorObject.y = initRec.height/2 + 10;
mirrorObject.x = target.x;
var tempAlpha:uint;
for (var j:uint = 0; j <
bitmapCopy.bitmapData.height; j++ )
{
tempAlpha =
j-bitmapCopy.bitmapData.height/2>0?((j-bitmapCopy.bitmapData.height/2)
/ bitmapCopy.bitmapData.height * 255):0;
for (var i:uint = 0; i <
bitmapCopy.bitmapData.width; i++ )
{
bitmapCopy.bitmapData.setPixel32(i,j,bitmapCopy.bitmapData.getPixel(i,j)|(tempAlpha<<24));
}
}
addChild(mirrorObject);
setRegPoint(mirrorObject, mirrorObject.getBounds(null).width / 2,
mirrorObject.getBounds(null).height / 2);
mirrorObject.rotationX = 180;
}
public function removeMirror():void
{
removeChild(mirrorObject);
mirrorObject = null;
}
}
}
package
{
import flash.display.Sprite;
import flash.events.Event;
import com.icefox.Display.Displayer;
import com.icefox.utils.*;
import flash.geom.*;
public class Main extends Sprite
{
private var rec:Rectangle;
private var player:Displayer;
public function Main():void
{
//初始化基础数据成员
//矩形区域
rec = new Rectangle(-200, -150, 400, 300);
//初始化显示对象
player = new Displayer(rec);
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
addChild(player);
player.x = player.getBounds(null).width / 2;
player.y = player.getBounds(null).height / 2;
player.loadPic("example.jpg");
}
}
}