[ActionScript 3.0] 框选裁剪

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] 框选裁剪的更多相关文章
- [转]结合轮廓显示,实现完整的框选目标(附Demo代码)
原地址:http://www.cnblogs.com/88999660/articles/2887078.html 几次看见有人问框选物体的做法,之前斑竹也介绍过,用画的框生成的视椎,用经典图形学的视 ...
- unity3d结合轮廓显示,实现完整的框选目标(附Demo代码)
原地址:http://dong2008hong.blog.163.com/blog/static/469688272013111554511948/ 在unity里实现,其实很简单,因为有两个前提:1 ...
- jquery 拖拽,框选的一点积累
拖拽draggable,框选 selectable,按ctrl多选,临近辅助对齐,从工具栏拖工具 等,和jqueryui的selectable不同,是在一个父div里框选子div(类似框选文件),一 ...
- ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...
- [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
本文转自:http://www.cnblogs.com/artwl/p/3396330.html 近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0, ...
- JavaScript实现框选效果
<html> <head> <title>region</title> <style> body { margin: 0; padding: ...
- js实现鼠标拖动框选元素小狗
方法一: <html> <head></head> <style> body{padding:100px;} .fileDiv{float:left;w ...
- unity实现框选效果
思路: 在uinity中既可以将屏幕坐标转换为世界坐标,也可以将世界坐标转换为屏幕坐标.这样的话我们就可以通过判断物体在世界坐标转换为平幕坐标是否在鼠标框选的矩形区域坐标内,来判断物体是否在框选范围. ...
- python PIL图像处理-框选
框选图中位置 代码 from PIL import Image,ImageDraw,ImageFont,ImageFilter import random #--------------------- ...
随机推荐
- 通过snmp监控linux
一.linux snmpd安装 yum install -y net-snmp net-snmp-utils 二.snmp的配置(vim /etc/snmp/snmpd.conf) com2sec n ...
- CloudStack + KVM + HA
KVM高可用性CS4.2暂时没有实现 The Linux Kernel Virtual Machine (KVM) is a very popular hypervisor choice amongs ...
- Java 依赖注入标准(JSR-330)简介
作者:88250 ,Vanessa 时间:2009 年 11 月 19 日 Java 依赖注入标准(JSR-330,Dependency Injection for Java)1.0 规范已 ...
- spring4-5-事务管理
1.简单介绍 事务管理是企业级应用程序开发中必不可少的技术, 用来确保数据的完整性和一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的 ...
- CSS外边距合并的几种情况
CSS外边距合并的几种情况 外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者. 外边距在CSS1中就有 The width ...
- VisualVM远程连接Tomcat(转)
转自:http://www.cnblogs.com/sunshine-2015/p/5547128.html VisualVM VisualVm是一个将很多JDK命令工具可视化的windows程序,直 ...
- [C++] the pointer array & the array's pointer
int *p[4]------p是一个指针数组,每一个指向一个int型的int (*q)[4]---------q是一个指针,指向int[4]的数组 --> type: int(*)[4] vo ...
- StackExchange.Redis实现Redis发布订阅
由于ServiceStack.Redis最新版已经收费,所以现在大家陆陆续续都换到StackExchange.Redis上了,关于StackExchange.Redis详细可以参看Github htt ...
- centos7用fdisk进行分区
1.查看分区信息:fdisk -l 从上面可以看到,/dev/sdb分区还没有使用,现在将其划分成2个10G的分区. 2.执行:fdisk /dev/sdb 1):fdisk命令参数 p:打印分区表. ...
- 常用的String方法Math方法
Arrays.sort();冒泡排序字符串.charAt(i);字符串索引i上的字符Integer.prsent(字符串) 字符串转整数equals(Object anObject) 将此字符串与指定 ...