菜鸟教程小白 发表于 2022-12-12 09:29:01

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


                                            <p><p>我有一个纯绿色背景的视频,我正在尝试使用 GPUImageChromaKeyFilter 使其透明。 </p>

<p>当我有清晰的播放器 View 颜色时,结果是视频不是真正透明的,而是给背景着色:</p>

<p> <img src="https://i.imgur.com/b96y9tX.png" alt="Tint on clear"/> </p>

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

<p> <img src="https://i.imgur.com/MaKqd4x.png" alt="No tint on white"/> </p>

<p>我做错了什么?</p>

<p>我的代码是:</p>

<pre><code>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()
</code></pre>

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

<p>我使用的视频是 h264 视频 - <a href="https://dl.dropboxusercontent.com/u/1400954/Coin.mp4" rel="noreferrer noopener nofollow">https://dl.dropboxusercontent.com/u/1400954/Coin.mp4</a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我得到了这个工作。解决方法是使用 GPUImageChromaKey<strong>Blend</strong>Filter。
它通过将第一个源中 setColorToReplaceRed 中指定颜色的像素替换为第二个源中的像素来混合两个源。</p>

<p>所以我制作了一个带有透明 UIImage 的 GPUImagePicture 并将过滤器作为目标添加到它。您可以使用透明 PNG 或构建 UIImage 并在代码中用透明填充它(空的 UIImage 将不起作用!)</p>

<p>现在一切正常!</p>

<p> <img src="https://i.imgur.com/aF8PP6v.png" alt="Working!"/> </p>

<p>代码是</p>

<pre><code>let filter = GPUImageChromaKeyBlendFilter()
filter.setColorToReplaceRed(0, green: 1, blue: 0)

let movieFile = GPUImageMovie(URL: url)
movieFile.addTarget(filter)

let backgroundImage = UIImage(named: &#34;MTransparent&#34;)
let sourcePicture = GPUImagePicture(image: backgroundImage, smoothlyScaleOutput: true)
sourcePicture.addTarget(filter)
sourcePicture.processImage()

let playerView = GPUImageView()
playerView.backgroundColor = UIColor.clearColor()
filter.addTarget(playerView)

movieFile.startProcessing()
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 GPUImageChromaKeyFilter 的视频在透明 GPUImageView 中播放时有色调?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33244347/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33244347/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 GPUImageChromaKeyFilter 的视频在透明 GPUImageView 中播放时有色调?