如何改进CGContextFillRect和CGContextDrawImage性能

时间:2011-07-08 14:09:09

标签: cocoa macos core-graphics cgcontext

这两个功能目前是我的瓶颈。我正在使用非常大的位图。

我如何改善他们的表现?

2 个答案:

答案 0 :(得分:2)

你可以在第一次绘制之前缓存你创建的较小版本的位图,然后简单地绘制缩小的样本而不是完整的15万像素的东西。

然后再次确保你只绘制了必要的内容,即在'drawRect:(NSRect)rect'中仅绘制rect(除非绝对必要)。并且尽量不要在该方法之外执行绘图。

答案 1 :(得分:1)

如果您正在绘制包含前景中移动内容的大型背景图片,请考虑使用图层支持的NSView,添加图层并设置其背景图像。然后,您可以在背景图层上方的其他图层(或图层支持的NSViews)中绘制内容,并且视图将永远不需要重绘背景图像,因为它存储在GPU的纹理内存中。您的当前图片对于单个CALayer来说太大了(CALayer s仅限于最大OpenGL纹理大小2048 x 2048),因此您可能需要将其分解为切片。

否则,正如@iolo所提到的那样,你应该确保只重绘了真正需要更新的视图部分。