繁体   English   中英

drawInRect性能太慢了

[英]drawInRect performance too slow

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

这是代码。

UIGraphicsBeginImageContext(CGSizeMake(1024, 768));

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

但是drawInRect似乎太慢了。

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

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


选项1

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

  1. 减少您需要的内存
  2. 减少必须绘制的图像数量
  3. 避免插值(高CPU,如果你想让它看起来不错)
  4. 看起来更好 - 复合材料可以使用高质量插值。

当然,这仅在复合材料以低于必须绘制的频率变化时才有意义。

选项2

即使您想要两个图像并且您知道它们的大小不会改变,只需将它们调整为必须绘制的大小(如果要放大它们,请监视内存使用情况)。

选项3

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM