Seite 1 von 2
SaveImage() als PNG extrem langsam?
Verfasst: 06.04.2013 22:18
von Kiffi
Hallo,
ich lade eine Bitmap-Grafik (~ 25 MB) mit LoadImage() und speichere sie danach mit SaveImage() als PNG ab.
Code: Alles auswählen
LoadImage(0, sTempFileNameBmp)
SaveImage(0, sTempFileNamePng, #PB_ImagePlugin_PNG)
Zu meinem Entsetzen dauert das Speichern bei mir knapp 22 Sekunden.
Ein vergleichbarer Code in VB.Net benötigt dafür etwas unter einer Sekunde.
Ist es normal, dass PB sich hier so viel Zeit lässt?
Danke im voraus & Grüße ... Kiffi
Re: SaveImage() als PNG extrem langsam?
Verfasst: 06.04.2013 22:27
von RSBasic
Ich hab zwar noch 5.10 B5, aber bei mir dauert das Laden und Speichern einer Grafik, die 30 MB groß ist, 1 ganze Sekunde.
Ich kann es ja später mal mit 5.11 testen.
Re: SaveImage() als PNG extrem langsam?
Verfasst: 06.04.2013 22:32
von RSBasic
Ich habe mal endlich 5.11 (x86) installiert und es nochmal getestet.
Dauert bei mir insgesamt 1154 Millisekunden.
Re: SaveImage() als PNG extrem langsam?
Verfasst: 06.04.2013 22:39
von STARGÅTE
für ein Zufallsbild von 32MB dauert es bei mir 800ms als PNG zu speichern.
Re: SaveImage() als PNG extrem langsam?
Verfasst: 06.04.2013 22:41
von RSBasic
@Kiffi
Versuch mal dein Code temporär ohne dein Antivirenprogramm zu starten. Vielleicht wird es ausgebremst. Ansonsten mal die Aktivität deiner Festplatte überprüfen, aber wenn es mit VB.NET trotzdem schnell beim Speichern ist, kann es ja nicht daran liegen.
Re: SaveImage() als PNG extrem langsam?
Verfasst: 06.04.2013 23:06
von Kiffi
Hallo Ihr beiden,
danke für Eure schnellen Antworten!
Habe jetzt verschiedene Konstellationen ausprobiert (Compiler 32 / 64 Bit; Antivirus an / aus; verschiedene Speicherpfade).
Es wird nicht besser.
Könnt Ihr es bitte mal mit diesem Bild (gezippt, 9 MB) probieren?
https://dl.dropbox.com/u/79130/pic.zip
(dieses braucht bei mir immerhin 'nur' 12 Sekunden)
Danke & Grüße ... Kiffi
Re: SaveImage() als PNG extrem langsam?
Verfasst: 06.04.2013 23:10
von RSBasic
Komisch, dauert tatsächlich länger: 8612 Millisekunden
Re: SaveImage() als PNG extrem langsam?
Verfasst: 06.04.2013 23:19
von STARGÅTE
Sehr interessant: 8860ms hier. sowohl x64 als auch x86
Und die CPU ist auch nicht gerade im ruhezustand.
Ich vermute einfach mal, dass das ein Iterationsproblem im PNG-Encoder ist, der verzweifelt versucht, eine günstige Komprimierung zu finden.
Im übrigen braucht auch GIMP 8 Sekunden! und da ist das Resultat noch schlecher (größer)
Re: SaveImage() als PNG extrem langsam?
Verfasst: 07.04.2013 11:39
von Lord
Auch PaintShopPro und IrfanView "denken" sehr lange,
bevor sie fertig sind. Wobei bei IrfanView beim "denken"
zugesehen werden kann.

Re: SaveImage() als PNG extrem langsam?
Verfasst: 07.04.2013 13:47
von NicTheQuick
Eigentlich ist es ja ziemlich logisch bei einem Bild mit weniger Entropie, dass der PNG-Encoder versucht größere gleichfarbige rechteckige Bereiche zu erkennen und so anzuordnen, dass sie möglichst effektiv gespeichert werden können. Bei einem reinen Zufallsbild oder gar eine Fotografie, bei der so gut wie jeder benachbarte Pixel eine andere Farbe hat als der aktuelle, merkt der Algorithmus sehr schnell, dass da nicht viel zum Zusammenfassen ist und braucht somit auch nicht zu berechnen wie er die einfarbigen Bereiche anordnen sollte, weil es eben keine gibt, außer die Pixel selbst. Und viel mehr macht PNG ja auch nicht.
In dem gegebenen Bild aus dem Archiv "pic.zip", sind viele weiße Bereiche, die der PNG-Encoder gut komprimieren kann. Ich denke am Auswählen der Rechtecke braucht er am längsten. Das JPEG-LL (lossless) Verfahren würde hier bei jedem Bildmaterial gleich schnell sein, weil das Pixel- und Zeilenweise arbeitet, genau wie TIFF auch.
Ich hätte es jetzt ja noch gerne auf meiner Linux-Maschine getestet, ich sitze gerade aber leider an nem Windows-Netbook.