flash图片如何镜像翻转_做影片镜像方法(静态)

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

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值