CGContextDrawImage + CGContextClipToMask性能

时间:2013-01-14 23:07:49

标签: iphone ios ipad core-graphics quartz-graphics

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

以下是我的情况:

我有一个CGC图像,它是用CGBitmapContext创建的,带有kCGBitmapByteOrder32Big和kCGImageAlphaPremultipliedLast,并包含RGBA像素。尺寸为64x64像素。

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

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

我可以增加邮票之间的空间,但是如果我使用远高于1或2像素的间距,事情看起来很糟糕,所以我想将每个邮票之间的间距保持在1个像素左右。

我已经对我的应用进行了分析,并且在CGContextDrawImage调用的Apples代码中花费了90%的CPU时间。我已经阅读了有关Quartz2D性能的所有Apple文档。

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

如果我注释掉应用蒙版的线条,那么表现就不错​​了。

哦,由于公司政策,我无法发布代码,抱歉......

1 个答案:

答案 0 :(得分:0)

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