我正在对静止图像应用 GPUImageKuwaharaFilter 滤镜。这是一个非常昂贵的操作,processImage 需要相当长的时间才能完成。我想向用户展示剩余 processImage 的进度。有什么方法可以实现吗?
由于近似进度可以完成工作,我尝试使用 NSTimer 并定期递增进度条。但是,由于某种原因,一旦我启动 processImage,NSTimer 就被阻止了。当 processImage 在后台运行时,有什么方法可以让 UI 和 NSTimer 保持空闲?
最佳答案
不幸的是,没有一种很好的方法来衡量单个着色器的进度。将着色器应用于带纹理的四边形实际上是一个原子操作,它要么成功要么失败(如果着色器花费的时间比 OpenGL ES 驱动程序看门狗允许的时间长)。确实没有通过图像渲染进行渐进的概念。
关于计时器,您可能会遇到的情况是,使用像这样的非常密集的着色器,它会有效地阻塞整个系统,直到它完成。它至少会导致界面出现严重故障,因为它需要在 GPU 进行任何其他类型的显示更新之前完成渲染。
除了改进着色器本身,我不知道解决这个问题的好方法。即使在桌面 GPU 上,该特定着色器也很慢,并且在 iPhone 5S 之前的设备上非常糟糕。在此操作的固定半径版本中粗略地尝试对其进行优化,但即使在那里我相信仍有改进的空间。
关于ios - 跟踪 GPUImage processImage 的进度(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315238/