Qt图像缩放、旋转

这篇博客记录了使用Qt进行图像缩放、旋转的实现过程。作者遇到的问题包括旋转角度的计算、图像旋转中心的设置、缩放比例的调整以及鼠标滚轮缩放时的焦点管理。目前,已经解决了图像拖动显示遮挡部分、滚轮缩放焦点乱跑和旋转不在中心的问题,但仍有鼠标滚轮缩放焦点恢复的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天需要将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去将计算后的图像绘制出来。我现在就卡在鼠标滚动时放大图像的计算,不知道是缩放中心还是限制区域除了问题,现在有点懵,准备回去吃饭了......

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值