Frage

Ich packte ein Bild von der Kamerarolle und dann für eine Weile und speichern sie auf der Festplatte als PNG auf dem iPhone verwenden es. Ich erhalte den ungeraden Absturz, vermutlich aufgrund nicht genügend Arbeitsspeicher.

Macht es einen Unterschied machen, wenn ich es als PNG oder JPG speichern (vorausgesetzt, ich wählen beachten Sie die Qualität im JPG Fall zu verschlechtern)? Im Einzelnen:

  • ist mehr Speicher dann von der UIImage verwendet, nachdem ich es aus der Platte neu zu laden, wenn ich es als PNG gespeichert?
  • ist es möglich, die Handlung des Sparens als PNG mehr Speicher vorübergehend während des Speichervorgangs verbraucht?

Ich hatte die UIImage wurde unter der Annahme, ein Format neutrale Darstellung war und es sollte keine Rolle spielen, aber ich dachte, ich sollte überprüfen.

War es hilfreich?

Lösung

Ich habe eine Anwendung auf dem Speicher, die Zwischenversionen eines Bildes speichern muss, wie es bearbeitet hat wird. In der ursprünglichen Version, habe ich PNG-Format für die Speicherung, Qualitätsverlust von Laden zu vermeiden und Speichern von JPEG mehrere Male.

Irgendwann um die 2.2 Software-Release hat Apple eine Änderung in den PNG Schreiben von Code, so dass es oft länger speichern PNG Daten aus einigen Bildern nimmt. Ich landete mit dem Speichern im JPEG-Format zu ändern, da meine Anwendung eines Timeout wurde beim Anzeigen von Bildern auf dem Beenden zu speichern.

Sie wird auch in Probleme läuft, weil im PNG-Format speichert nicht die „Orientierung“ Informationen in der UIImage nicht erhalten, so dass ein Bild im Hochformat mit dem eingebauten Kamera gedreht wird erscheinen genommen, nachdem Sie speichern und laden es.

Andere Tipps


  

Ich bin den ungeraden Absturz bekommen, vermutlich aufgrund von Speichern


Dann STOPPEN, was Sie tun AUGENBLICK und zunächst herauszufinden, ob das ist tatsächlich die Ursache des Absturzes. Ansonsten ist es eine sehr gute Chance, dass Sie das falsche Problem hier sind jagen, ein Speicherproblem Fixierung, die nicht existiert, während die eigentliche Ursache des Absturzes zu ignorieren. Wenn Sie einen Absturz beheben möchten, starten, indem Sie herauszufinden, was den Absturz verursacht . Im Anschluss an, was „vermutlich“ das Problem ist ein Rezept für verschwendete Zeit und Mühe.

Es hängt davon ab, welche Art von Bildern mit Ihnen zu tun hat. Wenn Sie mit fotografischen Bildern zu tun hat, wird JPEGs fast immer kleiner als PNGs, ohne erkennbaren Verlust an Details, wie sie durch das menschliche Auge gesehen werden.

Wenn Sie umgekehrt mit stark nicht-fotografischen Bildern wie GUI-Elemente oder Bildern mit großen Blöcken von Volltonfarben zu tun hat, dann PNGs und JPEGs in der Größe vergleichbar sein, aber das PNG wird verlustlos speichern, während die JPEG werden verlustbehaftete und haben sehr sichtbare Artefakte. Wenn Sie ein wirklich einfaches Bild (sehr große Blöcke von konstanten Farben, zum Beispiel), dann wird ein PNG sehr wahrscheinlich viel kleiner als ein JPEG, und wieder wird keine Kompressionsartefakte hat.

Der Akt des ein Bild als PNG speichern oder JPEG sollte sehr viel Transientenspeicher nicht in Anspruch nehmen. Wenn ein Bild im Speicher vorhanden ist, wird es in der Regel unkomprimiert im Speicher abgelegt, so dass sie sehr schnell auf den Bildschirm gezeichnet werden, im Gegensatz zu, die es wollen, jedes Mal wenn Sie dekomprimieren machen. Im Vergleich zu der Größe des unkomprimierten Bildes, die Menge an zusätzlichen temporären Speicher benötigen Sie komprimieren es sehr klein ist. Wenn Sie das nicht komprimierte Bild in den Speicher passen können, müssen Sie sich nicht über den Speicher Sorge verwendet, während es komprimiert wird.

Und natürlich, wenn Sie das Bild auf das Dateisystem in nichtflüchtigen Speichern und gratis die In-Memory-Bild schreiben, es spielt keine Rolle, wie groß das komprimierte Bild ist, weil es nicht auf sich nimmt Haupt Speicher mehr. Die Größe des komprimierten Bildes nur Einfluss darauf, wie viel Flash-Speicher ist es mit, was ein Problem sein kann, aber es wirkt sich nicht auf hohe Wahrscheinlichkeit, dass Ihre App ist nicht genügend Arbeitsspeicher ausgeführt werden.

Ihre Abstürze von einem bekannten Speicherleck im UIImagePickerController sein können.

Dies soll Ihnen helfen, zu beheben, dass.

Ich habe keine harten Daten, aber ich würde davon ausgehen, dass PNGs vorzuziehen ist, weil Apple-PNGs zu verwenden praktisch überall in iPhone OS scheint.

Allerdings, wenn Sie bereits den Code bekam für das Schreiben von PNG-Dateien einzurichten, sollte es nicht allzu schwierig sein, sie zu ändern JPEGs zu schreiben, sollte es? Probieren Sie beide Methoden und sehen, welche besser funktioniert.

Verwenden Sie PNG, wo immer möglich. Im Rahmen der Zusammenstellung XCode führt alle PNG-Dateien über ein Dienstprogramm (pngcrush) zu komprimieren und zu optimieren.

  1. ist mehr Speicher dann von der UIImage verwendet, nachdem ich es neu zu laden weg von Platte, wenn ich es als PNG gespeichert? => Nein, es ist die gleiche Speichergröße, wenn Sie von 2 Bildern importieren, die gleiche Auflösung und die gleiche Anzahl von Kanälen. (Wie RGBA)
  2. ist es möglich, die Handlung des Sparens als PNG mehr Speicher vorübergehend während des Speichervorgangs verbraucht? => Nein, es nur Ihre Plattenspeicher bewirken.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top