UIImage to raw NSData / Komprimierung vermeiden

Ich habe eine eigene Bild-Download-Klasse, die eine Warteschlange enthält und Bilder einzeln (oder in einer bestimmten Anzahl) herunterlädt, sie in den Cache-Ordner schreibt und bei Bedarf aus dem Cache-Ordner abruft. Ich habe auch eine UIImageView-Unterklasse, an die ich eine URL übergeben kann. Über die Image-Download-Klasse wird geprüft, ob das Image bereits auf dem Gerät vorhanden ist, und angezeigt, ob dies der Fall ist.

Nachdem ein Bild heruntergeladen wurde, gehe ich wie folgt vor. Ich erstelle ein UIImage aus den heruntergeladenen NSData, speichere die heruntergeladenen NSData auf der Festplatte und sende das UIImage zurück.

// This is executed in a background thread
downloadedImage = [UIImage imageWithData:downloadedData];
BOOL saved = [fileManager createFileAtPath:filePath contents:downloadedData attributes:attributes];
// Send downloadedImage to the main thread and do something with it

Um ein vorhandenes Bild abzurufen, mache ich das.

// This is executed in a background thread
if ([fileManager fileExistsAtPath:filePath])
{
    NSData* imageData = [fileManager contentsAtPath:filePath];
    retrievedImage = [UIImage imageWithData:imageData];
    // Send retrievedImage to the main thread and do something with it
}

Wie Sie sehen, erstelle ich ein UIImage immer direkt aus den heruntergeladenen NSData. Ich erstelle niemals NSData mit UIImagePNGRepresentation, damit das Bild nie komprimiert wird. Wenn Sie ein UIImage aus komprimierten NSData erstellen, dekomprimiert UIImage es direkt vor dem Rendern im Hauptthread und blockiert somit die Benutzeroberfläche. Da ich jetzt eine UITableView mit einer Menge kleiner Bilder habe, die heruntergeladen oder von der Festplatte abgerufen werden müssen, wäre dies inakzeptabel, da dies das Scrollen erheblich verlangsamen würde.

Nun mein Problem. Der Benutzer kann auch ein Foto aus der Kamerarolle auswählen, es speichern und es muss auch in meiner UITableView angezeigt werden. Es scheint jedoch nicht möglich zu sein, das UIImage von der Kamerarolle in NSData umzuwandeln, ohne UIImagePNGRepresentation zu verwenden. Also hier ist meine Frage.

Wie kann ich ein UIImage in nicht komprimierte NSData konvertieren, damit ich es später mit imageWithData wieder in ein UIImage konvertieren kann, damit es vor dem Rendern nicht dekomprimiert werden muss?

oder

Gibt es eine Möglichkeit, die Dekomprimierung durchzuführen, bevor das UIImage an den Haupt-Thread gesendet und dort zwischengespeichert wird, sodass es nur einmal dekomprimiert werden muss?

Danke im Voraus.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage