使用GPUImageChromaKeyFilter的video在透明GPUImageView中播放时具有色调?

我有一个坚实的绿色背景的video,我试图透明与GPUImageChromaKeyFilter。

当播放器视图有清晰的颜色时,结果是video不是真的透明,而是背景色:

色调清晰

当我将背景更改为白色时,绿色背景消失了,但显然该视图不透明:

没有白色的色彩

我究竟做错了什么?

我的代码是:

let movie = GPUImageMovie(URL: url) let filter = GPUImageChromaKeyFilter() filter.setColorToReplaceRed(0, green: 1, blue: 0) movie.addTarget(filter) let playerView = GPUImageView() playerView.backgroundColor = UIColor.clearColor() playerView.setBackgroundColorRed(0, green: 0, blue: 0, alpha: 0) let trinity = (movieFile, filter, playerView) filter.addTarget(playerView) movie.startProcessing() 

我存储的电影,filter和视图,以避免ARC释放他们的范围退出时,我将视图添加到正确的超视图,并与自动布局的位置。

我使用的video是一个h264video – https://dl.dropboxusercontent.com/u/1400954/Coin.mp4

我得到了这个工作。 解决scheme是使用GPUImageChromaKey 混合filter。 它通过将第一个源中的setColorToReplaceRed中指定的颜色的像素replace为第二个源中的像素来混合两个源。

所以我做了一个透明UIImage的GPUImagePicture,并添加了filter作为目标。 您可以使用透明的PNG或build立一个UIImage,并用代码中的透明来填充它(空的UIImage不起作用!)

现在一切都很好!

加工!

代码是

 let filter = GPUImageChromaKeyBlendFilter() filter.setColorToReplaceRed(0, green: 1, blue: 0) let movieFile = GPUImageMovie(URL: url) movieFile.addTarget(filter) let backgroundImage = UIImage(named: "MTransparent") let sourcePicture = GPUImagePicture(image: backgroundImage, smoothlyScaleOutput: true) sourcePicture.addTarget(filter) sourcePicture.processImage() let playerView = GPUImageView() playerView.backgroundColor = UIColor.clearColor() filter.addTarget(playerView) movieFile.startProcessing()