SaveImage() als PNG extrem langsam?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

SaveImage() als PNG extrem langsam?

Beitrag 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
a²+b²=mc²
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SaveImage() als PNG extrem langsam?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SaveImage() als PNG extrem langsam?

Beitrag von RSBasic »

Ich habe mal endlich 5.11 (x86) installiert und es nochmal getestet.
Dauert bei mir insgesamt 1154 Millisekunden.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: SaveImage() als PNG extrem langsam?

Beitrag von STARGÅTE »

für ein Zufallsbild von 32MB dauert es bei mir 800ms als PNG zu speichern.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SaveImage() als PNG extrem langsam?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SaveImage() als PNG extrem langsam?

Beitrag 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
a²+b²=mc²
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SaveImage() als PNG extrem langsam?

Beitrag von RSBasic »

Komisch, dauert tatsächlich länger: 8612 Millisekunden
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: SaveImage() als PNG extrem langsam?

Beitrag 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)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Lord
Beiträge: 325
Registriert: 21.01.2008 19:11

Re: SaveImage() als PNG extrem langsam?

Beitrag von Lord »

Auch PaintShopPro und IrfanView "denken" sehr lange,
bevor sie fertig sind. Wobei bei IrfanView beim "denken"
zugesehen werden kann. :lol:
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: SaveImage() als PNG extrem langsam?

Beitrag 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.
Antworten