QImage lädt jpg nicht

Alles rund um die Programmierung mit Qt
Antworten
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

QImage lädt jpg nicht

Beitrag von ZSchneidi »

Siehe Post Nr. 8

Hi, ich probiere gerade ein wenig mit Bildverarbeitung rum, nicht spezielles nur simple Basis.

Habe jetzt ein minimalstes Tool, dass Bilddaten lesen und anzeigen kann.
An sich ja nicht schwer und da sollten sich auch nicht viele Fehler einschleichen können richtig ?

Falsch: ^^

Ich habe jetz mal den Speicherhunger des Tools beobachtet, was mich jetz doch etwas arg schockiert.

Das handeln eines 2,3 MB jpeg Bildes hat zur Folge, dass satte 30 - 40 MB in Speicher gepumpt werden. Da war ich erstmal etwas erstaunt, aber eher ungläubig.

Ich hab dann mal ein Beispiel der Doku selbst nachgestellt und an sich war das nicht viel anders.

Das dropsite Example dass erstmal nicht viel anderes macht bleibt da in seinem Hunger aber doch arg bequemer.

Ich hab dann mal einfach rumprobiert und mir mal den byteCount() vom QImage ausgeben lassen, da wird mir stehts das ca. 1,3 fache an Byte ausgegeben, die das Bild eigentlich groß ist.

Meine Frage an euch, habt ihr ähnliche Probleme schon beobachten können ? Was muss ich evtl. beachten oder bedenken, bei der verarbeitung von Bildmaterial ? Das ist mir noch doch recht neues Gebiet.

Es kann ja nicht der Fall sein, dass beim öffnen eines Bildes der Speicherbedarf durchaus von 12 MB auf 80 MB hochschnellt.

Gibt es evtl. Maßnahmen oder Hilfmittel um speicherfresser zu lokalisieren ? Wie geht ihr dabei vor, wenn euch die Software so abdriftet ?

Ich danke euch für jeden Tip.

Ciao
Zuletzt geändert von ZSchneidi am 18. April 2010 16:25, insgesamt 2-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie groß ist das Bild denn nun?
1Pixel belegen 4 Byte.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Beitrag von ZSchneidi »

Ok, an sich geb ich dir recht.

Das Testbild is 3088 * 2056 Pixel groß, das sind

6348928 Pixel zu je 4Byte = 25.395.712 Byte

Beim öffnen landen diese dann komplett im Speicher.

Ich orientiere mich momentan am Speicherverbrauch anderer Viewer. Der von ACDSee braucht da tatsächlich nur ca. 3MB.

Welche Möglichkeiten habe ich also die Bildinformationen klein zu halten ?
Ich hab das zumindest noch nie so erlebt, dass die tatsächliche größe des Bildes im speicher landet.

Wie würdet ihr das angehen, um sowas zu vermeiden?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Die einzigste Möglichkeit die ACDSee hat ist das komplette Bild zu laden und dann runterzuskalieren.

/edit: Direkt skalieren sollte mit Qt4.6 gehen: http://doc.trolltech.com/4.6/qimagereader.html
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Beitrag von ZSchneidi »

Ok, sowas in der art dachte ich mir schon, anders kann ichs mir auch nicht erklären.

Danke für den Tip ich werd mir das mal angucken.

Mal sehen ob ich so besser klar komm.
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Wenn das Bild angezeigt wurde, landete es vorher zu 100% im Speicher. Weil so funktioniert halt ein Computer ;)
Angaben zum Speicherverbrauch sind immer mit Vorsicht zu genießen. Einiger Speicher wird von mehreren Programmen gleichzeitig genutzt. Aber welches Tool nun welchen Speicher anzeigt der wie benutzt wird... frag lieber nicht, das weiß eh keiner ;)

Wenn dein Bild nun mal unkomprimiert 10MB groß ist, brauchst du auch 10MB an RAM.
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Beitrag von ZSchneidi »

Hehehe ja danke :wink:

