既然Apple正式允许在iPhone应用程序中使用UIGetScreenImage(),我已经看到一些博客说这会为iPhone上的视频捕获“打开闸门”,包括旧型号。但我也看过博客说他们用UIGetScreenImage()获得的最快帧速率就像是6 FPS。
任何人都可以分享您使用UIGetScreenImage()(或其他经过批准的API)获得的特定帧率结果吗?限制捕获的屏幕区域会显着提高帧速率吗?
另外,对于今天的程序的一厢情愿的部分,是否有人指向使用UIGetScreenImage()捕获视频的代码/库?例如,我想要一个像Capture(int fps,Rect bounds,int durationMs)这样的API,它可以打开相机并在给定的持续时间内以给定的帧速率记录一系列.png文件,从给定的帧复制屏幕矩形。
答案 0 :(得分:1)
没有特定的帧速率。 UIGetScreenImage()
不是电影录像机。它只是尽可能快地返回,不幸的是仍然很慢。
限制捕获的屏幕区域是没用的。 UIGetScreenImage
不接受任何输入参数。裁剪输出图像可能会因帧数过多而使帧速率更差。
答案 1 :(得分:0)
UIGetScreenImage()返回当前屏幕显示的图像。它被认为是缓慢的,但它是否足够快取决于用例。视频录制应用程序iCamcorder正在使用此功能。
根据他们的博客,
iCamcorder的平均最低记录为每秒10帧,最高为每秒15帧。
UIGetScreenImage方法Apple最近允许开发人员使用捕获当前屏幕内容。不幸的是,它真的很慢,App的处理时间大约有15%用于调用此方法。 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);