0

既然 Apple 正式允许在 iPhone 应用程序中使用 UIGetScreenImage(),我已经看到许多博客说这“打开了闸门”,用于在 iPhone 上进行视频捕获,包括旧型号。但我也看到博客说他们可以使用 UIGetScreenImage() 获得的最快帧速率就像 6 FPS。

任何人都可以分享您使用 UIGetScreenImage()(或其他批准的 API)获得的特定帧速率结果吗?限制捕获的屏幕区域是否会显着提高帧速率?

此外,对于今天程序的一厢情愿部分,是否有人指向使用 UIGetScreenImage() 捕获视频的代码/库?例如,我想要一个类似于 Capture( int fps, Rect bounds, int durationMs ) 的 API,它会打开相机并在给定的持续时间内以给定的帧速率记录一系列 .png 文件,从给定的复制屏幕矩形

4

2 回答 2

1

没有特定的帧速率。UIGetScreenImage()不是电影录像机。它只是试图尽快返回,不幸的是仍然很慢。

限制捕获的屏幕区域是没有用的。UIGetScreenImage不接受任何输入参数。由于过多的工作,裁剪输出图像可能会使帧速率更差。

于 2010-02-17T14:49:26.323 回答
0

UIGetScreenImage() 返回当前屏幕显示的图像。据说速度很慢,但是否足够快取决于用例。视频录制应用程序 iCamcorder 正在使用此功能。

根据他们的博客,

iCamcorder 以惊人的平均每秒至少 10 帧和最大每秒 15 帧的速度记录。

Apple 最近允许开发人员使用 UIGetScreenImage 方法捕获当前屏幕内容。不幸的是,它真的很慢,大约 15% 的 App 处理时间用于调用此方法。http://www.drahtwerk.biz/EN/Blog.aspx/iCamcorder-v19-and-Giveaway/?newsID=27

所以 UIGetScreenImage() 的原始性能至少应该远高于 15 fps。

要裁剪返回的图像,您可以尝试

extern CGImageRef UIGetScreenImage(void);

...
CGImageRef cgoriginal = UIGetScreenImage();
CGImageRef cgimg = CGImageCreateWithImageInRect(cgoriginal, rect);            
UIImage *viewImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgoriginal);                
CGImageRelease(cgimg);  
于 2010-04-29T09:03:59.353 回答