2009-11-23 193 views
2

我正在使用Graphics類繪製一系列Points。我正在從Point數組讀取數據。無論出於何種原因渲染的圖像是顛倒的(在X軸上翻轉)。有沒有簡單的方法告訴Graphics類繪製「顛倒」?非常感謝。在X軸上翻轉的C#GDI反轉圖形

+0

「在X軸上翻轉」和「顛倒」都意味着圖像在X軸(*沿* Y軸)上反射* – schnaader 2009-11-23 20:07:50

+0

oops。刪除了我的評論。不知道爲什麼我看錯了。 – meklarian 2009-11-23 20:10:43

回答

0

你應該注意到,大多數繪圖圖形的默認方位或方向系統從顯示器的頂部到顯示器的底部。爲了彌補這一點,您需要知道您的觀看區域的預期高度,然後從該高度減去您的座標。這將顛倒方向,並將相對於查看區域底部的數字進行設置。

假設您有兩個點,分別爲< x,y >和300(w)x 200(h)的視口。

{{0, 0}, {100, 200}} 

當在觀看區域,<的x,y >將被映射到< X,200-Y繪圖>。這給了我們以下幾點。

{{0, 200}, {100, 0}} 

也有機制來切換映射模式笛卡爾座標系的風格,這可能會匹配您的源數據,但通常是可以避免的,因爲它會重新映射其他一切已經默認定向補償。

如果這是您真正希望的,則Windows中的SetMapMode()函數可用於此目的。

SetMapMode() @ MSDN

這裏的P /調用該函數的簽名。 (從 pinvoke.net: setmapmode (gdi32)

[DllImport("gdi32.dll")] 
static extern int SetMapMode(IntPtr hdc, int fnMapMode); 

編輯:

有做到這一點,我個人還沒有試過另一種方式。

Graphics.TransformPoints Method @ MSDN

這允許您指定座標系和圖形對象將做映射爲您服務。在你的情況下,你可能希望以CoordinateSpace.World或CoordinateSpace.Page作爲第一個參數,而CoordinateSpace.Device作爲第二個參數。

+0

TransformPoints使生活變得簡單。謝謝! – GDIHelp 2009-11-23 20:44:31

1

這聽起來並不像是倒過來畫的,而是像倒過來一樣。

檢查您是否期望與正確來源的座標。默認情況下,屏幕左上方應爲0,0。

編輯:你應該能夠通過每個點改變y以彌補在繪製時使用的公式Y =高度 - Y.