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



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西溪漫步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值