package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import flash.utils.ByteArray; /**
* ...
* @author Frost.Yen
*/
public class CutOut extends Sprite
{
private var ldr:Loader;
private var cutContainer:Sprite;//存放裁剪的图片的容器
private var primitiveContainer:Sprite;//存放原始图片的容器
private var frame:Shape;//裁剪框
private var downPoint:Point=new Point();
private var bytearr:ByteArray=new ByteArray(); public function CutOut():void
{
init();
} private function init():void
{
this.graphics.beginFill(0xcccccc);
this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
this.graphics.endFill(); cutContainer = new Sprite();
primitiveContainer = new Sprite();
frame = new Shape(); cutContainer.x = 400; this.addChild(primitiveContainer);
this.addChild(cutContainer);
this.addChild(frame); ldr = new Loader();
ldr.load(new URLRequest("http://hiphotos.baidu.com/frostyen/pic/item/7e49d8b53f6b48ffd9335aa2.jpg"));
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
primitiveContainer.addChild(ldr);
this.addEventListener(MouseEvent.MOUSE_DOWN, onStageDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onStageUp);
}
private function onStageDown(e:MouseEvent):void
{
while (cutContainer.numChildren>0)
{
cutContainer.removeChildAt(0);
} downPoint.x = mouseX;
downPoint.y = mouseY;
frame.graphics.clear();
primitiveContainer.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
} private function onMove(e:MouseEvent):void
{
frame.graphics.clear();
frame.graphics.lineStyle(1,0xff00ff);
frame.graphics.drawRect(0, 0, mouseX - downPoint.x, mouseY - downPoint.y);
frame.x = downPoint.x;
frame.y = downPoint.y;
} private function onStageUp(e:MouseEvent):void
{
primitiveContainer.removeEventListener(MouseEvent.MOUSE_MOVE,onMove);
if (frame.width != 0)
{
var bmpd1:BitmapData = new BitmapData(primitiveContainer.width,primitiveContainer.height);
bmpd1.draw(primitiveContainer);
bytearr = bmpd1.getPixels(new Rectangle(frame.x,frame.y,frame.width,frame.height));
bytearr.position = 0;
var bmpd2:BitmapData = new BitmapData(frame.width,frame.height);
try
{
bmpd2.setPixels(new Rectangle(0,0,frame.width,frame.height),bytearr);
}
catch (err:Error)
{
trace(err.message);//若裁剪框拉的范围超出原始图像范围会报此错,若解决,需深究.
frame.graphics.clear();
return;
}
var bmp:Bitmap = new Bitmap(bmpd2);
cutContainer.addChild(bmp);
} } private function onComplete(e:Event):void
{
ldr.scaleX = ldr.scaleY = 0.6;
} } }

[ActionScript 3.0] 框选裁剪的更多相关文章

  1. [转]结合轮廓显示,实现完整的框选目标(附Demo代码)

    原地址:http://www.cnblogs.com/88999660/articles/2887078.html 几次看见有人问框选物体的做法,之前斑竹也介绍过,用画的框生成的视椎,用经典图形学的视 ...

  2. unity3d结合轮廓显示,实现完整的框选目标(附Demo代码)

    原地址:http://dong2008hong.blog.163.com/blog/static/469688272013111554511948/ 在unity里实现,其实很简单,因为有两个前提:1 ...

  3. jquery 拖拽,框选的一点积累

    拖拽draggable,框选 selectable,按ctrl多选,临近辅助对齐,从工具栏拖工具  等,和jqueryui的selectable不同,是在一个父div里框选子div(类似框选文件),一 ...

  4. ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...

  5. [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    本文转自:http://www.cnblogs.com/artwl/p/3396330.html 近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0, ...

  6. JavaScript实现框选效果

    <html> <head> <title>region</title> <style> body { margin: 0; padding: ...

  7. js实现鼠标拖动框选元素小狗

    方法一: <html> <head></head> <style> body{padding:100px;} .fileDiv{float:left;w ...

  8. unity实现框选效果

    思路: 在uinity中既可以将屏幕坐标转换为世界坐标,也可以将世界坐标转换为屏幕坐标.这样的话我们就可以通过判断物体在世界坐标转换为平幕坐标是否在鼠标框选的矩形区域坐标内,来判断物体是否在框选范围. ...

  9. python PIL图像处理-框选

    框选图中位置 代码 from PIL import Image,ImageDraw,ImageFont,ImageFilter import random #--------------------- ...

随机推荐

  1. screen command of linux

    [screen command of linux] 常用键:   补充: Ctrl-a S  # split terminal horizon Ctrl-a TAB   # switch to ano ...

  2. 处理事件冒泡,阻止默认事件工具类,兼容IE

    //处理事件冒泡,阻止默认事件工具类,兼容IEvar eventUtil={ // 添加句柄 addHandler:function(element,type,handler){ if(element ...

  3. Spring.net 事件的注入

    1.首先上客户端代码 static void Main(string[] args)        {            IApplicationContext ctx = ContextRegi ...

  4. 1028 Web Navigation

    题目链接: http://poj.org/problem?id=1028 题意: 模拟浏览器的前进/后退/访问/退出 的四个操作. 输出当前访问的URL或者Ignore(如果不能前进/后退). 分析: ...

  5. es学习-索引别名

    别名不能重复,也不能喝索引名称重复.(一个索引可以创建多个别名) 语法: 添加一个别名: url:POST http://192.168.0.108:9200/_aliases/ 参数: { &quo ...

  6. 如何快速增加pdf书签,解除pdf限制

    一.需要的工具 福昕PDF阅读器 Foxit PDF Editor 2.2.1 build 1119 汉化版 下载地址:http://www.onlinedown.net/soft/51002.htm ...

  7. linux系统学习(二)

    文件,目录 pwd:查看当前目录 Print Working Directory cd,ls(ll),mkdir -p Change Directory List Make Directory du ...

  8. 设计模式14:Command 命令模式(行为型模式)

    Command 命令模式(行为型模式) 耦合与变化 耦合是软件不能抵御变化的根本性原因.不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系. 动机(Motivation) 在 ...

  9. Short jhat tutorial: diagnosing OutOfMemoryError by example

    转自: http://petermodzelewski.blogspot.com/2013/06/short-jhat-tutorial-diagnosing.html jhat这个工具经过使用, 发 ...

  10. 加载log文件

    procedure Jslog(szLogText:string);var pMyFile : TextFile;begin Assignfile(pMyFile, 'log.txt'); if Fi ...