package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.ui.Mouse;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.DropShadowFilter; public class MagGlass extends Sprite {
private const MAXSIZE :uint = 2880;
private var _zoom :Number;
private var _zoomSmall :Number;
private var _imageW :Number;
private var _imageH :Number;
private var _imageBitmap :Bitmap;
private var _newBitmap :Bitmap;
private var _imageBitmapData:BitmapData;
private var _dataW :Number;
private var _dataH :Number;
private var _filtered :Boolean;
private var _glassSp :Sprite;
private var _isZooming :Boolean;
private var _Stage :Object;
private var _target :DisplayObject;
/*
* Param1 需要缩放的对象
* Param2 缩放的倍数,默认为3倍
* Param3 显示框的宽度
* Param4 显示框的高度
* Param5 是否添加阴影滤镜
*/
public function MagGlass($target:DisplayObject, $zoom:Number = 3, $width:Number = 100, $height:Number = 80, $filtered:Boolean = true) {
trace("MagGlass v01");
if ($target is Bitmap) {
_imageBitmap = $target as Bitmap;
}else {
_imageBitmap = getBitmap($target);
}
_imageBitmap.scaleX = $zoom;
_imageBitmap.scaleY = $zoom;
if (_imageBitmap.width > MAXSIZE || _imageBitmap.width > MAXSIZE) {
trace("图片尺寸超过范围!");
return;
}
var newSp:Sprite = new Sprite();
newSp.addChild(_imageBitmap);
_newBitmap = getBitmap(newSp);
_imageBitmapData = _newBitmap.bitmapData;
_target = $target;
_zoom = $zoom;
_imageW = $width;
_imageH = $height;
_filtered = $filtered;
this.addEventListener(Event.ADDED_TO_STAGE, addToStage);
} private function addToStage(event:Event):void {
this.removeEventListener(Event.ADDED_TO_STAGE, addToStage);
_Stage = stage;
initGlass();
initEvent(_target);
} private function initGlass():void {
_glassSp = new Sprite();
_glassSp.buttonMode = _glassSp.mouseChildren = _glassSp.mouseEnabled = false;
if(_filtered) _glassSp.filters = [new DropShadowFilter()];
addChild(_glassSp);
} private function initEvent($target:DisplayObject):void {
$target.addEventListener(MouseEvent.ROLL_OUT, targetOut,true);
$target.addEventListener(MouseEvent.MOUSE_DOWN, targetDown);
_Stage.addEventListener(MouseEvent.MOUSE_UP, targetOut);
} private function targetDown(event:MouseEvent):void {
_isZooming = true;
Mouse.hide();
var hitPoint:Point = new Point(event.localX, event.localY);
//trace("hitPoint",hitPoint);
_glassSp.x = this.mouseX- _imageW / 2;
_glassSp.y = this.mouseY- _imageH / 2;
ShowBig(hitPoint); this.addEventListener(MouseEvent.MOUSE_MOVE,targetMove);
} private function glassClear():void {
_glassSp.graphics.clear();
}
private function targetOut(event:MouseEvent):void {
_isZooming = false;
glassClear();
Mouse.show();
this.removeEventListener(MouseEvent.MOUSE_MOVE,targetMove);
} private function targetMove(event:MouseEvent):void {
var movePoint:Point = new Point(_target.mouseX, _target.mouseY);
//trace("movePoint",movePoint);
_glassSp.x = this.mouseX- _imageW / 2;
_glassSp.y = this.mouseY- _imageH / 2;
ShowBig(movePoint);
event.updateAfterEvent();
} private function getBitmap($target:DisplayObject):Bitmap {
var bitmapData:BitmapData = new BitmapData($target.width, $target.height,true,0xffff0000);
bitmapData.draw($target);
return new Bitmap(bitmapData);
} /*
* Param1 坐标,即需要显示的坐标中点
*/
private function ShowBig($point:Point) {
drawGlass(new Point($point.x*_zoom,$point.y*_zoom));
} private function drawGlass($point:Point):void {
var curBitmapData:BitmapData;
var curBitmap :Bitmap;
var startX :Number = $point.x - _imageW / 2;
var startY :Number = $point.y - _imageH / 2;
curBitmap = new Bitmap(new BitmapData(_imageW, _imageH));
curBitmap.bitmapData.copyPixels(_imageBitmapData, new Rectangle(startX, startY, _imageW, _imageH), new Point(0, 0));
curBitmapData = curBitmap.bitmapData;
_glassSp.graphics.clear();
_glassSp.graphics.lineStyle();
_glassSp.graphics.beginBitmapFill(curBitmapData);
_glassSp.graphics.drawRect(0, 0, _imageW, _imageH);
_glassSp.graphics.endFill();
}
}
} 使用方法:
var mMagGlass:MagGlass = new MagGlass(mc,3,150,150,true);
addChild(mMagGlass);

  AS3放大镜工具类