Ich hatte vorher mal die reelle größe ausrechnen sollen, dann hätte ich es mir zumindest besser erklären können ^^

Was mich jetzt aber beruhig ist, dass wenn ich das Bild runterskaliere auf eine größe die dem aktuellen Bildschirm entspricht, dann spare ich zumindest eine menge platz.

Ich hab aber mal nen Vergleich zu anderer teils wirklich guter Software gezogen, die verbraucht keines Falls weniger Speicher. die meisten Viewer sind irgendwie mit 70 - 90 MB dabei, also liege ich derzeit sogar unterm Schnitt. ^^ Selbst ohne die Skalierung.
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Beitrag von ZSchneidi »

Hi, bin jetz soweit fertig mit der basis, es tritt jetzt nur ein problem auf, dass ich mir nicht so recht erklären kann.

Ich habe jetzt mal nen ganz simplen bildbetrachter zusammen gebastelt.

Der funktioniert soweit auch perfekt, wie es zu erwarten wäre.

Wenn ich jetzt die app auf einem Rechner ohne Qt ausführen will, gibts probleme.

Die dlls sind alle da, die benötigt werden, das Programm startet auch ohne probleme.
Wenn ich jetzt ein bild zum darstellen laden will kommt erst der fehler.
Nach den bisherigen beobachtungen gibt es probleme beim erzeugen eines QImage aus einer jpeg datei.

Wenn ich das bild lade wird es einfach nicht dargestellt.

Anfangs lag der verdacht noch an anderer stelle, nach einigen Versuchen hat sich aber rausgestellt, dass ich zum Beispiel eine .png problemlos laden und darstellen kann.

Nach dem debuggen bin ich zu dem Punkt gelangt, dass das Problem wohl auf das erzeugen eines QImage aus dem dateipfad zurückzuführen ist. ich prüfe ganz einfach ob image.isNull() true ist, wenn ja soll das Programm an dem punkt die Verarbeitung abbrechen.

Wenn ich also ein .png lade gibt mir das QImage auf isNull() ein false, da konnte also ein Image erzeugt werden, während mir beim laden eines .jpg die isNull() ein true zurückgibt, konnte also kein Image erzeugen.

Das verstehe ich jetzt nicht wirklich, was an dem punkt schief gehen kann. Zumal ich das auf meiner entwicklungsmaschine ja ausgibig getestet hab, da läuft das alles perfect.

Irgendwie muss das auf eine fehlende Qt umgebung auf dem Rechner zurückzuführen sein.

Bin mit meinem doch recht bescheidenen Wissen jetz doch am Ende.

Habt ihr dazu irgend eine Idee, woran das liegen kann ?
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

guck dir mal die "supported image formats" an, QImageReader oder so gibt da eine einfache Liste aus.
eventuell fehlen dir die imageformats-plugins (dlls im imageformats verzeichnis). dazu steht auch was im assistant, ich hatte vor kurzem dasselbe problem, falls es bei dir auch daran liegt.

mfg,
julian
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Beitrag von ZSchneidi »

Ok dank dir war zumindest schonmal ein plausibler hinweis.
Hab jetz gerade mal getestet, hat leider noch nicht ganz zur lösung geführt.
Werd mir das morgen nochmal ansehen, da ich das für den wahrscheinlichsten fall halte.

Wenn es vielleicht noch andere Ursachen haben könnte, wäre ich für weitere Tips auf jeden fall noch dankbar.

Gut nacht euch und ein guten Start in die Woche :wink:
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es ist definitiv das Problem des fehlenden Plugins - wie jede Woche hier im Forum mindestens einmal... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Beitrag von ZSchneidi »

Ja jetz glaub ichs auch :wink:

Sorry jetz wo man weiß wonach man suchen muss gehts. Hatte es erst in dem plugin ordner versuche, aber vergessen, dass ich der App dann noch den Unterordner mitgebe muss, deswegen gings nicht.

Danke trotzdem

Nicht genervt sein Christian81 ^^ auch wenns immer wieder die selben blöden fragen sind :wink:
Antworten