以下是自己写的一个,工具类;
hotArea是热区对象,canvas是源位图对象
作用是,从canvas中,截图一个像素级的矢量图对象,而且是Sprite类(意味着可以有丰富的事件交互)
源码:
/*****************************************************
*
* The Initial Developer of the Original Code is Administrator.
*
* HotAreaToGraphicsUtil.as
* Create By Jave.Lin(afeng)
* 2013-1-3 下午22:07:18
*
*****************************************************/
package cn.taole.webgame.jhm.plugin.garden.view.util
{
import cn.taole.webgame.jhm.common.util.CommonUtil;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import taole.display.ui.core.UIBitmap;
/** 热区转矢量对象的工具类 */
public class HotAreaToGraphicsUtil{
public static function getGraphicObj(hotArea:DisplayObject,canvas:Bitmap):Sprite{
var uiBmp:UIBitmap=canvas as UIBitmap;
var bmd:BitmapData=new BitmapData(hotArea.width,hotArea.height,true,0);
bmd.copyPixels(canvas.bitmapData,new Rectangle(hotArea.x,hotArea.y,bmd.width,bmd.height),CommonUtil.EMPTY_POINT);
var result:Sprite=new Sprite();
result.graphics.clear();
result.graphics.beginBitmapFill(bmd);
var hotAreaBmd:BitmapData=((hotArea as DisplayObjectContainer).getChildAt(0) as Bitmap).bitmapData;
var w:Number = bmd.width;
var h:Number = bmd.height;
for (var i:uint=0; i<w; i++){
for (var j:uint=0; j<h; j++){
if (bmd.getPixel32(i,j) && hotAreaBmd.getPixel32(i,j)){//这里就可以改一下判断条件,就可以满足你的需求
result.graphics.drawRect(i,j,1,1);
}
}
}
result.graphics.endFill();
return result;
}
}
}