AS3放大镜工具类的更多相关文章

  1. 【转】AS3画板工具类,可直接套用

    原文链接:http://bbs.9ria.com/thread-212711-1-16.html 今天项目需求做一个画板,要有橡皮擦.自己懒不想写,在网上搜了半天都是习作,没有拿来就能用的又不爱看.只 ...

  2. as3 工具类分享 CookieMgr

    今天分享一个工具类 CookieMgr,功能就是读取和写入 SharedObject 对象.很简单,都是静态方法,就不多说了 package org.polarbear.core { import f ...

  3. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  4. Android—关于自定义对话框的工具类

    开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...

  5. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  6. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

  7. Guava库介绍之实用工具类

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  8. Java程序员的日常—— Arrays工具类的使用

    这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...

  9. .net使用正则表达式校验、匹配字符工具类

    开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...

随机推荐

  1. IIS 站点配置文件

    IIS 站点配置文件  C:/Windows/System32/inetsrv/config/applicationHost.config 配置文件示例: <system.application ...

  2. 洛谷P2877 [USACO07NOV]防晒霜Sunscreen

    题目 此题有多种贪心方法. 首先简化题意: 有几个在数轴上的区间,和几个在数轴上确定的位置的点,问用这些数目的点,最多能满足多少个区间里有点. 注意:此题跟区间选点问题不一样,每个点只能满足一个区间, ...

  3. 记一次CDH集群日志数据清理

    背景 集群运行一段时间(大概一月多)后,cloudera manager管理界面出现爆红,爆红的组件有hdfs.zookeeper. 发现问题 点击详细内容查看,报日志空间不够的错误.初步判断是各个组 ...

  4. 【2019.11.27】SDN上机第5次作业

    参考资料: https://www.cnblogs.com/zzqsss/p/11924685.html 问答环节 描述官方教程实现了一个什么样的交换机功能? Ryu是一个基于组件的软件定义的网络框架 ...

  5. ckplayer去掉/修改右上角logo(位置)

    ckplayer.js中搜索:logo(ckplayer.xml中搜索<logo>) 1:去掉的方法是修改成logo:'null'(ckplayer.xml中修改成<logo> ...

  6. Gradle入门系列

    http://blog.jobbole.com/71999/ 版权声明:本文为博主原创文章,未经博主允许不得转载.

  7. 大数据应用期末总评Hadoop综合大作业

    作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 1.将爬虫大作业产生的csv文件上传到HDFS 此次作业选取的 ...

  8. pdfBox 解析 pdf文件

    Spting boot 项目 1.添加依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifa ...

  9. mongodb设置 十个要点

    mongodb设置 十个要点   一.对象ID的生成 每一个mongoDB文档那个都要求有一个主键.它在每一个集合中对全部的文档必须是唯一的.主键存放在文档_id字段中.由12个字符组成: 4c291 ...

  10. 使用良好的自定义X264编码,取得极佳质量!《转》

    原帖地址:http://www.xspliter.com/forum.php?mod=viewthread&tid=447 一般直播时使用A设定即可.你尝试设置并找出你最满意的设定 A为最需最 ...