System.Drawing.Drawing2D.Matrix クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

このクラスは Matrix 、幾何学的な変換を表す 3 x 3 のアフィン 行列をカプセル化します。

GDI+ では、アフィン変換をオブジェクトに Matrix 格納できます。 アフィン変換を表す行列の 3 列目は常に (0, 0, 1) となるので、Matrix オブジェクトを構築する際には、最初の 2 列 に 6 つの数値のみを指定します。 このステートメント Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) は、次の図に示すマトリックスを構築します。

マトリックス。

Note

.NET 6 以降のバージョンでは、この種類を 含む System.Drawing.Common パッケージは、Windows オペレーティング システムでのみサポートされています。 クロスプラットフォーム アプリでこの種類を使用すると、コンパイル時の警告と実行時の例外が発生します。 詳細については、「System.Drawing.Common は Windows でのみサポートされています」を参照してください

複合変換

複合変換とは、変換を順番に実行していく、変換のシーケンスのことです。 次の一覧に示す行列と変換について考えてみましょう。

Matrix 変換
行列 A 90 度回転
行列 B x 方向に 2 倍に拡大
行列 C y 方向に 3 単位平行移動

行列 [2 1 1] で表される点 (2, 1) から始めて、A を乗算し、次に B、C を乗算すると、点 (2, 1) は一覧表示された順序で 3 つの変換を受けます。

[2 1 1]ABC = [-2 5 1]

複合変換の 3 つの部分を 3 つの独立した行列に格納する代わりに、A、B、C を乗算して、複合変換全体を格納した 1 つの 3×3 行列を取得することもできます。 ABC = D と仮定します。 次に、D を乗算した点は、点に A、B、C を乗算した結果と同じ結果になります。

[2 1 1]D = [-2 5 1]

次の図は、A、B、C、D の行列を示したものです。

行列 A、B、C、および D

複合変換の行列は、個々の変換行列を乗算することで形成できます。つまり、1 つの Matrix オブジェクトには、アフィン変換の任意のシーケンスを格納することができます。

注意事項

複合変換では、順序が重要となります。 通常、回転、拡大縮小、平行移動という順序での操作は、スケーリング、回転、平行移動という順序での操作でと同じではありません。 同様に、行列の乗算においても順序が重要となります。 通常、ABC は BAC と同じではありません。

Matrix クラスには、複合変換を構築するためのメソッドがいくつか用意されています (MultiplyRotateRotateAtScaleShear、および Translate)。 次の例では、最初に 30 度回転させた後、y 方向へ 2 倍に拡大し、x 方向に 5 単位平行移動する複合変換の行列を作成しています。

Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);
Dim myMatrix As New Matrix()
myMatrix.Rotate(30)
myMatrix.Scale(1, 2, MatrixOrder.Append)
myMatrix.Translate(5, 0, MatrixOrder.Append)