2013-12-17 78 views
0

我在C#中的WinFroms應用程序中繪製了一個矩形,我想在應用ScaleTransform後得到矩形的實際座標。縮放後的實際座標

Graphics g = e.Graphics; 
g.ScaleTransform(2.0F,2.0F,System.Drawing.Drawing2D.MatrixOrder.Append); 
g.DrawRectangle(pen, 20, 40, 100,100) 

回答

1

一旦你已經在你的Graphics對象設置ScaleTransform(或任何變換爲此事),你可以用它來改變你的矩形的點(或任何其他點)。

例如:

// your existing code 
Graphics g = e.Graphics; 
g.ScaleTransform(2.0F,2.0F,System.Drawing.Drawing2D.MatrixOrder.Append); 

// say we have some rectangle ... 
Rectangle rcRect = new Rectangle(20, 40, 100, 100); 

// make an array of points 
Point[] pPoints = 
{ 
    new Point(rcRect.Left, rcRect.Top),  // top left 
    new Point(rcRect.Right, rcRect.Top),  // top right 
    new Point(rcRect.Left, rcRect.Bottom), // bottom left 
    new Point(rcRect.Right, rcRect.Bottom), // bottom right 
}; 

// get a copy of the transformation matrix 
using (Matrix mat = g.Transform) 
{ 
    // use it to transform the points 
    mat.TransformPoints(pPoints); 
} 

注意上面的using語法 - 這是因爲,如MSDN說:

由於矩陣返回,並且由變換特性是 幾何副本變換,你應該處理矩陣,當你沒有 更需要它。

作爲一個略少羅嗦替代方法,可以使用Graphics類的TransformPoints方法(MSDN here)做同樣的事情 - 這樣構建如上貴點陣列,那麼就這樣做:

g.TransformPoints(CoordinateSpace.Page, CoordinateSpace.World, pPoints); 

MSDN描述了上述功能中使用的相關的座標空間:

GDI +使用三個座標空間:世界,頁面和設備。世界 座標是用於建模特定圖形的座標,並且是您傳遞給.NET Framework中方法的座標。頁面座標指的是一個 繪圖表面使用的座標系統,例如窗體或控件。設備座標是要繪製的物理設備使用的座標,如 屏幕或打印機。 Transform屬性表示將世界座標映射到頁面座標的世界 轉換。

+1

非常感謝Roger.You幫助了我很多,現在它可以工作!我希望我有足夠的聲望來投票您的答案。 :) – evanchai