我正在研究一个iPhone应用程序,我将很快演示给现场观众。iPhone演示帮助:任何人都知道更快的截图替代UIGetScreenImage()?
我真的很想通过VGA实时演示应用程序到投影仪,而不是显示屏幕截图。
我买了一个iPhone的VGA适配器,并已改编Rob Terrell's TVOutManager,以满足我的需求。不幸的是,在家里的电视上测试后的帧率并不是很好 - 即使是在iPhone 4上(可能每秒4-5帧,它也不尽相同)。
我相信这个缓慢的原因是我用来捕获设备的屏幕(然后显示在外部显示屏上)的主程序是UIGetScreenImage()
。这个不再被允许作为运输应用程序的一部分的例程实际上很慢。下面是我使用捕捉屏幕的代码(FYI mirrorView
是UIImageView
):
CGImageRef cgScreen = UIGetScreenImage();
self.mirrorView.image = [UIImage imageWithCGImage:cgScreen];
CGImageRelease(cgScreen);
是否有快速的方法,我可以用它来捕捉iPhone的屏幕,并实现更好的帧频(20+拍摄FPS)?它不需要通过苹果的应用程序审查 - 此演示代码不会在运输应用程序。如果有人知道任何更快的私人API,我真的很感谢帮助!
另外,使用重复NSTimer
的上述代码正在执行,其每隔1.0/desiredFrameRate
秒(当前每0.1秒)触发一次。我想知道是否将这些调用封装在一个块中,并使用GCD或NSOperationQueue
可能会比调用当前包含这些调用的obj-c方法的NSTimer
效率更高。希望对此也有所了解 - 有些搜索似乎表明,与其他操作相比,obj-c消息发送速度有点慢。
最后,你可以在上面看到,该CGImageRef
是UIGetScreenImage()
回报正在变成一个UIImage
,然后将该UIImage
被传递到UIImageView
,这可能是调整上飞的形象。我想知道如果调整大小可能会减慢甚至更多。如何更快做到这一点的想法?
嗨约拿,谢谢你的建议。事实证明,我确实尝试使用CALayer的renderInContext:方法。它甚至更慢。 AVFoundation在这种情况下不会真正帮助我,因为我没有从相机或其他AV源捕获 - 我试图捕获屏幕本身。 Apple建议替代UIGetScreenImage,因为它们不再允许它,但是此代码不适用于App Store提交,它仅用于演示。 – 2011-01-20 19:43:14