Flash 截图

这里是Flash BitmapData对象对应用,通过BitmapData的方法,可以把某一区域的像素取出来,放到另外一个区域,这就实现了截图功能,很有意思,具体往下看:

1、新建一fla文件ImageCut.fla,导入一张图片到库,并选择在第一帧导出为BitmapData

2、新建一as文件ImageCut.as,添加脚本如下:

package 
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.utils.ByteArray;
import flash.filters.GlowFilter;

public class ImageCut extends Sprite
{
private var theBitmap:Bitmap;
private var flowerBmd:BitmapData;
private var beginPoint:Point;
private var startX:Number=0;
private var startY:Number=0;
private var drawSpr:Sprite;
public function ImageCut():void
{
this.beginPoint = null;
init();
}

private function init():void
{
flowerBmd = new Flower();
var flowerBmp:Bitmap = new Bitmap();
flowerBmp.bitmapData = flowerBmd;
this.addChild(flowerBmp);

drawSpr = new Sprite();
this.addChild(drawSpr);
stage.addEventListener(MouseEvent.MOUSE_DOWN,downHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,upHandler);
}

private function downHandler(e:MouseEvent):void
{
if (beginPoint == null && e.currentTarget == e.target)
{
beginPoint = new Point(stage.mouseX,stage.mouseY);
}
startX = e.stageX;
startY = e.stageY;
stage.addEventListener(MouseEvent.MOUSE_MOVE,moveHandler);
}

private function moveHandler(e:MouseEvent):void
{
e.updateAfterEvent();
var minX:Number = Math.min(e.stageX,startX);
var minY:Number = Math.min(e.stageY,startY);
var maxX:Number = Math.max(e.stageX,startX);
var maxY:Number = Math.max(e.stageY,startY);

drawSpr.graphics.clear();
drawSpr.graphics.lineStyle(0);
drawSpr.graphics.beginFill(0xffff00,0.5);
drawSpr.graphics.drawRect(0,0,maxX-minX,maxY-minY);

drawSpr.x = minX;
drawSpr.y = minY;
}

private function upHandler(e:MouseEvent):void
{
drawSpr.graphics.clear();
stage.removeEventListener(MouseEvent.MOUSE_MOVE,moveHandler);
if (beginPoint != null)
{
var tempPoint = this.beginPoint;
beginPoint = null;
var endPoint = new Point(stage.mouseX,stage.mouseY);
var tempWidth:Number = endPoint.x - tempPoint.x;

var tempHeight:Number = endPoint.y - tempPoint.y;

        var   byteArray:ByteArray=flowerBmd.getPixels(new Rectangle(tempPoint.x,tempPoint.y,tempWidth                                 ,tempHeight));
var bitmapData:BitmapData = new BitmapData(tempWidth,tempHeight);
byteArray.position = 0;
bitmapData.setPixels(new Rectangle(0,0,tempWidth,tempHeight),byteArray);
var bitmap:Bitmap = new Bitmap(bitmapData);
var sprite:Sprite = new Sprite();
sprite.x = tempPoint.x;
sprite.y = tempPoint.y;
sprite.addChild(bitmap);
sprite.addEventListener(MouseEvent.MOUSE_DOWN,beginDrag);
sprite.addEventListener(MouseEvent.MOUSE_UP,endDrag);
sprite.doubleClickEnabled = true;
sprite.addEventListener(MouseEvent.DOUBLE_CLICK,doubleClick);
this.addChild(sprite);
sprite.filters = [new GlowFilter(0x0000FF)];
}
}

private function doubleClick(e:MouseEvent):void
{
if (e.currentTarget == e.target)
{
e.currentTarget.parent.removeChild(e.currentTarget);
}
}

private function beginDrag(e:MouseEvent):void
{
if (e.currentTarget == e.target)
{
e.currentTarget.startDrag();
}
e.stopPropagation();
}

private function endDrag(e:MouseEvent):void
{
e.currentTarget.stopDrag();
}
}

}

Ctrl+Enter导出效果:



猜你喜欢

转载自blog.csdn.net/guominyou/article/details/80199781
今日推荐