6

我正在尝试从用户可以绘制的视图中获取图像,或者添加一些其他视图。到目前为止,使用 iPad1 和 2 一切正常。但在 iPad3 上它像狗一样奔跑。我只是使用图层 renderInContext 方法。

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    UIGraphicsBeginImageContextWithOptions(self.viewDrawableViewContainer.frame.size, NO, [UIScreen mainScreen].scale);
else
    UIGraphicsBeginImageContext(self.viewDrawableViewContainer.frame.size);
[self.viewDrawableViewContainer.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();   

我知道这可能是由等于 ipad2 的 cpu 引起的,但大约需要 1 秒。用户绘制或添加的越多,渲染所需的时间就越长。有时长达 5 秒,这实在令人无法接受。那么有没有什么办法可以提高性能呢?任何可能设置较小渲染质量的机会 - 我不需要以最高视网膜分辨率进行渲染......

我将不胜感激任何帮助!提前致谢

4

2 回答 2

16

您还可以通过在上下文中调用渲染之前修改上下文中的插值质量来提高渲染速度。通过这种更改,我能够获得比更改比例因子更快的截图速度。

当然,您可以同时使用两者,并且不必将质量设置为无,低对我来说仍然是一个改进。

CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);

此外,对于上一个答案中提到的比例因子,请确保您的新比例因子是原始比例因子的倍数,即如果屏幕比例为 1.0,您应该执行类似 0.5 而不是 0.8 的操作。使用 .8 将导致渲染计算更多信息(因为它不是一个均匀的比例),因此它比使用 1.0 慢,因为。

当然,这对每个人来说都不是一个好的解决方案。

于 2013-05-09T02:39:36.923 回答
9

您可以通过以较低的分辨率进行渲染来提高速度。使用小于 1.0 的 UIGraphicsBeginImageContextWithOptions 比例因子,例如 0.5。

此外,如果您不需要 alpha,则可以通过为 opaque 标志传递 YES 来获得小的速度提升。我自己没有计时差异。

于 2012-08-18T22:58:00.630 回答