Gibt es eine Möglichkeit, ein PNG schneller als UIImagePNGRepresentation zu codieren?

Ich generiere ein paar Kacheln fürCATiledLayer. Das Erzeugen von 120 Kacheln im Format 256 x 256 mit 4 Detailstufen auf einem iPhone 4S dauert etwa 11 Sekunden. Das Bild selbst passt innerhalb von 2048 x 2048.

Mein Engpass istUIImagePNGRepresentation. Es dauert ungefähr 0,10 bis 0,15 Sekunden, um jedes 256 x 256-Bild zu erzeugen.

Ich habe versucht, mehrere Kacheln in verschiedenen Hintergrundwarteschlangen zu generieren, dies verringert jedoch nur die Dauer von 9-10 Sekunden.

Ich habe auch versucht, das ImageIO-Framework mit folgendem Code zu verwenden:

- (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);
}

Während dies kleinere PNG-Dateien erzeugt (win!), Dauert es ungefähr 13 Sekunden, 2 Sekunden länger als zuvor.

Gibt es eine Möglichkeit, ein PNG-Bild von zu codieren?CGImage schneller? Vielleicht eine Bibliothek, die davon Gebrauch machtNEON ARM Extension (iPhone 3GS +) gefälltlibjpeg-turbo tut?

Gibt es vielleicht ein besseres Format als PNG zum Speichern von Kacheln, die nicht viel Platz beanspruchen?

Die einzige praktikable Option, die ich mir ausgedacht habe, ist die Erhöhung der Kachelgröße auf 512 x 512. Dadurch halbiert sich die Kodierungszeit. Ich bin mir nicht sicher, was das mit meiner Bildlaufansicht machen wird. Die App ist für iPad 2+ und unterstützt nur iOS 6 (mit iPhone 4S als Basis).

Antworten auf die Frage(1)

Ihre Antwort auf die Frage