判断bitmap某像素是否为透明
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
public class ByebyeAlpha extends Sprite
{
[Embed(source="assets/phoenix.png")]
private var skin:Class;
private var myUI:Sprite;
private var bmp:Bitmap;
public function ByebyeAlpha()
{
bmp = new skin() as Bitmap;
myUI = new Sprite();
myUI.addChild( bmp );
this.addChild( myUI );
myUI.x = myUI.y = 100;
myUI.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
/**
* 判断某一位置是否是有效的(不透明的)
*/
public function isActiveUnderPoint( targetBitmapData:BitmapData, x:Number, y:Number ):Boolean
{
if( targetBitmapData != null )
{
//首先得到全部的颜色信息
var color:uint = targetBitmapData.getPixel32( x, y );
//然后右移24位以取到透明通道的值
var alpha:uint = color >> 24;
//比较透明通道的值是否非0并返回比较结果
return alpha != 0;
}
return false;
}
private function onMouseMove( e:MouseEvent ):void
{
//首先需要把屏幕上的鼠标坐标位置转换为bitmap内的鼠标位置
var localPos:Point = bmp.globalToLocal( new Point(e.stageX, e.stageY) );
//接下来检测鼠标停留位置是否非透明,若是则显示手型,否则不显示手型
myUI.buttonMode = isActiveUnderPoint( bmp.bitmapData, localPos.x, localPos.y )
}
}
}
浙公网安备 33010602011771号