天天看點

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導出效果:

Flash 截圖