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. cyyz: Day 2 线段树知识整理

    Day 2 上午的听课,哎~昏昏欲睡好吧.. 一.扫描线 知识点: 由于多边形千变万化,要想填充多边形内部的所有像素,需要找到一种合适的规则,能够沿着一个方向,一个像素不漏地把多边形内部填满,同时不污 ...

  2. 微信小程序前端function封装

    funtion的封装 utils =>http.js var tips = { 1: "没有网络", 999: "无效的请求", 5000: " ...

  3. @submit.native.prevent作用

    <el-form :inline="true" :model="geCarManageData" class="demo-form-inline ...

  4. js中判断变量不为空或null

    var content=$("content").val(); if(!content){      alert("请输出内容!");      return; ...

  5. <英狼>--团队作业3 王者光耀--终极版

    队员 陶俊宇_031702113 卞永亨_031702229 唐怡_031702109 Github 吉哈---King-Shines 队员输出百分比,数据为估值仅供参考 MVP:队长:陶俊宇 60% ...

  6. Maven中依赖的scope的依赖范围

    在Maven中依赖的域有这几个:import.provided.runtime.compile.system.test 1compile 的范围 当依赖的scope为compile的时候,那么当前这个 ...

  7. MySQL8新特性(2)--mysql的升级过程

    在之前的版本中,安装新的版本mysql之后,mysql server在下一次启动时,会自动升级数据字典表,然后dba需要执行mysql_upgrade手动升级mysql schema中的系统表,以及其 ...

  8. 运维笔记--ubuntu服务器安装telnet服务

    ubuntu 16.04 安装Telnet: Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.可以通过Telnet实现远程登录服务器,同时也可以用“t ...

  9. ISO/IEC 9899:2011 前言

    前言 1.ISO(国际标准组织)与IEC(国际电工技术委员会)为全世界标准形成了专门的系统.作为ISO或IEC成员的国家机构,通过由各自组织所建立的技术委员会来加入国际标准的开发,以处理特定领域的技术 ...

  10. [报错处理]Python Requests - No connection adapters

    出错信息很清楚:Python请求 - 没有连接适配器. 你得把网络协议加进入网址: http://192.168.1.61:8080/api/call 没有 http:// 请求不知道如何连接远程. ...