【问题标题】:How can I improve CGContextFillRect and CGContextDrawImage performance如何提高 CGContextFillRect 和 CGContextDrawImage 性能
【发布时间】:2011-07-08 14:09:08
【问题描述】:

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

我怎样才能提高他们的表现?

【问题讨论】:

  • 你没有给我们太多的继续。请描述您正在绘制的内容、位图的大小以及您遇到的性能问题。还请发布任何相关的绘图代码。
  • 我使用大小为 2930 x 5750 像素的位图(每个像素为 4 字节,RGBA)。我使用 CGContextFillRect (和之前的 CGContextSetRGBFillColor )用背景颜色填充位图。

标签: cocoa macos core-graphics cgcontext


【解决方案1】:

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

然后再次确保您只绘制必要的内容,即在“drawRect: (NSRect) rect”中仅在矩形内绘制(除非绝对必要)。并尽量不要在该方法之外进行绘图。

【讨论】:

    【解决方案2】:

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

    否则,正如@iolo 所说,您应该确保只重绘视图中真正需要更新的部分。

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 2010-12-02
      • 2021-06-13
      • 2020-09-09
      • 2012-06-24
      • 2021-05-28
      相关资源
      最近更新 更多