次の方法で共有


座標系の種類

GDI+ では、ワールド、ページ、デバイスの 3 つの座標空間が使用されます。 ワールド座標は、特定のグラフィック ワールドをモデル化するために使用される座標であり、.NET Framework のメソッドに渡す座標です。 ページ座標は、フォームやコントロールなど、描画サーフェスで使用される座標系を参照します。 デバイス座標は、画面や用紙など、描画される物理デバイスで使用される座標です。 呼び出しを myGraphics.DrawLine(myPen, 0, 0, 160, 80)すると、DrawLine メソッドに渡すポイント ((0, 0)(160, 80)) がワールド座標空間に配置されます。 GDI+ が画面に線を描画する前に、座標は一連の変換を通過します。 ワールド変換と呼ばれる変換の 1 つはワールド座標をページ座標に変換し、もう 1 つの変換はページ変換と呼ばれ、ページ座標をデバイス座標に変換します。

変換と座標系

左上隅ではなく、クライアント領域の本体に原点がある座標系を操作するとします。 たとえば、原点をクライアント領域の左端から 100 ピクセル、クライアント領域の上端から 50 ピクセルにする場合などです。 次の図は、このような座標系を示しています。

座標系の図。

呼び出しを myGraphics.DrawLine(myPen, 0, 0, 160, 80)すると、次の図に示す行が表示されます。

座標系内の線の図。

3 つの座標空間内の線の端点の座標は次のとおりです。

座標空間 エンドポイント座標
世界 (0, 0) ~ (160, 80)
ページ (100, 50) ~ (260, 130)
デバイス (100, 50) ~ (260, 130)

ページ座標空間は、クライアント領域の左上隅に原点があることに注意してください。これは常に当てはまるでしょう。 また、測定単位はピクセルであるため、デバイス座標はページ座標と同じであることにも注意してください。 測定単位をピクセル (インチなど) 以外に設定した場合、デバイスの座標はページ座標とは異なります。

ワールド座標をページ座標にマップするワールド変換は、Transform クラスの Graphics プロパティに保持されます。 前の例では、ワールド変換は 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 クラスは、ページ変換を操作するための PageUnit プロパティと PageScale プロパティを提供します。 Graphics クラスには、ディスプレイ デバイスの 1 インチあたりの水平方向および垂直方向のドットを調べるための 2 つの読み取り専用プロパティ (DpiXDpiY) も用意されています。

PageUnit クラスの Graphics プロパティを使用して、ピクセル以外の測定単位を指定できます。

PageUnit プロパティを Worldに設定することはできません。これは物理ユニットではないため、例外が発生します。

次の例では、(0, 0) から (2, 1) までの線を描画します。ここで、ポイント (2, 1) は右に 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)

ペンを作成するときにペンの幅を指定しない場合、前の例では 1 インチ幅の線が描画されます。 2 番目の引数で、Pen コンストラクターにペンの幅を指定できます。

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

ディスプレイ デバイスが水平方向に 96 ドット/インチ、垂直方向に 96 ドット/インチであると仮定した場合、前の例の線の終点は、3 つの座標空間に次の座標を持っています。

座標空間 エンドポイント座標
世界 (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 ドット/インチであると仮定した場合、前の例の線の終点は、3 つの座標空間に次の座標を持っています。

座標空間 エンドポイント座標
世界 (0, 0) ~ (2, 1)
ページ (2,0.5) ~ (4, 1.5)
デバイス (192,48) ~ (384, 144)

こちらも参照ください