bild zu groß, pixmap.scale(sx,sy) dauert zu lange

Alles rund um die Programmierung mit Qt
Antworten
Maik
Beiträge: 45
Registriert: 29. Mai 2006 10:54

bild zu groß, pixmap.scale(sx,sy) dauert zu lange

Beitrag von Maik »

hi,

möchte ein bild zoomen. wenn ich dafür scale neutze dauert das zu lange.
bild hat knapp 5mb. gibt es ne möglichkeit einzelne zoomstufen zwischenzuspeichern und die dann jeweils abzurufen? wenn ja wie speicher ich die .png mit scalefaktor?

oder bietet qt noch andere möglichkeiten? wer hat damit schon erfahrung.

und nein, kann das bild nicht kleiner machen :-)

oder wäre es besser und schneller ein tiff bild zu benutzen?

danke

gruß maik
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

Ich habe sowas noch nicht probiert, aber im Tutorial arbeiten die mit adjustSize()... und wenn du ein Label benutzt klappt wahrscheinlich auch resize().. probier einfach mal ein bisschen.
Maik
Beiträge: 45
Registriert: 29. Mai 2006 10:54

Beitrag von Maik »

damit ändere ich die größe das widgets o. ausschnitts z.bsp. aber das bild an sich wird nicht gezoomt.

trotzdem danke
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dann halte dir ein paar QImages mit verschiedenen Skalierungen im Speicher vor. Ein Bild von 1MB auf 0.8MB zu skalieren geht wesentlich schneller als es von %MB auf 0.8MB zu skalieren. Also quasi dein eigener Pixmapcache.
oder wäre es besser und schneller ein tiff bild zu benutzen?
Bitte überleg dir nochmal was Du da geschrieben hast !
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Maik
Beiträge: 45
Registriert: 29. Mai 2006 10:54

Beitrag von Maik »

was ist an der frage verwirrend?

vielleicht kann man mit tiff bildern besser umgehen?! zwar brauche ich dann tiffio aber das wäre ja nicht das problem. oder was gefällt dir an dem satzteil nicht?

und zu dem setLimitCache. wie benutze ich das? so gehts z.bsp. nicht:

if (!QPixmapCache::find("Karte", Karte)) {
QPixmapCache::setCacheLimit(6000);
Karte.load("/home/bachmann/img/map/munchen.png");
QPixmapCache::insert("Karte", Karte);}
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Maik hat geschrieben:was ist an der frage verwirrend?

vielleicht kann man mit tiff bildern besser umgehen?! zwar brauche ich dann tiffio aber das wäre ja nicht das problem. oder was gefällt dir an dem satzteil nicht?
Im Speicher (QImage/QPixmap) gibts kein tiff und kein png...

Was soll der Codeausschnitt sagen? Ich dachte du willst skalieren? Dann sollte man die unterschiedlichen Skalierungen dort ablegen, oder? Und was heisst 'geht nicht'?

"The cache becomes full when the total size of all pixmaps in the cache exceeds cacheLimit(). The initial cache limit is 1024 KByte (1 MByte); it is changed with setCacheLimit(). A pixmap takes roughly width*height*depth/8 bytes of memory."
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Maik
Beiträge: 45
Registriert: 29. Mai 2006 10:54

Beitrag von Maik »

der code sollte zeigen das ich den cachelimit nicht ändern kann. bzw nicht so wie ich mir das vorstelle. und wenn ich den nicht einmal ändern kann brauche ich meine scalebilder nicht in ihm speichern. also muss ich zu aller erst den code den ich da gezeigt hatte zum laufen bringen oder nicht!

und kannst du mir sagen wieso ich den cache nicht hochsetzen kann? oder verstehe ich das mit dem setCacheLimit falsch?

danke
maik
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie erkennst du dass der Cache nicht hochgesetzt wurde? mal mit http://doc.trolltech.com/3.3/qpixmapcache#cacheLimit nachgeschaut oder wird dein Bild einfach nicht gespeichert?
Wie gross ist Dein Bild überhaupt? Deswegen habe ich Dir den letzten Satz aus der Doku kopiert...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Hm... manchmal liest man wirklich Beiträge, da kann man sich nur wegschmeißen...

@Maik:
Um die Bildanzeige zu skalieren, braucht man keine Operationen auf dem QImage, sondern QWMatrix und QPainter...

P.S.

Die Idee mit TIFF ist Nobelpreisverdächtig...
:)
Antworten