我正试图使用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通道的形状。
这是解决这个问题的正确方法吗?
答案 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通道掩蔽对你不起作用。