0

我正在尝试使用 PNG alpha 通道屏蔽 FLV。我正在使用 BitmapData(来自 PNG),但它不起作用。有什么我想念的吗?剪切下面的代码:

var musclesLoader:Loader = new Loader();
var musclesContainer:Sprite = new Sprite();
var musclesImage:Bitmap = new Bitmap();
var musclesBitmapData:BitmapData;

var musclesVideo:Video = new Video(752, 451.2);
var connection:NetConnection = new NetConnection();
var stream:NetStream;

function loadMuscles():void {
    musclesLoader.load(new URLRequest('img/muscles.png'));
    musclesLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, musclesComplete);
}

function musclesComplete():void {
    musclesBitmapData = new BitmapData(musclesLoader.content.width, musclesLoader.content.height, true, 0x000000);
    musclesImage.bitmapData = musclesBitmapData;
    musclesImage.smoothing = true;
    musclesContainer.addChild(musclesImage);
    contentContainer.addChild(musclesContainer);
}

function loadMusclesVideo():void {
    connection.connect(null);
    stream = new NetStream(connection);
    stream.client = this;
    musclesVideo.mask = musclesImage; 
    stage.addChild(musclesVideo);
    musclesVideo.attachNetStream(stream);
    stream.bufferTime = 1;
    stream.receiveAudio(true);
    stream.receiveVideo(true);
    stream.play("vid/muscles.flv");
}

在这段代码之外,我有一个函数可以将容器添加到舞台等,并将对象放置在适当的位置。它有点工作 - 蒙版适用,但在正方形(muscleBitmapData 边界的大小)而不是 alpha 通道的形状。

这是解决这个问题的正确方法吗?

4

1 回答 1

1

正如你在这里看到的:

Alpha 通道遮罩

如果遮罩和被遮罩的显示对象都使用位图缓存,则支持 Alpha 通道遮罩,如下所示:

// maskShape is a Shape instance which includes a gradient fill. 
mySprite.cacheAsBitmap = true;
maskShape.cacheAsBitmap = true;
mySprite.mask = maskShape;

这意味着,除非您可以将 flv 缓存为位图(99% 肯定不能),否则您将不走运。当然,这并不意味着您不能进行遮罩,只是 Alpha 通道遮罩对您不起作用。

于 2010-05-03T13:22:32.150 回答