对于QT的图像来说,旋转并不是一个简单的函数,从实现来说,都相对复杂
实现旋转的两种方法
1.使用图像矩阵运算
QPixmap rotateImageWithTransform(const QPixmap &src, int angle)
{
QMatrix matri;
//迁移到中心
matri.translate(src.width()/2.0,src.height()/2.0);
//中心旋转
matri.rotate(angle);
//回退中心
matri.translate(-src.width()/2.0,-src.height()/2.0);
//执行坐标映射变化
//旋转后图像大小变化了 需要提前进行裁剪 如果在旋转后裁剪
//则需要计算使用三角函数计算
//中心偏移
int cubeWidth = qMin(src.width(),src.height());
QRect cubeRect(0,0,cubeWidth,cubeWidth);
cubeRect.moveCenter(src.rect().center());
qDebug()<<" cube "<<cubeRect
<<" src rect "<<src.rect();
auto retImg = src.copy(cubeRect);
retImg = retImg.transformed(matri,Qt::SmoothTransformation);
return retImg;
}
上面的代码,如果没有中间的矩形裁剪,则图像大小会按照对角线的变化而变化,除非是放在label中心,且label比他大很多,否则会出现晃动的感觉