のタイルの束を生成していCATiledLayer
ます。iPhone4Sで4レベルの詳細を備えた256x256で120個のタイルを生成するのに約11秒かかります。画像自体は2048x2048の範囲内に収まります。
私のボトルネックは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ファイルが生成されますが(win!)、約13秒かかり、以前より2秒長くなります。
PNG画像をCGImage
より高速にエンコードする方法はありますか?おそらく、 libjpeg-turboのNEON
ようにARM拡張機能(iPhone 3GS +)を利用するライブラリですか?
スペースをあまりとらないタイルを保存するために、PNGよりも優れたフォーマットはおそらくありますか?
私が思いついた唯一の実行可能なオプションは、タイルサイズを512 x 512に増やすことです。これにより、エンコード時間が半分に短縮されます。しかし、それが私のスクロールビューに何をするかはわかりません。このアプリはiPad2+用で、iOS 6のみをサポートします(ベースラインとしてiPhone 4Sを使用)。