01.package
02.{
03. import flash.display.BitmapData;
04. import flash.display.DisplayObject;
05. import flash.display.Sprite;
06. import flash.events.Event;
07. import flash.geom.Matrix;
08. import flash.utils.setTimeout;
09.
10. import mx.controls.Image;
11. /**
12. * 自定义Image类,使之忽略PNG透明区域
13. * @author L4cd.Net
14. */
15. public class MyImage extends Image
16. {
17. private var ht:Sprite = new Sprite();
18. public function MyImage()
19. {
20. addChild(ht);
21. hitArea = ht;
22. //指定hitArea为ht对象
23. ht.visible = false;
24. ht.mouseEnabled = false;
25. mouseChildren = false;
26. addEventListener(Event.COMPLETE,complete,false,99,true);
27. setTimeout(update,50)
28. }
29. private function complete(e:Event):void
30. {
31. setTimeout(update,50)
32. }
33. private function update():void
34. {
35. if(!content)return;
36. var loader:DisplayObject = content.parent as DisplayObject;
37. var bit:BitmapData = new BitmapData(loader.width,loader.height,true,0x00000000);
38. var mat:Matrix = new Matrix();
39. mat.scale(loader.scaleX,loader.scaleY);
40. bit.draw(loader,mat);
41. //重绘图象到bit
42. ht.graphics.clear();
43. ht.graphics.beginFill(0);
44. for(var x:uint=0;x<bit.width;x++)
45. {
46. for(var y:uint=0;y<bit.height;y++)
47. {
48. if(bit.getPixel32(x,y))ht.graphics.drawRect(x,y,1,1);
49. }
50. }
51. //以graphics画出bit的无透明区域
52. ht.graphics.endFill();
53. }
54. }
55.}