Gibt es irgendeine Möglichkeit, ein Cached UIImage aus meinem "Documents" -Verzeichnis zu bekommen?

7

Ich weiß, dass die -imageNamed: -Methode ein Cached UIImage zurückgibt, aber das Problem ist, dass meine Image-Datei in "Documents" gespeichert ist, und die -imageNamed: -Methode scheint nur das Bundle zu durchsuchen ... Ich bin momentan ( widerwillig) mit -imageWithContentsOfFile: um mein Bild von 'Dokumente' zu bekommen, aber es ist nicht das selbe ... Die Skalierung eines UIImageView mit dem resultierenden Bild ist abgehackt und unhandlich. Das gleiche UIImageView zu skalieren, das ein mit -imageNamed erstelltes Bild enthält, erscheint jedoch sehr glatt. Also noch einmal: Wie kann ich ein im Cache gespeichertes UIImage aus meinen 'Dokumenten' erhalten, wenn ich -imageNamed nicht verwenden kann:?

    
RexOnRoids 27.08.2009, 03:39
quelle

4 Antworten

4

Sie können UIImages selbst so wie -imageNamed: speichern. Es lädt sie einfach und hält sie dann fest. Sie können sie auch mit einem NSDictionary beibehalten und Ihr eigenes -imageNamed:

implementieren

Aber ich mache mir mehr Sorgen wegen der Probleme, die Sie beim Skalieren haben. Wie kommen Ihre Bilder in Dokumente, wie skalieren Sie sie und haben Sie die gleiche Bilddatei getestet, die im Paket gespeichert ist? Ich bezweifle, dass -imageNamed: damit zu tun hat. Ich vermute eher Dinge wie die Tatsache, dass das Bündel eine gewisse Komprimierung hat (obwohl ich noch keine Theorie habe, warum das in der Praxis wichtig wäre), Unterschiede in der Datei oder Unterschiede in der Art des restlichen Programms verhält sich während der Skalierung (was zu Konflikten auf der Festplatte oder der CPU führt). Caching ist unwahrscheinlich in Verbindung mit diesem Problem.

Ich würde etwas Profiling mit Instrumenten machen, um herauszufinden, woher die Häcksel kommt. Maximieren Sie die Festplatte, die CPU und den Speicher? Was ist der Flaschenhals?

    
Rob Napier 27.08.2009, 03:52
quelle
9

Ich habe eine Erweiterung der Antwort von rpetrich gemacht und die imageName: -Methode überschrieben, um mehr von einem Ersatztropfen hinzuzufügen. Es durchsucht zuerst das Hauptpaket und dann das Cache-Verzeichnis. Sie könnten natürlich das Cache-Verzeichnis in das Dokumentenverzeichnis ändern.

%Vor%     
Chase 12.11.2010 09:42
quelle
8

Am einfachsten wäre es, wenn ein NSMutableDictionary die zwischengespeicherten Bilder speichert und eine Cache-Methode löscht:

%Vor%

Hinweis: Sie sollten +[UIImage clearCache] von Ihrer didReceiveMemoryWarning -Methode aufrufen. % Co_de% deaktiviert außerdem alle Objekte im Cache, nicht nur nicht verwendete Elemente. Um dies zu beheben, wäre eine clearCache Unterklasse und ein komplizierterer Caching-Mechanismus erforderlich.

    
rpetrich 27.08.2009 05:20
quelle
1

Wie wäre es mit einem eigenen Image-Cache? Sie haben alle Teile an Ort und Stelle, jetzt müssen Sie es nur kapseln und eine Aufzeichnung von Bildern behalten, die Sie bereits geladen haben.

    
fbrereto 27.08.2009 03:46
quelle

Tags und Links