1

我正在尝试在现有画家上绘制旋转图像。每次的旋转和位置都会不同。旋转工作正常,但我似乎无法预测位置。奇怪的是,如果我绘制文本而不是图像,它的工作方式会有所不同。

文本似乎从 'point' 开始的 LEFT BOTTOM 开始绘制,而图像从 'point' 的 LEFT TOP 开始。但是在旋转之后,我不明白图像会发生什么......

例子:

QPoint point = QPoint( 80, 200 );
painter->rotate(45);

painter->drawImage(point, QImage("/srv/...."));  // i can't predict where this goes
painter->drawText(point, "Rotated text");        // but I can predict exactly where this goes!

我在想也许我需要使用 translate(x,y) 以防我使用 drawImage,但我不知道我需要使用哪种 x 和 y,具体取决于旋转及其工作原理用drawText很好。

4

2 回答 2

2

对于任何阅读的人-我又一次脑漏...我应该首先将坐标系转换到我希望图像结束的位置,然后旋转然后在 0,0 处绘制图像...

代码变为:

painter->translate(80,200);  // this will be our point of origin
painter->rotate(45);         // now do the rotation at this point

painter->drawImage(0,0,QImage("/srv/....")); // since we're already at our point enter 0,0
于 2013-02-14T20:42:23.103 回答
0

对于转换,您需要执行以下操作,例如:

painter->translate(m_bound.width()/2.0,m_bound.height()/2.0);
painter->rotate(m_angle);
painter->translate(-m_bound.width()/2.0,-m_bound.height()/2.0);
//.... Paint what you want as normal ....//

它只是平移到左上角,然后旋转并最终平移回原始位置。
请注意,这种转换是矩阵,因此影响是相反的(line1:向后平移,line2:旋转,line3:平移到左上角)

于 2017-02-13T03:52:31.100 回答