3

我正在尝试使用 quadToQuad 来转换坐标,以便我可以在调整大小的图像上绘制一个像素,并将该坐标传输回原始图像。

出于示例目的,我制作了 2 个矩形,但 quadToQuad 函数始终返回 false。

有谁知道它为什么失败?

QRectF origRect(QPointF(0, 0), QPointF(800, 800));

QRectF resizeRect(QPointF(0, 0), QPointF(400, 400));

QTransform mappingTransform;

qDebug() << (QTransform::quadToQuad(origRect, resizeRect, mappingTransform));

QPointF point = mappingTransform.map(QPointF(x, y));
4

1 回答 1

2

我想说的问题是quadToQuad将QPolygonF作为输入,而不是QRectF。在声明 mappingTransform 后尝试插入以下内容:

QPolygonF orig(origRect);
QPolygonF resize(resizeRect);
qDebug() << (QTransform::quadToQuad(orig, resize, mappingTransform));

挖掘我的一些源代码,这就是我计算一个变换的方式:

QRectF  tileBox(QPointF(w, s+D), QPointF(w+D, s));
QPolygonF   q0 = rectToQuad(tileBox);

QPolygonF   q1;
q1      <<  QPointF(0,0)
    <<  QPointF(1201,0)
    <<  QPointF(1201,1201)
    <<  QPointF(0, 1201);

QTransform  tileTransform;

bool ok = QTransform::quadToQuad(q0, q1, tileTransform);

我这样编码 rectToQuad:

QPolygonF   MyClass::rectToQuad(QRectF rect) {
QPolygonF   quad;

quad    << rect.topLeft()
    << rect.topRight()
    << rect.bottomRight()
    << rect.bottomLeft();

return quad;
}

所以我一定遇到了和你类似的问题。您可能希望尝试类似的方法。

于 2013-04-07T01:50:38.913 回答