Ios 为什么使用CGContextDrawImage旋转图像比绘制旋转的UIImage慢得多?
我从相机上得到图像,我必须考虑到它们处于不同的方向。我采用的第一种方法是创建一个正确旋转的Ios 为什么使用CGContextDrawImage旋转图像比绘制旋转的UIImage慢得多?,ios,objective-c,performance,graphics,uiimage,Ios,Objective C,Performance,Graphics,Uiimage,我从相机上得到图像,我必须考虑到它们处于不同的方向。我采用的第一种方法是创建一个正确旋转的UIImage。它计算一个cGraffeTransform,然后使用CGContextDrawImage绘制图像 但是,此操作需要2-3秒才能完成 我采用的第二种方法是计算我必须旋转图像多少度,以及是否必须翻转图像,然后在绘制UIImage之前应用这些旋转。这种方法花费的时间可以忽略不计 具体来说,我使用的是Cocos2D,因此在任何一种情况下,我都将UIImage转换为CCTexture2D,用该纹理创建
UIImage
。它计算一个cGraffeTransform
,然后使用CGContextDrawImage
绘制图像
但是,此操作需要2-3秒才能完成
我采用的第二种方法是计算我必须旋转图像多少度,以及是否必须翻转图像,然后在绘制UIImage
之前应用这些旋转。这种方法花费的时间可以忽略不计
具体来说,我使用的是Cocos2D,因此在任何一种情况下,我都将UIImage
转换为CCTexture2D
,用该纹理创建了一个精灵,然后绘制了它。在第一种情况下,我创建了一个新的UIImage
,并拥有一个未旋转的CCSprite
。在第二个例子中,我使用了相同的UIImage
,但是有一个旋转的精灵
为什么第二种方法要快得多?最终的结果是一样的:旋转图像。无论哪种方式,相同的位和字节都必须以相同的方式进行操作才能得到这个结果。看看这个
UIImage
可能已经在后台进行了一些优化(因为我们不知道实现细节,没有真正的方法知道)。Hmm不可能就是这样。当我做一个按钮,当我按下它时,图像在Cocos2D中旋转90度,每次旋转都会立即发生。我可以一次又一次地反复敲打它,看起来没有额外的内存被使用。看起来OpenGL在这里做了一些聪明的事情。我想知道为什么手机不能做同样聪明的事情来旋转图像并获得旋转的字节。。