2010-06-07 74 views
3

首先感谢您的时间在一个真实的图像坐标读我的问题:-)如何知道从缩放图像

我有一个原始图像(W“:2124,H”:3204)和缩放的相同图像(w:512,h:768)。宽度比率为4.14(rw),高度比率为4.17(rh)。

我想知道原始图像中的坐标(x',y'),当我收到缩放图像(x,y)中的坐标时。我使用公式:x'= x * rwy'= y * rh。但是当我画一条线时,或者一个矩形总是出现一个移位,当xy更高时移位。

请有谁知道如何转换坐标而不失准确性?

提前致谢! 奥斯卡。

回答

4

或者您可以使用QTransform::quadToQuad创建转换,并用它来绘制点,rects,线条等:

QVector<QPointF> p1; 
p1 << scaledRect.topLeft() << scaledRect.topRight() << scaledRect.bottomRight() << scaledRect.bottomLeft(); 
QVector<QPointF> p2; 
p2 << originalRect.topLeft() << originalRect.topRight() << originalRect.bottomRight() << originalRect.bottomLeft(); 
QTransform::quadToQuad(p1, p2, mappingTransform); 
... 
QPointF originalPoint = mappingTransform.map(scalePoint); 
+0

哇...真的你的解决方案对我来说是完美的:-)我使用它,并且工作非常好。谢谢!!! – ocell 2010-06-07 19:11:26

+0

不客气。如果使用quadToQuad创建一些奇特的转换(如扭曲或翻转),请小心。它可能无法创建转换。一定要检查我在示例中跳过的函数返回值。 – 2010-06-07 19:27:23

+0

感谢您的建议,但我正在做非常简单的转换:从缩放图像到实际图像。 – ocell 2010-06-08 10:40:04

2

使用更多小数点,例如。 4.1484375和4.171875,否则你会得到5px的差异。

+0

感谢这么用力咀嚼,我试图用一个双数据类型的所有操作和工作正常:-) – ocell 2010-06-07 09:59:53

+0

没问题 - 容易代表。只记得接受答案:) – agsamek 2010-06-07 10:07:48

+0

对不起,但另一个答案比在Qt中实现它更好。感谢所有! – ocell 2010-06-07 19:12:47

1

始终使用十进制points.Else你会得到转变 在这里还可以看到

为X '= 512 * 4.14 = 2119.68 和y'= 768 * 4.17 = 3202.56

在这里你正在失去坐标。 您正在绘制原始图像或缩放图像的图像? 谢谢希望可以帮助你...