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

时间:2015-10-20 18:39:09

标签: ios video filtering gpuimage

我有一个绿色背景的视频,我试图通过GPUImageChromaKeyFilter透明化。

当我为播放器视图设置了清晰的颜色时,结果是视频不是真正透明,而是为背景着色:

Tint on clear

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

No tint on white

我做错了什么?

我的代码是:

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()

我正在存储电影,过滤器和视图,以避免在退出示波器时ARC释放它们,我将视图添加到正确的超视图并使用自动布局定位。

我正在使用的视频是h264视频 - https://dl.dropboxusercontent.com/u/1400954/Coin.mp4

1 个答案:

答案 0 :(得分:3)

我得到了这个工作。解决方案是使用GPUImageChromaKey Blend 过滤器。 它通过将第一个源中setColorToReplaceRed中指定颜色的像素替换为第二个源中的像素来混合两个源。

所以我用透明的UIImage创建了一个GPUImagePicture,并将过滤器添加为目标。您可以使用透明的PNG或构建UIImage并使用透明的代码填充它(空的UIImage将无效!)

现在一切都很美妙!

Working!

代码是

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()