为什么使用CGContextDrawImage旋转图像比绘制旋转的UIImage要慢得多?

时间:2013-10-18 20:44:23

标签: ios objective-c performance graphics uiimage

我从相机获取图像,我必须考虑到它们处于不同的方向。我采用的第一种方法是使用this code snippet来创建正确旋转的UIImage。这会计算CGAffineTransform,然后使用CGContextDrawImage绘制图像。

但是,此操作需要2-3秒才能完成。

我采用的第二种方法是计算旋转图像所需的度数,以及是否必须将其翻转,然后在绘制UIImage之前应用这些旋转。这种方法花费的时间可以忽略不计。

具体来说,我使用的是Cocos2D,所以在任何一种情况下我都将UIImage转换为CCTexture2D,创建了一个带有该纹理的精灵,然后绘制它。在第一种情况下,我创建了一个新的UIImage并且没有旋转CCSprite。在第二个中,我使用了相同的UIImage但是有一个旋转的精灵。

为什么第二种方法要快得多?最终结果是相同的:旋转图像。似乎任何一种方式都必须以相同的方式操作相同的位和字节才能得到这个结果。

1 个答案:

答案 0 :(得分:1)

看看这个question, experimentation, and answerUIImage可能已经在后台进行了一些优化(因为我们不知道实现细节,所以没有真正的方法可以知道)。