我面临一个问题,可能很容易解决,但我做不对:
我有两个QImages,一个固定大小的背景图像imgBg,和第二个QImage imgFg,应该使用仿射变换进行转换,然后绘制(并剪裁)在背景图像上。
仿射变换如下:
只要我只改变参考位置,一切都正常。当使用缩放和/或旋转时,图像也被正确地缩放和旋转,但它没有放置在正确的位置(前景图像的中心与参考点不匹配)。 变换管道有问题吗?我犯了错误吗?
仿射变换如下:
- 围绕其原点缩放图像(均匀缩放)
- 围绕其原点旋转图像
- 将前景图像平移到背景图像上的某个参考位置,使前景图像中心位于参考位置。
// Setup transform
QTransform trans;
trans.translate(-imgFg.width()/2, -imgFg.height()/2); // move center of image to origin
trans.scale(scaleFac, scaleFac);
trans.rotate(angleDegrees);
trans.translate(imgFg.width()/2, imgFg.height()/2);
// Transform foreground image
imgFg = imgFg.transformed(trans);
// Paint on background image
QPointF referencePos(imgBg.width()/3, imgBg.height()/2); // some reference position
QPainter painter(&imgBg);
painter.drawImage(referencePos - QPointF(imgFg.width()/2, imgFg.height()/2), imgFg);
只要我只改变参考位置,一切都正常。当使用缩放和/或旋转时,图像也被正确地缩放和旋转,但它没有放置在正确的位置(前景图像的中心与参考点不匹配)。 变换管道有问题吗?我犯了错误吗?