2010-06-07 103 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

在這裏你正在失去座標。 您正在繪製原始圖像或縮放圖像的圖像? 謝謝希望可以幫助你...