iPad 3 截图慢

9
在我的应用程序中,我使用了一种截屏方法。在我的iPad 2上,执行此方法非常快(约130毫秒)。但是在新的iPad上(肯定是由于更高的分辨率和相同的CPU),执行时间需要大约700毫秒!有没有办法优化我的方法?也许有一种方法可以直接使用图形卡来处理?以下是我的截屏方法:
- (UIImage *)image {
CGSize imageSize = self.bounds.size;

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) UIGraphicsBeginImageContextWithOptions(imageSize, NO, [UIScreen mainScreen].scale);
else UIGraphicsBeginImageContext(imageSize);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, [self center].x, [self center].y);
CGContextConcatCTM(context, [self transform]);
CGContextTranslateCTM(context, -[self bounds].size.width * [[self layer] anchorPoint].x, -[self bounds].size.height * [[self layer] anchorPoint].y);
[[self layer] renderInContext:context];
CGContextRestoreGState(context);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;

感谢您的帮助。

}


1
@Rokjarc 谢谢。还是有点慢 :/ - Pierre
不幸的是,我认为它不会达到520毫秒。让我们记住,在iPad 2和3之间,他们将像素增加了四倍,但只增加了两倍的图形处理能力,并保持CPU不变。我认为对于完整分辨率的屏幕截图,700毫秒可能是你能得到的最好结果。 - trumpetlicks
@trumpetlicks 是的。所以现在我正在使用非Retina分辨率进行截图,然后将它们拉伸到Retina分辨率。 - Pierre
那么在这种情况下,我完全希望超过520毫秒。对于简单的屏幕截图来说,这是一回事,但当你实际上需要处理一个较小的图像并为更多的像素进行数学生成时,这是非常处理密集的! - trumpetlicks
这段代码实际上是可以工作的,但它没有考虑设备方向? - Juan Carlos Ospina Gonzalez
显示剩余5条评论
2个回答

3

我认为这是Flipboard的开发者在播客中谈到的问题。这是iPad 3真正存在的问题,因为他们将像素增加了四倍。

他所做的是提前在后台截取屏幕截图,而不是在用户触发操作时——在他的情况下,当用户“翻转”页面时。

我不知道这是否能帮助您解决问题,但对于许多情况来说,这确实是一种可行的方法。


0

这可能对您的应用程序足够或不足,但其中一个选项是将屏幕截图缩小,例如将0.5作为比例因子传递给UIGraphicsBeginImageContextWithOptions。速度快4倍,但代价是失去了一些细节/分辨率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接