>> Я понимаю, что это делается маской
не обязательно маской, например на 32битной картинке дырку можно просто 'нарисовать'

Код AS3:
public class Main extends Sprite
{
[Embed(source = "pic.png")]
public const pic_png:Class;
public function Main():void
{
// картинка, д. б. 32-битная, иначе вместо 'дырки' будет чернота
var bmp:Bitmap = new pic_png() as Bitmap;
addChild(bmp);
// дырка
var canvas:Shape = new Shape();
canvas.graphics.beginFill(0x0);
canvas.graphics.drawCircle(200, 200, 50);
bmp.bitmapData.draw(canvas, null, null, BlendMode.ERASE);
}
}
программно нарисовать шейп с дыркой можно (рисуем, не переключая beginFill\endFill, по нарисованному и получаем дырку), но как маска такой шейп дырки не даст, а только как цельная заливка