Anzeige von ganz großen Bildern
Anzeige von ganz großen Bildern
Ein sehr unangenehmes Problem: (in Qt, befürchte ich...)
Die Bilddateien, die größer als ~100 MB sind, werden zwar durch QImageIO geladen, können aber nicht zu einem QPixmap konvertiert werden. Das Ergebnis der Konvertierung ist QPixmap::null.
Das Beispiel showImg von den Trolls stürzt einfach ab.
Ideen?
P.S. Das Ganze mit: Windows XP SP 2, Qt 3.3.3 Comm., VS 6.0
Die Bilddateien, die größer als ~100 MB sind, werden zwar durch QImageIO geladen, können aber nicht zu einem QPixmap konvertiert werden. Das Ergebnis der Konvertierung ist QPixmap::null.
Das Beispiel showImg von den Trolls stürzt einfach ab.
Ideen?
P.S. Das Ganze mit: Windows XP SP 2, Qt 3.3.3 Comm., VS 6.0
-
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Bilder mit 100MB??? Was sind das denn für riesige Teile? Naja, wenn es einen Qt Fehler gibt ist es das leichteste die Class zu vererben und die gebrauchten Funktionen selber zu schreiben, eben ohne Fehler. Wobei erhlich gesagr, kann ich mir das sehr gut vorstellen, das Qt bei 100MB Bilddatei motzt. Mein erster Gedanke war.... wer kommt auf solch eine Idee.
Zuletzt geändert von FlorianBecker am 4. Oktober 2005 10:49, insgesamt 1-mal geändert.
-
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Mh, wirklich groß.
Ja, wie gesagt, Fehler gehen mit Vererbung weg, wenn du das gut implementierst.
Ja, wie gesagt, Fehler gehen mit Vererbung weg, wenn du das gut implementierst.
Zuletzt geändert von FlorianBecker am 4. Oktober 2005 10:49, insgesamt 1-mal geändert.
-
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Vielleicht ist es auch falsch angesprochen. Könnte dir besser helfen, wenn du den Code posten könntest.
Zuletzt geändert von FlorianBecker am 4. Oktober 2005 10:49, insgesamt 1-mal geändert.
-
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Mh, bedeutet das, das der convert noch geht, die if geht noch und dann verabschidet sich das programm? was steht hinter if (pix.isNull() ) ???
wenn du da keinen return machst, und weiter funktionen mit pix verarbeitest kanns nur schief gehen.
wenn du da keinen return machst, und weiter funktionen mit pix verarbeitest kanns nur schief gehen.
Zuletzt geändert von FlorianBecker am 4. Oktober 2005 10:49, insgesamt 1-mal geändert.
Ja, da findet dann die Fehlerbehandlung statt und es stürzt auch nichts ab. aber das Pixmap hat die Nullgröße und kann nicht angezeigt werden.
Ich habe jetzt folgendes herausgefunden: es sind Win API Funktionen, die nicht laufen: Ich kriege mit GetLastError() folgende Fehelermeldung: Für diesen Befehl ist nicht genügend Speicher verfügbar.
In einem alten Programm von mir, das reines Win API benutzt, geht alles wunderbar. Keine Ahnung, was das sein kann.
Ich habe jetzt folgendes herausgefunden: es sind Win API Funktionen, die nicht laufen: Ich kriege mit GetLastError() folgende Fehelermeldung: Für diesen Befehl ist nicht genügend Speicher verfügbar.
In einem alten Programm von mir, das reines Win API benutzt, geht alles wunderbar. Keine Ahnung, was das sein kann.
-
- Beiträge: 40
- Registriert: 4. Oktober 2004 16:26
Das wuerde sich auch mit der Doku von QPixmap decken:
Ja, ich weiss, ich zitiere gerne die Doku, aber wenn nunmal alles drinsteht?!Note regarding Windows 95 and 98: on Windows 9x the system crashes if you create more than about 1000 pixmaps, independent of the size of the pixmaps or installed RAM. Windows NT-systems (including 2000, XP and following versions) do not have the same limitation, but depending on the graphics equipment the system will fail to allocate pixmap objects at some point (due to system running out of GDI resources).
Ja, das habe ich schon auswendig gelernt. Das ist aber nicht der Fall. Da die Resourcen da sind. Sonst würden die Win API Programme auch nicht funktionieren. Es werden die gleichen Funktionen aufgerufen:
CreateCompatibleBitmap(), CreateBitmap(), CreateDIBSection() usw.
Ausserdem ist bei mir nicht die Anzahl der Bilder entscheidend, sondern die Größe.
CreateCompatibleBitmap(), CreateBitmap(), CreateDIBSection() usw.
Ausserdem ist bei mir nicht die Anzahl der Bilder entscheidend, sondern die Größe.
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ich habe noch keine offizielle Lizenz gekauft... Benutze zurzeit eine inoffizielle 3.3.3 Comm.
So, nach einer langen Recherche habe folgendes herausgefunden:
Bei meinem Win API Programm habe ich folgendes übersehen: ich alloziere bei CreateCompatibleBitmap() nur soviel Speicher ich für die Anzeige brauche, also unabhängig von der Bildgröße. Richtwert ist dabei die Fenstergröße. Trolls allozieren aber den gesamten Bildspeicher mit CreateCompatibleBitmap() und das zieht nicht...
Ok, da muss ich mir wqas einfallen lassen...
So, nach einer langen Recherche habe folgendes herausgefunden:
Bei meinem Win API Programm habe ich folgendes übersehen: ich alloziere bei CreateCompatibleBitmap() nur soviel Speicher ich für die Anzeige brauche, also unabhängig von der Bildgröße. Richtwert ist dabei die Fenstergröße. Trolls allozieren aber den gesamten Bildspeicher mit CreateCompatibleBitmap() und das zieht nicht...
Ok, da muss ich mir wqas einfallen lassen...