Ändern der Größe eines UIImage auf dem iPhone mit geringem Speicherbedarf

8

Ich habe diese Frage Dutzende Male gesehen, aber nie beantwortet.

Wie ändert man die Größe eines UIImage (insbesondere eines, das von der UIImagePickerController-Kamera zurückgegeben wird). Wenn ich irgendeine der Methoden ausprobiere, die da draußen sind, bekomme ich eine Speicherspitze zwischen 20 und 40MB. Es geht weg, aber ich weiß, dass dies auf einer Hardware völlig inakzeptabel ist.

Ich habe die Methoden ausprobiert, die die folgenden Operationen verwenden: drawInRect :, CGContextDrawImage (), imageWithCGImage: scale: orientation:

Ich verstehe, dass unkomprimierte Bilder, die im Speicher leben, mehr Platz benötigen als auf der Festplatte, aber es scheint, als ob die gebräuchlichsten UIImage-Größenänderungsoperationen das Erstellen von Kopien der Bilddaten beinhalten.

Auch Apple empfiehlt, die Größe eines mit der Kamera aufgenommenen Bildes sofort zu ändern. Jedoch (b / c glaube ich, dass sie wissen, dass dieses Thema sehr komplex ist), bieten sie keine Hinweise darauf, wie dies zu handhaben ist. Vor allem, wie es gemacht wird, sobald die Bilddaten zurückgegeben werden.

Hat jemand eine glatte Methode, um ein großes UII-Bild zu verkleinern und gleichzeitig Speicher zu sparen? Ich weiß, das ist eine große Aufgabe.

    
sambecker 01.08.2010, 21:50
quelle

5 Antworten

1

Eine Methode, die wenig Arbeitsspeicher verwendet, besteht darin, einen Bitmap-Kontext mit CGBitmapContextCreate zu erstellen und die UIImage darauf zu zeichnen. Der einzige zusätzliche Speicher, den Sie verwenden werden, ist, was Sie malloc ed und einige kleine CGContext Overhead haben.

Wenn Sie etwas Besonderes wünschen, können Sie stattdessen mmap mit dem PROT_WRITE -Flag setzen und nur durch den virtuellen Adressraum

eingeschränkt werden     
rpetrich 02.08.2010 02:08
quelle
1

Haben Sie versucht, den Speicherbedarf zu messen, indem Sie die Größe von UIImage mit den im folgenden Blog beschriebenen Kategoriemethoden ändern: posten .

Ich habe eine ähnliche Größenanpassung verwendet, um Thumbnails für größere Bilder zu erstellen, die von der App heruntergeladen werden. Meine Bilder sind wahrscheinlich nicht so groß wie die, die Sie von Ihrem Bilderwähler-Controller auswählen, aber ich habe eine ziemlich gute Leistung gefunden.

Ich hoffe, es hilft irgendwie.

    
petert 20.09.2010 14:13
quelle
1

Hier sind ein paar git-Projekte, die die Größenänderung von UIImagie abdecken. Ich benutze das zweite und es funktioniert wie ein Zauber. Es hat ein nettes Beispielprojekt enthalten, so dass Sie genau sehen können, wie Sie es verwenden. Ich denke, der erste hat auch eine Probe, obwohl ich es nicht versucht habe oder genau hinsah.

Ссылка

Ссылка

Wenn Sie sich wirklich Gedanken über den Speicherbedarf machen, könnten Sie etwas Verrücktes tun, wie das Ändern der Bildgröße und das Zusammenfügen der Bilder im Speicher ... aber das wäre wahrscheinlich nur für sehr große Bilder. Bilder von der eingebauten Kamera sollten mit dem verfügbaren Speicher in Ordnung gebracht werden können.

    
jinglesthula 21.06.2011 05:07
quelle
0

Ich habe keine 100% gute Antwort hier, aber Sie haben ein paar Optionen. Mit dem iPhone können Sie in den Modus Bearbeiten / Zuschneiden usw. wechseln. Ich denke, das ist es, was Apple von dir will. Für uns war das nicht ganz akzeptabel. Wir greifen die Bilddaten auf, holen die Pixeldaten, geben das Originalbild frei. Ändern Sie dann die obere Hälfte und dann die zweite. Ich poste etwas Code, bin aber nicht bei der Arbeit. Ich kann in ein paar Tagen nach dem Urlaub ...

    
David Nelson 02.08.2010 00:32
quelle
0

Sie haben wahrscheinlich größere Bilder als in meinen Apps, aber Sie sagen nicht, über welche Größen wir sprechen. Ich kann nur Quarz oder einen eigenen Größenanpassungsfilter vorschlagen, der das Bild zeilenweise ausführt.

    
Henrik Erlandsson 16.12.2010 10:21
quelle