Hallo zusammen,
von der Sache her ist mein Problem trivial. Ich möchte unter Qt ( Qt
Creator 3.1.0 ) ein QPixmap drehen. Folgende Code verwende ich dazu:
Mein QPixmap dreht sich auch, aber nich so wie ich möchte. Ich möchte,
dass es sich um den eigenen Mittelpunkt dreht. Tuts halt nicht.
Den Code habe ich mir mehr doder weniger aus einem Beispiel von Qt
geholt. Kann dazu einer was sagen?
Gruß Pit
Pit schrieb:> Mein QPixmap dreht sich auch, aber nich so wie ich möchte. Ich möchte,> dass es sich um den eigenen Mittelpunkt dreht. Tuts halt nicht.
So, so. Und was tut's dann?
> Den Code habe ich mir mehr doder weniger aus einem Beispiel von Qt> geholt. Kann dazu einer was sagen?
Vielleicht der Autor von dem Beispiel?
Die Dokumentation von QPixmap::translate() hast du aber schon gelesen?
Oder? Es würde mich nicht wundern, wenn die Drehung vollkommen richtig
gemacht wird, aber weil dann das Ergebnis von translate() i.A. größer
sein muss als die Original-Pixmap ("...the smallest pixmap that contains
all the transformed points of the original pixmap..."), wird beim
Zuweisen auf deine QPixmap mit vorgegebener Größe der linke obere Teil
des Ergebnisses herausgeschnitten.
Anbei mal 3 Bilder. BildOriginal ist ohne eine Drehung, die anderen zwei
jeweils mit Drehung. Der kleine weiße Punkt istdie Koordinate zum
Zeichnen des Bildes
So hab jetzt mal wieder etws Zeit, um mich um das Drehen zu kümmern.
Rolf Magnus schrieb:> Die Antwort von tictactoe klingt plausibel. Das wird> höchstwahrscheinlich der Grund sein.
Ich denke, dass dies nicht das Problem ist. Schließlich wird das Bild
vollständig gezeichnet, es wird nur einfach nicht um den Bildmittelpunkt
gedreht.
Das Pixel verloren gehen hatte ich mal bei einer vorherigen
Implementation gesehen. Von daher bin ich mal froh, dass ich nun das
Bild vollständig zeichnen und drehen kann, halt nur nicht um den
gewünschten Punkt.
Habe nur mal kurz gegoogled. Paßt vielleicht das hier?:
The usual reason an object rotates around its top left point, rather
than its centre, is because it has its dimensions defined with 0,0 at
the top left, rather than being in the centre of the object.
You haven't shown what the 'canvas' object is, so assuming it's
something like a QGraphicsRectItem, you'd need to declare its top left,
width, height as -x/2, -y/2, width, height to ensure that the centre
point of the object is at 0,0. Then when you rotate the object, it will
rotate about its centre.
Pit schrieb:> Das Pixel verloren gehen hatte ich mal bei einer vorherigen> Implementation gesehen. Von daher bin ich mal froh, dass ich nun das> Bild vollständig zeichnen und drehen kann, halt nur nicht um den> gewünschten Punkt.
Ok, ich dachte, das Problem sei, daß das Bild beim drehen kleiner wird,
um alles unterzubringen.
Was mir noch nicht ganz klar ist: Warum hat bei deinen Beispielbildern
das um 40° gedrehte Bild eine ganz andere Auflösung und ein anderes
Seitenverhältnis wie die beiden anderen?
Mathias O. schrieb:> Schonmal probiert mit QTransform?
Wenn der obige Code für dich nicht als "mit QTransform" zählt, was dann?
Rolf Magnus schrieb:> Wenn der obige Code für dich nicht als "mit QTransform" zählt, was dann?
Hoppala. Hast Recht. Als ich bei der Zeile war, hab ich mir anscheinend
gerade den Schweiß weggewischt.
Wenn der TO mal das Originalbild oder die Funktion zum erstellen, posten
würde, könnte man selber ein wenig rumprobieren.
Thread erstellt am: 25.06.2015 um: 08:17
Frage korrekt beantwortet am: 25.06.2015 um: 08:37 (20 min später)
Jetzt haben wir: 07.07.2015 07:31 und das Thema ist immer noch nicht
durch?
Gegeben: Bild 100x100 Pixel mit Kreis, Mittelpunkt: 50,50
Nun Rotation: 45°
Bild: 141x141 Pixel, Mittelpunkt 71,71
Entweder das neue Bild um jeweils 20 Pixel an allen vier Rändern
'croppen', da im erweiterten Bereich keine sinnvollen Daten sind.
Oder aber die neue drawPixmap x,y Koordinate um -20,-20 anpassen.
Fettich!
(Alle Pixelangaben brutal gerundet)
Pit schrieb:> Der Code ist doch vollständig
Davon ist er weit weg. Um daraus ein minimales, tatsächlich
vollständiges und compilierfähiges Programm zu machen, brauchst du
noch zweimal soviel Code zusätzlich.
Glaubst du ernsthaft, daß sich jemand hier die Mühe macht, den zu
schreiben?
Pit schrieb:> Rolf Magnus schrieb:>> Die Antwort von tictactoe klingt plausibel. Das wird>> höchstwahrscheinlich der Grund sein.>> Ich denke, dass dies nicht das Problem ist. Schließlich wird das Bild> vollständig gezeichnet, es wird nur einfach nicht um den Bildmittelpunkt> gedreht.
Deine Beispielbilder sehen aber doch ganz genau so aus, also ob dies das
Problem ist. Probier's mal mit einem Bild, das nicht einen einheitlich
schwarzen Hintergrund hat, einem Foto-Ausschnitt zum Beispiel.
Es wird ja nicht nur der lila Dreiviertelkreis gedreht, sondern jedes
Pixel. Wenn ein Eck-Pixel um 40 Grad gedreht wird, wandert es aber aus
dem Bild hinaus. Und wie in der Doku steht, wird das Bild dann
vergrößert. Wenn du von dem Ergebnis eine fixe Größe links oben
rausschneidest, sieht das ganze natürlich aus, als ob nicht um das
Zentrum gedreht worden wäre.