[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 #--------------------- ...
随机推荐
- java基础之HashSet如何保证对象的唯一性
首先Set集合是无序的 不可重复的 add的时候判断对象是否重复是用的equals HashSet<String> 存储String类型的数据时是可以保证数据的唯一性的 因为String类 ...
- javascript对变量和函数的声明提前‘hoist’
hoist vt.升起,提起; vi.被举起或抬高; n.起重机,升降机; 升起; <俚>推,托,举; 原文地址:http://www.bootcss.com/article/variab ...
- Python学习笔记_获取当前目录和上级目录
实验目标:获取当前目录和上级目录 系统环境: 1.OS:Win10 64位 2.Pythoh 3.7 3.实验路径:C:\Work\Python\MergeExcel 代码参考: # -*- codi ...
- 心理学轨迹及AI基础理论读后感
今天简单的看了下心理学轨迹及AI基础理论发现世界确实是那3%的人改变的,我等屁民还努力在红尘中争渡,下面简单记录下我刚看完的思路,算做个笔记给自己看.. 模型建立的最终结果可以解读所有的心理学现象,可 ...
- Openssl rsautl命令
一.简介 rsautl指令能够使用RSA算法签名,验证身份,加密/解密数据 二.语法 openssl rsautl [-in file] [-out file] [-inkey file] [-pas ...
- SQL2000中创建作业(定时查询,更新)(转)
出处:http://blog.csdn.net/xys_777/article/details/5683413 SQL2000中创建作业(定时查询,更新)企业管理器 --管理 --SQL Server ...
- eclipse 市场
http://marketplace.eclipse.org/ 如何找工具官网? 举例:UMLet 进入官网以后,下载插件,然后离线安装.
- SecondaryNameNode中的“Inconsistent checkpoint fields”错误原因
该错误原因,可能是因为没有设置好SecondaryNameNode上core-site.xml文件中的"hadoop.tmp.dir". 2014-04-17 11:42:18,1 ...
- Python 3 Mysql 增删改查
import pymysql import datainfo import time #获取参数 host = datainfo.host username = datainfo.username p ...
- Partition--分区切换
现有数据表[dbo].[staging_TB1_20131018-104722]和分区表[dbo].[TB1],需要将分区表和数据表中做数据交换 CREATE TABLE [dbo].[staging ...