Супер неоптимальность...
1. Зачем вообще создавать BitmapData, тем более столько раз? И...если доступна BitmapData в созданном 'Image', а она должна быть доступна, иначе все равно никак не обратиться к альфе пикселя, не проще ли сделать hitTest?
2. Я бы не использовал mask, а использовал hitArea - вложил картинку в Sprite, и создал бы кликабельную область, похожую на mask постом выше.

Код AS3:
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
public class Main2 extends Sprite
{
[Embed(source='../fla/sun.png')]
private var Sun:Class;
public function Main2() {
if (stage) addedToStageListener();
else addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
}
private function addedToStageListener(event:Event = null):void {
var s:Sprite = new Sprite();
var sun:Bitmap = new Sun() as Bitmap;
s.addChild(sun);
var bmd:BitmapData = sun.bitmapData;
var h:Sprite = new Sprite();
h.graphics.beginFill(0);
var zeroPoint:Point = new Point(0, 0);
var p:Point = new Point();
for (var x:int = 0; x < bmd.width; x++) {
for (var y:int = 0; y < bmd.height; y++) {
p.x = x;
p.y = y;
if (bmd.hitTest(zeroPoint, 128, p)) {
h.graphics.drawRect(x, y, 1, 1);
}
}
}
h.graphics.endFill();
h.visible = false;
h.mouseEnabled = false;
s.addChild(h);
s.hitArea = h;
addChild(s);
s.buttonMode = s.useHandCursor = true;
s.addEventListener(MouseEvent.CLICK, clickListener);
}
private function clickListener(event:MouseEvent):void {
trace(event.localX, event.localY);
}
}
}