我面临一个可能很容易解决的问题,但我没有做对:我有两个 QImage,一个固定大小的背景图像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);
只要我只更改参考位置,一切正常。使用缩放和/或旋转时,图像也会正确缩放和旋转,但未放置在正确的位置(前景的图像中心与参考点不匹配)。转换管道有问题吗?我犯错了吗?