Seite 1 von 1

image.scaled() funktioniert nicht richtig

Verfasst: 20. April 2011 12:21
von alexQt
Hallo,

ich möchte gerne ein bild kleiner machen und benutze
folgenden code:

Code: Alles auswählen

width=200
height=300
size = self._page.mainFrame().contentsSize()
self._page.setViewportSize(size)

image = QImage(self._page.viewportSize(), QImage.Format_ARGB32)
image = image.scaled(width, height, Qt.IgnoreAspectRatio, Qt.FastTransformation)
painter = QPainter(image)
self._page.mainFrame().render(painter)
painter.end()
die ausgabe ist ein bild mit der richtigen größe
200x300
nur ist das bild nicht skaliert, sondern es ist ein ausschnit
vom bild in der größe

ich benutze PyQt4 (python)

Gruß

Verfasst: 20. April 2011 15:19
von franzf
ERST deinen viewport in das Image rendern (da hat es noch die richtige Größe) und DANN skalieren. So wie du das jetzt machst, erstellst du ein Image in der passenden Größe, skalierst es (Ergebnis wie wenn du gleich ein QImage mit 200x300 erstellst) um dann zu rendern.
Ich hoffe du verstehst was ich meine.

Verfasst: 21. April 2011 13:05
von alexQt
ja ich verstehe dich:

Qt.IgnoreAspectRatio

Code: Alles auswählen

width=200
height=300
size = self._page.mainFrame().contentsSize()
self._page.setViewportSize(size)

image = QImage(self._page.viewportSize(), QImage.Format_ARGB32)
painter = QPainter(image)
self._page.mainFrame().render(painter)
painter.end() 

image = image.scaled(width, height, Qt.IgnoreAspectRatio, Qt.FastTransformation)
ich arbeite mit pyqt und habe zu dem Qt.IgnoreAspectRatio, Qt.FastTransformation noch nicht die richtige lösung gefunden.

das mag er so nicht!

Code: Alles auswählen

#        image = image.scaled(width,height,aspectRatioMode,transformMode); 
        
#        image = image.scaled(width, height)
#        image = image.scaled(width, height, Qt.IgnoreAspectRatio, Qt.FastTransformation)
#        image = image.scaled(width, height, Qt.AspectRatioMode aspectRatioMode = Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode = Qt.FastTransformation)
#        image = image.scaledToHeight(height, mode=Qt.FastTransformation)
#        image = image.scaledToWidth(width, mode=Qt.FastTransformation)
#        mode = QImage.ScaleMode() 
#        mode = QImage.ScaleFree
#        image = image.scale(width, height, QImage.ScaleFree)

Verfasst: 21. April 2011 13:25
von alexQt
alles klar habs!

Code: Alles auswählen

img = img.scaled(240, 1331,Qt.Qt.IgnoreAspectRatio, Qt.Qt.FastTransformation)