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

标签 ios video filtering gpuimage

我有一个带有纯绿色背景的视频,我正在尝试使用 GPUImageChromaKeyFilter 将其设置为透明。

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

Tint on clear

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

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

我正在存储影片、过滤器和 View ,以避免 ARC 在退出范围时释放它们,并将 View 添加到正确的 super View 并使用自动布局定位它。

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

最佳答案

我成功了。解决方案是使用GPUImageChromaKeyBlendFilter。 它通过将第一个源中 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()

关于ios - 使用 GPUImageChromaKeyFilter 的视频在透明 GPUImageView 中播放时有色调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33244347/

相关文章:

macos - 为什么awk脚本在Mac OS上不起作用,而在Linux上起作用?

ios - Facebook iOS SDK 3.0 贴墙

iOS:在 AV 视频上绘图,然后将绘图保存在视频文件中

php - PHP 内置的 filter_input 是否正常工作?

javascript - HTML5 视频自动播放,声音未静音

android - 从网络服务发送的视频图像

java - 如何根据值直接过滤集合?

ios - 父 View 中的状态更改创建子 ViewModel 的新实例

ios - objective-c : unrecognized selector sent to instance 0x6080000550c0

ios - Frank 构建在 ld 命令上失败