drawInRect性能太慢了

时间:2012-01-12 04:31:46

标签: objective-c ios

我正在做的是将2张图像合并为单张图像。

这是代码。

UIGraphicsBeginImageContext(CGSizeMake(1024, 768));

[image1 drawInRect:CGRectMake(0, 0, 512, 768)];
[image2 drawInRect:CGRectMake(512, 0, 512, 768)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

但是drawInRect似乎太慢了。

是否有更快的方式合并图像?

2 个答案:

答案 0 :(得分:3)

选项0 - 确保仅在需要绘制时绘制,并且仅绘制需要绘制的内容。


选项1

如果您知道目的地尺寸(可能是self.frame.size?),您可以从目标尺寸的两个源图像(展平)创建一个图像,并避免插值。这样可以:

  1. 减少您需要的记忆
  2. 减少必须绘制的图像数量
  3. 避免插值(如果你希望它看起来很好,则为高CPU)
  4. 看起来更好 - 复合材料可以使用高质量插值。
  5. 当然,这只有在复合材料的变化频率低于必须绘制的频率时才有意义。

    选项2

    即使你想要两张图片并且你知道它们的尺寸不会改变,只需将它们调整到必须绘制的大小(好吧,如果要放大它们,请监视你的内存使用情况)。

    选项3

    如果这不是一个选项,您可以改变CGContext的状态,并降低插值质量。如果您习惯于类似的CALayer变换,您可能会对低质量或无插值感到满意。

答案 1 :(得分:1)

你可以做的一件事就是没有实现-drawRect:而是有两个CALayers,你的两个图像作为它们的内容,然后把一个放在另一个之前。不确定会更快,但我认为这很可能(因为CA可以在GPU上异步处理绘图)。