凡人而已。

导航

判断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 )
                        
                }
        }
}

posted on 2013-08-17 23:45  凡人而已。  阅读(1383)  评论(0)    收藏  举报