当前位置: 首页 > news >正文

as3的InteractivePNG例子

在as3中很多时候需要只能选中png中可视区域,即透明区域“感觉可以穿透”。两张png重叠的时候,鼠标可以分别响应它们的事件。如下图所示:

image

在网上搜索的时候,看到有人没用其它额外的类,自己写了一个例子。地址在这里:http://www.shch8.com/blog/post/71.html 有demo可以下载(例子需要使用flash cs4+才能打开)

比较巧妙的是这一段核心代码:

var bitmapData:BitmapData=new BitmapData(png_mc.width,png_mc.height,true,0x000000);   
bitmapData.draw(png_mc);

//重绘图象到bitmapData
//png_mc.graphics.beginFill(0,1);
png_mc.graphics.beginBitmapFill(bitmapData);

var _width:Number = bitmapData.width;
var _height:Number = bitmapData.height;
for (var i:uint=0; i<_width; i++)
{
for (var j:uint=0; j<_height; j++)
{
if (bitmapData.getPixel32(i,j))
{
png_mc.graphics.drawRect(i,j,1,1);
}
}
}

png_mc.graphics.endFill();
png_mc.removeChildAt(0);

可以看出它是对图片使用循环,取它的每一个像素然后进行判断(我觉得对于大的图片效率可能存在问题---猜测~)

 

而国外很早以前就有现成的类了“InteractivePNG”,文档在这里:http://www.mosessupposes.com/utilities/InteractivePNG.html  示例和类的下载地址:http://www.mosessupposes.com/utilities/

 

自己用flex简单的写了一个demo:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
minWidth="955" minHeight="600"
creationComplete="loaded()"
horizontalScrollPolicy="off" verticalScrollPolicy="off">

<mx:Script>
<![CDATA[
import com.mosesSupposes.bitmap.InteractivePNG;
import mx.core.UIComponent;


private var inter_val:Number = 100;

private function loaded():void {
loadBtn.addEventListener(MouseEvent.CLICK, loadImagesHandler);
}

private function loadImagesHandler(evt:MouseEvent=null):void {
loadBtn.enabled = false;

var ui:UIComponent = new UIComponent();
ui.mouseEnabled = false;
ui.mouseChildren = true;
ui.width = 322;
ui.height = 455;
photoContainer.addChild(ui);

var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0x000000, 0.0);
mc.graphics.drawRect(0,0, ui.width, ui.height);
mc.graphics.endFill();
ui.addChild(mc);

addImage(mc, img_1);
addImage(mc, img_2);
addImage(mc, img_3);
addImage(mc, img_4);
}

private function addImage(mc:MovieClip, imgObj:UIComponent):void {

var img:InteractivePNG;
img = new InteractivePNG();
mc.addChild(img);
img.x = inter_val;
inter_val += 120;

var bitmapData:BitmapData = new BitmapData(mc.width, mc.height, true, 0);
bitmapData.draw(imgObj);
var bt:Bitmap = new Bitmap(bitmapData);

img.addChild(bt);

img.addEventListener(MouseEvent.ROLL_OVER, addFilterHandler);
img.addEventListener(MouseEvent.ROLL_OUT, clearFilterHandler);
}

private function getBitmapFilter():GlowFilter {
var color:Number = 0xffffff;;
var alpha:Number = 1;
var blurX:Number = 5;
var blurY:Number = 5;
var strength:Number = 4;
var inner:Boolean = false;
var knockout:Boolean = false;
var quality:Number = BitmapFilterQuality.LOW;

return new GlowFilter(color, alpha, blurX, blurY, strength, quality, inner, knockout);
}

private function clearFilterHandler(evt:MouseEvent):void {
var mc:MovieClip = evt.currentTarget as MovieClip;

if (mc) {
mc.filters = null;
}
}

private function addFilterHandler(evt:MouseEvent):void {
var mc:MovieClip = evt.currentTarget as MovieClip;

if (mc) {
var filters:Array = new Array();
filters = mc.filters;
filters.push(getBitmapFilter());
mc.filters = filters;
}
}

]]>
</mx:Script>


<mx:VBox width="100%" height="100%"
horizontalScrollPolicy="off" verticalScrollPolicy="off"
verticalGap="10"
verticalCenter="0" horizontalCenter="0" horizontalAlign="center" verticalAlign="middle"
paddingLeft="100" paddingRight="100">

<mx:HBox width="100%" horizontalAlign="left">
<mx:Button label="加载图片" id="loadBtn" />
</mx:HBox>

<mx:HBox id="photoContainer" width="100%" horizontalGap="10" height="480"
verticalAlign="middle" verticalCenter="0" horizontalAlign="left"
borderColor="#406c99" borderStyle="solid" borderThickness="1"
horizontalScrollPolicy="off"
verticalScrollPolicy="off" />

<mx:Image source="assets/1.png" visible="false" includeInLayout="false" id="img_1" />
<mx:Image source="assets/2.png" visible="false" includeInLayout="false" id="img_2"/>
<mx:Image source="assets/3.png" visible="false" includeInLayout="false" id="img_3"/>
<mx:Image source="assets/4.png" visible="false" includeInLayout="false" id="img_4"/>

</mx:VBox>

</mx:Application>

完整的代码下载>>

转载于:https://www.cnblogs.com/meteoric_cry/archive/2011/06/17/2083907.html

相关文章:

  • 《Applications=Code+Markup》读书札记(2)——创建一个简单的 WPF 程序的代码结构及关于 Window 实例位置设置问题...
  • 敏捷方法之极限编程(XP)和 Scrum区别
  • squid vary机制实现详解(附流程图)
  • 构建办公环境网络
  • ttylinux 设置
  • extmail显示天气预报
  • SQLite基本使用
  • RHEL 6 简易搭建samba服务 RHCE
  • android开发(8) 使用ViewFlipper来用手势切换画面
  • linux LAMP 下我们首选DDOS default 来防御DDOS!
  • Gartner:XenServer你是领导者!
  • C++用数组和链表分别实现Queue
  • Symfony2博客应用程序教程:第四部分(续)-测试安全页
  • 用vs2008打framework2.0的包
  • 网页的学习语言将仿佛使你生活更动人
  • 【mysql】环境安装、服务启动、密码设置
  • Cookie 在前端中的实践
  • EOS是什么
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java|序列化异常StreamCorruptedException的解决方法
  • jquery ajax学习笔记
  • js学习笔记
  • JS字符串转数字方法总结
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Next.js之基础概念(二)
  • Nodejs和JavaWeb协助开发
  • Python连接Oracle
  • 爱情 北京女病人
  • 当SetTimeout遇到了字符串
  • 多线程事务回滚
  • 分布式熔断降级平台aegis
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 蓝海存储开关机注意事项总结
  • 利用jquery编写加法运算验证码
  • 浅谈Golang中select的用法
  • 日剧·日综资源集合(建议收藏)
  • 如何在GitHub上创建个人博客
  • 小程序开发中的那些坑
  • 一文看透浏览器架构
  • NLPIR智能语义技术让大数据挖掘更简单
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $refs 、$nextTic、动态组件、name的使用
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)hibernate缓存