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)
我在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)
一旦你已經在你的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屬性表示將世界座標映射到頁面座標的世界 轉換。
非常感謝Roger.You幫助了我很多,現在它可以工作!我希望我有足夠的聲望來投票您的答案。 :) – evanchai