【问题标题】:Qpainter drawimage unpredicatable location with rotationQpainter drawimage不可预测的位置与旋转
【发布时间】:2013-02-14 08:32:10
【问题描述】:

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

文字似乎是从“点”开始绘制的左下角,而图像从“点”的左上角开始绘制。但是在旋转之后我不明白图像会发生什么......

例子:

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。

【问题讨论】:

    标签: qt qpainter


    【解决方案1】:

    致任何阅读的人-我又一次脑漏...我应该首先将坐标系转换到我希望图像结束的位置,然后旋转并在 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
    

    【讨论】:

      【解决方案2】:

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

      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: translate back, line2:旋转,第 3 行:平移到左上角)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-10
        • 2013-09-28
        • 2015-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多