0

我正在使用 CGContextDrawImage 并且对性能不满意。

这是我的情况:

我有一个 CGImage,它是从具有 kCGBitmapByteOrder32Big 和 kCGImageAlphaPremultipliedLast 的 CGBitmapContext 创建的,并且包含 RGBA 像素。大小为 64x64 像素。

我有另一个用 kCGBitmapByteOrder32Big 和 kCGImageAlphaPremultipliedLast 创建的 CGBitmapContext,但是这个位图上下文要大得多,在我的例子中是 1200x1600 像素。

我正在尝试沿用户绘制的路径标记图像(使用 CGContextDrawImage 和正常混合模式)。每次标记之前,我都会调用 CGContextClipToMask 以确保下次绘制时,图像被裁剪到某个蒙版(由用户选择,例如可以是圆形、星形、三角形等)。在我的 iPhone 4S 上的整个用户界面变得完全没有响应之前,我似乎无法每秒标记超过 5 到 10 次。除非我真的很慢地拖动手指,否则渲染速度会非常慢。

我可以增加图章之间的间距,但是如果我使用远高于 1 或 2 像素的间距,情况会很糟糕,因此我想将每个图章之间的间距保持在 1 像素左右。

我已经分析了我的应用程序,并且 90% 的 CPU 时间都花在了来自 CGContextDrawImage 调用的 Apple 代码中。我也阅读了有关 Quartz2D 性能的所有 Apple 文档。

还有什么我可以尝试使用 Core Graphics / Quartz2D 来加快速度吗?如果可能的话,我宁愿不要下拉到 OpenGL,但可能没有其他选择......

如果我注释掉应用掩码的行,性能就不错了。

哦,由于公司政策,我不能发布代码,对不起...

4

1 回答 1

0

这是由在同一上下文中堆叠掩码引起的。通过保存/恢复每个掩码之间的状态,性能要好得多。

于 2013-10-27T23:42:49.117 回答