共用方式為


座標系統類型

GDI+ 使用三個座標空間:世界、頁面和裝置。 世界座標是用來建立特定圖形世界的模型座標,這是您傳遞至 .NET Framework 中方法所用的座標。 頁面座標是指繪圖介面所使用的座標系統,例如表單或控制項。 裝置座標是要繪製的實體裝置 (例如螢幕或紙張) 所使用的座標。 您呼叫 myGraphics.DrawLine(myPen, 0, 0, 160, 80)時,您傳遞至 DrawLine 方法的點 ((0, 0)(160, 80)) 位於世界座標空間中。 GDI+ 在畫面上繪製線條之前,座標會通過一連串的轉換。 一個轉換,稱為世界轉換,將世界座標轉換成頁面座標,另一個轉換稱為頁面轉換,將頁面座標轉換成裝置座標。

轉換和座標系統

假設您想要使用座標系統,其原點位於工作區主體,而不是左上角。 例如,假設您想要原點距離工作區左邊緣 100 像素,以及工作區頂端 50 像素。 下圖顯示這類座標系統。

座標系統的圖例。

您進行呼叫 myGraphics.DrawLine(myPen, 0, 0, 160, 80)時,您會得到下圖所示的行。

座標系統中線條的圖例。

三個座標空間中線條端點的座標如下所示:

座標空間 端點座標
World (0, 0) 至 (160, 80)
(100, 50) 至 (260, 130)
裝置 (100, 50) 至 (260, 130)

請注意,頁面座標空間的原點位於工作區左上角;這一律會是這種情況。 另請注意,由於測量單位是像素,因此裝置座標與頁面座標相同。 如果您將量值單位設定為像素以外的單位 (例如英吋),則裝置座標會與頁面座標不同。

將世界座標對應到頁面座標的世界轉換會保留在 Graphics 類別的 Transform 屬性中。 在上述範例中,世界轉換是 x 方向的 100 個單位,Y 方向為 50 個單位。 下列範例會設定 Graphics 物件的世界轉換,然後使用該 Graphics 物件繪製上圖所示的線條:

myGraphics.TranslateTransform(100, 50);
myGraphics.DrawLine(myPen, 0, 0, 160, 80);
myGraphics.TranslateTransform(100, 50)
myGraphics.DrawLine(myPen, 0, 0, 160, 80)

頁面轉換會將頁面座標對應至裝置座標。 Graphics 類別提供用來操作頁面轉換的 PageUnitPageScale 屬性。 Graphics 類別也提供兩個唯讀屬性,DpiXDpiY,以檢查顯示裝置的水準和垂直點。

您可以使用 Graphics 類別的 PageUnit 屬性來指定像素以外的量值單位。

注意

您無法將 PageUnit 屬性設定為 World,因為這不是實體單位,而且會造成例外狀況。

下列範例會繪製一條從 (0, 0) 到 (2, 1n),其中點 (2, 1n) 是右邊的 2 英吋,從點 (0, 0) 向下 1 英吋:

myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

注意

如果您在建構畫筆時未指定畫筆寬度,上述範例會繪製一英吋寬的線條。 您可以在 Pen 建構函式的第二個自變數中指定畫筆寬度:

Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);
Dim myPen As New Pen(Color.Black, 1 / myGraphics.DpiX)

如果我們假設顯示裝置在水準方向有每英吋 96 點,而垂直方向為每英吋 96 點,則上一個範例中的線條端點在三個座標空間中有下列座標:

座標空間 端點座標
World (0, 0) 至 (2, 1)
(0, 0) 至 (2, 1)
裝置 (0, 0) 至 (192, 96)

請注意,由於世界座標空間的原點位於工作區左上角,頁面座標與世界座標相同。

您可以將世界轉換與頁面轉換結合,以達成各種效果。 例如,假設您想要使用英吋做為測量單位,而且您希望座標系統的原點距離工作區左邊緣 2 英吋,以及距離工作區頂端 1/2 英吋。 下列範例會設定 Graphics 物件的世界和頁面轉換,然後繪製從 (0, 0) 到 (2, 1):

myGraphics.TranslateTransform(2, 0.5f);
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.TranslateTransform(2, 0.5F)
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

下圖顯示線條和座標系統。

線條和座標系統的圖例。

如果我們假設顯示裝置在水準方向有每英吋 96 點,而垂直方向為每英吋 96 點,則上一個範例中的線條端點在三個座標空間中有下列座標:

座標空間 端點座標
World (0, 0) 至 (2, 1)
(2, 0.5) 至 (4, 1.5)
裝置 (192, 48) 至 (384, 144)

另請參閱