使用PNG alpha通道屏蔽AS3中的FLV视频

时间:2010-05-03 10:43:35

标签: flash actionscript-3 flv masking

我正试图使用​​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通道的形状。

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

1 个答案:

答案 0 :(得分:1)

正如您所见here

  

Alpha通道屏蔽

     

如果支持Alpha通道屏蔽   掩模和蒙版显示器   对象使用位图缓存,如图所示   这里:

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

这意味着,除非你可以将你的flv缓存为位图(99%肯定你不能),否则你运气不好。当然,这并不意味着你不能掩盖,但只是alpha通道掩蔽对你不起作用。