【发布时间】:2015-12-14 13:55:37
【问题描述】:
我正在 iOS 上试验图像处理算法。我有一个包含图像 test_frame1 ... test_frame100 (等)的资产目录,我在上面进行了一些处理。
除此之外,我还需要按顺序显示图像,就好像它们是视频的帧一样。
我首先想到的是在延迟几毫秒后依次更改UIImage 的图像。我正在异步执行此操作。代码如下:
let imageShowQueue = dispatch_queue_create("com.grigoryptashko.ImageShowQueue",
DISPATCH_QUEUE_SERIAL)
let frameShowDelay = Int64(0.2 * Double(NSEC_PER_SEC)) // show images with 200 ms delay, but it doesn't actually work this way
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
var dTime = dispatch_time(DISPATCH_TIME_NOW, frameShowDelay)
for i in 1...1000 {
dispatch_after(dTime, self.imageShowQueue) {
dispatch_async(dispatch_get_main_queue()) {
NSLog("test_frame\((i % 100) + 1)")
self.imgView.image = UIImage(named: "test_frame\((i % 100) + 1)")
self.imgView.setNeedsDisplay()
}
}
dTime = dispatch_time(dTime, frameShowDelay)
}
}
它确实有效,但 FPS 很快变得太低,例如 1 FPS 甚至更慢。有没有其他方法可以做到这一点?
也许,有一些我不知道的方法。例如,最近我了解了Accelerate 框架和Apple Metal。蚂蚁其他想法?
【问题讨论】:
标签: ios animation image-processing uiimageview uiimage