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;

}

谢谢你的帮助。

4

2 回答 2

3

我认为是 Flipboard 的开发人员在播客上谈论这个问题。这是 iPad 3 的一个真正问题,因为它们的像素增加了四倍。

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

我不知道这是否会对您的情况有所帮助,但对于许多情况来说,这无疑是一种可行的方法。

于 2012-06-08T02:21:48.740 回答
0

这对于您的应用程序可能足够也可能不够,但一种选择是缩小屏幕截图,例如将 0.5 作为比例因子传递给UIGraphicsBeginImageContextWithOptions。快 4 倍,但代价是细节/分辨率的损失。

于 2012-08-18T22:50:30.587 回答