Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z rotacją obrazka(QPixmap) [Qt]

Ostatnio zmodyfikowano 2012-08-06 22:30
Autor Wiadomość
anonim
Temat założony przez niniejszego użytkownika
Problem z rotacją obrazka(QPixmap) [Qt]
» 2012-08-06 18:47:12
Witam
Mam problem z obracaniem obrazka względem jego środka
Oto kod funkcji paintEvent:
C/C++
void PaintArea::paintEvent( QPaintEvent * e )
{
    QPainter painter( this );
    QMatrix mat = QMatrix().rotate( 20 );
    painter.setMatrix( mat );
    painter.drawPixmap( HH.XY.x(), HH.XY.y(), HH.pixPlane.width(), HH.pixPlane.height(), HH.pixPlane );
}
Obrazek obraca się, ale nie względem środka, tylko względem jakiegoś odległego punktu.
Pierwsze 3 linie są z tego, co udało mi się znaleźć w internecie, natomiast problemem jest ostatnia linijka,
ponieważ tego już nie udało mi się skopiować ;), a dokładniej pierwsze dwa argumenty.

Jakby ktoś mógł opisać mi co w nie wstawić byłbym bardzo wdzięczny

P-61861
DejaVu
» 2012-08-06 20:32:40
Strzelam:
C/C++
void PaintArea::paintEvent( QPaintEvent * e )
{
    QPainter painter( this );
    QMatrix mat = QMatrix().rotate( 20 ).translate( H.pixPlane.width() / 2, HH.pixPlane.height() / 2 );
    painter.setMatrix( mat );
    painter.drawPixmap( HH.XY.x(), HH.XY.y(), HH.pixPlane.width(), HH.pixPlane.height(), HH.pixPlane );
}
P-61874
anonim
Temat założony przez niniejszego użytkownika
» 2012-08-06 21:08:09
Dzięki, ale to nie działa
t.z.n. obraca pixmapę, ale względem punktu 0.0, to jest lewego, górnego narożnika
P-61881
DejaVu
» 2012-08-06 21:15:21
To sprawdź to:
C/C++
QMatrix mat = QMatrix().translate( H.pixPlane.width() / 2, HH.pixPlane.height() / 2 ).rotate( 20 );
P-61882
anonim
Temat założony przez niniejszego użytkownika
» 2012-08-06 21:21:56
niestety też nie działa, dalej obraca wokół 0.0
p.s. mamy 2 brązowe medale dzisiaj ;)
P-61883
DejaVu
» 2012-08-06 21:57:12
http://doc.qt.nokia.com/qt-maemo/qpainter.html

Użyj więc metody translate na obiekcie QPainter zanim ustawisz macierz rotacji. Niemniej jednak zawiodłem się :P Myślałem, że da radę wykonać macierz translacji + rotacji i potem wykonać operacje na obiekcie :)
P-61887
anonim
Temat założony przez niniejszego użytkownika
» 2012-08-06 22:02:13
C/C++
void PaintArea::paintEvent( QPaintEvent * e )
{
    QPainter painter( this );
    painter.translate( HH.pixPlane.width() / 2 + 1, HH.pixPlane.height() / 2 + 1 );
    QMatrix mat = QMatrix().rotate( HH.angle );
    painter.setMatrix( mat );
    painter.drawPixmap( HH.XY.x(), HH.XY.y(), HH.pixPlane.width(), HH.pixPlane.height(), HH.pixPlane );
}
o to chodzi?
P-61889
DejaVu
» 2012-08-06 22:09:35
Tak (ale wydaje mi się, że przesunięcia powinny być ujemne, a nie dodatnie).

/edit:
Poza tym polecam poczytać podstawy OpenGL-a. Zrozumiesz wówczas jak działają takie twory jak QPainter, a z tego co widzę w dokumentacji to nazewnictwo jest analogiczne do tego, które jest stosowane w OpenGL-u (do przekształceń sceny).
P-61891
« 1 » 2
  Strona 1 z 2 Następna strona