Qt图像缩放、旋转

今天需要将QLabel显示的图像进行缩放旋转,同时图像显示过大时可以使用鼠标拖动来显示图像遮盖部分,鼠标滚轮也可以放大缩小图像。不过拖动部分还没有完成,以QLabel中心点的缩放旋转正常,鼠标滚轮缩小也没问题,放大就出了点问题,现在先来记录一下思路,后续再慢慢完善。

1、旋转部分

四个旋转角度:0、90、180、270,左旋90和右旋180是同一角度(右旋90和左旋180也是同一角度),定义一个rotateAngle变量保存当前旋转的角度,这样不管左旋操作还是右旋操作,下一下旋转的角度都可以轻松计算出来。接下来是如何实现图像的旋转,

一种方式是使用QMatrix:

    QMatrix matrix;
    matrix.rotate(90);
    pixmap = pixmap.transformed(matrix, Qt::SmoothTransformation);

但是这样的话旋转中心是改不了的(我暂时不知道如何改变)。

另一种方式是使用QPainter:

    QPainter painter(&src);
    QMatrix matrix;
    matrix.rotate(90);
    pixmap = pixmap.transformed(matrix, Qt::SmoothTransformation);
    QPoint point;   
    //通过旋转中心计算绘制起始点
    ..........................
    painter.drawPixmap(point, pixmap);

2、缩放部分

缩放显示需要通过缩放比例去计算图像大小,以及通过缩放中心计算显示的区域,最后通过QPainter去将计算后的图像绘制出来。我现在就卡在鼠标滚动时放大图像的计算,不知道是缩放中心还是限制区域除了问题,现在有点懵,准备回去吃饭了......

Qt图像缩放、旋转