QGraphicsView kompletten Bereich speichern

Alles rund um die Programmierung mit Qt
Antworten
Natter
Beiträge: 8
Registriert: 30. Januar 2013 11:12

QGraphicsView kompletten Bereich speichern

Beitrag von Natter »

Ich möchte gern einige Transformationen mit Bildern durchführen. Allerdings kommt es dabei zu Problemen, weil diese zwischenzeitlich zu groß werden (QImage out of memory - Fehler). Dieses Problem gibt es bei QGraphicsView scheinbar nicht (dort kann ich die Transformationen durchführen, und mir das Ergbebnis mit Scroll-Leisten ansehen). Ich dachte schon, damit wäre mein Problem gelöst - allerdings habe ich keine Möglichkeit gefunden, den kompletten Inhalt des QGraphicsView in eine Datei zu schreiben. Es ist kein Problem mit render() den angezeigten Bereich über einen Painter in ein Bild zu zeichnen und dieses dann zu speichern. Aber wie kommt man an Bereiche die nicht im Sichtfeld liegen? Ich kann auch nicht einfach auf die zugrundeliegende Scene zurückgreifen, weil die eigentlichen Transformationen auf QGraphicsView angewendet werden.
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: QGraphicsView kompletten Bereich speichern

Beitrag von veeman »

Sollte eigentlich mit render() gehen, ggf musst du das Quell- und Zielrechteck selbert berechnen und an die Funktion übergeben.

Mfg veeman
Natter
Beiträge: 8
Registriert: 30. Januar 2013 11:12

Re: QGraphicsView kompletten Bereich speichern

Beitrag von Natter »

Hmm, also zumindest hab ich das nicht hinbekommen. Ich weiß auch nicht genau, wie ich überhaupt an die Koorinaten von QGraphicsView rankommen sollte, daher waren meine bisherigen versuche mit festen Koordinaten (magic numbers). Dabei wurde allerdings der nicht sichtbare Bereich in der QPixmap weiß gezeichnet.

Ich habe dieses Wochenende den Laptop mit meinem Programm nicht zur Hand, daher kann ich das gerade nicht nochmal ausprobieren bzw. meinen Code posten. Ich habe aber noch eine andere Idee. Bisher bin ich dabvon ausgegangen, dass ich das Bild nicht mittels QGraphicView soweit verkleinern kann, dass man alles sieht, weil dann beim Speichern in einem hochaufgelösten Bitmap Informationen verloren gehen würden. Inzwischen bin ich mir da aber nicht mehr so sicher - eventuell arbeitet render() ja auch mit den Original-Grafiken, wendet auf diese die Transformationen an, und berechnet so jedes Pixel für die Zieldatei (also nicht einfach ein hochskalieren des sichtbaren Bildes). Das wäre dann für mich auch eine gangbare Lösung - kann ich aber erst am Montag testen, oder kann jemand genaueres dazu sagen?
Natter
Beiträge: 8
Registriert: 30. Januar 2013 11:12

Re: QGraphicsView kompletten Bereich speichern

Beitrag von Natter »

Mal ein kurzes Update. Ich habe das Problem vorerst so gelöst, dass der zu speichernde Bereich mittels Zoom ins sichtbare Fenster angepasst wird. Wie vermutet kommt es dabei offensichtlich nicht zu Qualitätsverlusten wenn der QGraphicsView-Bereich kleiner ist, als die Ausgabedatei. Das reicht für meine Zwecke vorerst aus, weshalb ich mich erstmal nicht weiter damit beschäftigt habe, wie ich den kompletten Bereich speichern kann (interessieren würde es mich aber trotzdem). Vielleicht komme ich später nochmal darauf zurück (wobei ich letztlich wohl eher eine Variante basteln will, bei der man einen quadratischen Bereich auswählen kann). Bis dahin hab ich aber noch jede Menge anderer Nüsse zu knacken.
Antworten