我正在为CATiledLayer
. 在 iPhone 4S 上生成 120 个 256 x 256 的 4 个细节级别的图块大约需要 11 秒。图像本身适合 2048 x 2048。
我的瓶颈是UIImagePNGRepresentation
。生成每张 256 x 256 的图像大约需要 0.10-0.15 秒。
我尝试在不同的背景队列上生成多个图块,但这只会将其缩短到大约 9-10 秒。
我也尝试过使用 ImageIO 框架,代码如下:
- (void)writeCGImage:(CGImageRef)image toURL:(NSURL*)url andOptions:(CFDictionaryRef) options
{
CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL((__bridge CFURLRef)url, (__bridge CFStringRef)@"public.png", 1, nil);
CGImageDestinationAddImage(myImageDest, image, options);
CGImageDestinationFinalize(myImageDest);
CFRelease(myImageDest);
}
虽然这会生成更小的 PNG 文件(赢了!),但它需要大约 13 秒,比以前多 2 秒。
有什么方法可以CGImage
更快地对 PNG 图像进行编码吗?也许像libjpeg-turbo这样使用NEON
ARM 扩展(iPhone 3GS+)的库呢?
是否有比 PNG 更好的格式来保存不占用大量空间的图块?
我能想到的唯一可行的选择是将图块大小增加到 512 x 512。这将编码时间减少了一半。不过,不确定这会对我的滚动视图产生什么影响。该应用适用于 iPad 2+,仅支持 iOS 6(以 iPhone 4S 为基准)。