gpt4 book ai didi

ios - 两次后 GPUImageView 停止响应 "Filter Change"

转载 作者:行者123 更新时间:2023-11-29 01:15:07 24 4
gpt4 key购买 nike

我可能遗漏了什么。我正在尝试将过滤器更改为我的 GPUImageView。它实际上在前两次工作(有时只有一次),然后停止响应更改。我找不到从我的 GPUImageView 中删除目标的方法。

代码

for x in filterOperations
{
x.filter.removeAllTargets()
}
let f = filterOperations[randomIntInRange].filter
let media = GPUImagePicture(image: self.largeImage)
media?.addTarget(f as! GPUImageInput)
f.addTarget(g_View)
media.processImage()

有什么建议吗? * 正在处理来 self 的库的静止图像

更新

更新代码

//Global

var g_View: GPUImageView!
var media = GPUImagePicture()

override func viewDidLoad() {
super.viewDidLoad()
media = GPUImagePicture(image: largeImage)
}

func changeFilter(filterIndex : Int)
{
media.removeAllTargets()
let f = returnFilter(indexPath.row) //i.e GPUImageSepiaFilter()
media.addTarget(f as! GPUImageInput)
f.addTarget(g_View)

//second Part
f.useNextFrameForImageCapture()
let sema = dispatch_semaphore_create(0)
imageSource.processImageWithCompletionHandler({
dispatch_semaphore_signal(sema)
return
})

dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER)
let img = f.imageFromCurrentFramebufferWithOrientation(img.imageOrientation)
if img != nil
{
//Useable - update UI

}
else
{
// Something Went wrong

}

}

最佳答案

我的主要建议是不要在每次要更改滤镜或其应用于图像的选项时都创建新的 GPUImagePicture。这是一个昂贵的操作,因为它需要通过 Core Graphics 并将纹理上传到 GPU。

此外,由于您没有在上述代码之外维护对 GPUImagePicture 的引用,因此一旦您超出范围,它就会被释放。这会破坏渲染链并导致黑色图像甚至崩溃。 processImage() 是一个异步操作,因此当您退出上述范围时它可能仍在运行。

相反,为您的图像创建并维护对单个 GPUImagePicture 的引用,在其上交换滤镜(或更改现有滤镜的选项),并将结果定位到您的 GPUImageView。这会更快,内存占用更少,并且不会让您面临过早释放的情况。

关于ios - 两次后 GPUImageView 停止响应 "Filter Change",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35277979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com