共用方式為


座標系統類型

Windows GDI+ 使用三個座標空間:世界、頁面和裝置。 當您呼叫 myGraphics.DrawLine(&myPen, 0, 0, 160, 80)時,您傳遞至 Graphics::D rawLine 方法 (0, 0, 0) 和 (160, 80) 的點位於世界座標空間中。 GDI+ 在畫面上繪製線條之前,座標會通過一連串的轉換。 一個轉換會將世界座標轉換成頁面座標,另一個轉換會將頁面座標轉換為裝置座標。

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

包含標籤軸的視窗螢幕快照

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

上一個視窗的螢幕快照,但有一條藍線從原點延伸

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

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

 

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

將世界座標對應至頁面座標的轉換稱為 世界轉換,並由 Graphics 對象維護。 在上一個範例中,世界轉換是 x 方向的 100 個單位,Y 方向為 50 個單位。 下列範例會設定 Graphics 物件的世界轉換,然後使用該 Graphics 物件繪製上圖所示的線條。

myGraphics.TranslateTransform(100.0f, 50.0f);

myGraphics.DrawLine(&myPen, 0, 0, 160, 80);

將頁面座標對應至裝置座標的轉換稱為 頁面轉換 Graphics 類別提供四種方法來作和檢查頁面轉換:Graphics::SetPageUnitGraphics::GetPageUnitGraphics::SetPageScaleGraphics::GetPageScaleGraphics 類別也提供兩種方法:Graphics::GetDpiXGraphics::GetDpiY,以檢查顯示裝置的水準和垂直點。

您可以使用 Graphics 類別的 Graphics::SetPageUnit 方法來指定量值單位。 下列範例會繪製一條從 (0, 0) 到 (2, 1) 的線條,其中點 (2, 1) 位於右邊 2 英吋,而從點 (0, 0, 0) 向下 1 英吋。

myGraphics.SetPageUnit(UnitInch);

myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

注意

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

Pen myPen(Color(255, 0, 0, 0), 1/myGraphics.GetDpiX())

 

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

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

 

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

myGraphics.TranslateTransform(2.0f, 0.5f);
myGraphics.SetPageUnit(UnitInch);
myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

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

上一個視窗的螢幕快照,但寬度較寬,座標軸位於左邊,並以不同的方式標示

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

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