我正在开发一个iPhone应用程序,不久将向现场观众进行演示。
我真的很想通过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以上)?它不需要通过Apple的应用程序审查-该演示代码将不在运输应用程序中。如果有人知道任何更快的私有(private)API,我将非常感谢您的帮助!
另外,上述代码是使用重复的
NSTimer
执行的,该命令每1.0/desiredFrameRate
秒(当前每0.1秒)触发一次。我想知道是否将这些调用包装在一个块中并使用GCD或NSOperationQueue
可能比让NSTimer
调用当前包含这些调用的updateTVOut
obj-c方法更有效。也希望对此有一些输入-某些搜索似乎表明obj-c消息发送与其他操作相比有些慢。最后,如您在上面看到的,
CGImageRef
返回的UIGetScreenImage()
被转换为UIImage
,然后将该UIImage
传递给UIImageView
,这可能会即时调整图像的大小。我想知道调整大小是否会进一步放慢速度。如何更快地执行此操作的想法? 最佳答案
您是否看过Apple推荐的UIGetScreenImage替代品?在“Notice regarding UIGetScreenImage()”线程中:
关于iPhone演示帮助: anyone know of a faster screen capture alternative to UIGetScreenImage()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4743051/