Qpainter drawimage旋转不可预测的位置

时间:2013-02-14 08:32:10

标签: qt qpainter

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

文本似乎以“点”开始绘制LEFT BOTTOM,而图像以“点”处的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一起正常工作。

2 个答案:

答案 0 :(得分:2)

对任何人来说 - 我还有另一个脑漏......我应该首先将坐标系转换到我想让图像结束的地方,然后旋转然后将图像绘制在0,0 ... < / p>

代码变为:

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

答案 1 :(得分: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 ....//

它只是转换为左上角,然后旋转,最后转换回原始位置 请注意,此变换是矩阵,因此影响相反(第1行:平移,第2行:旋转,第3行:转换为左上角)