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 の行列を示したものです。
複合変換の行列は、個々の変換行列を乗算することで形成できます。つまり、1 つの Matrix オブジェクトには、アフィン変換の任意のシーケンスを格納することができます。
注意事項
複合変換では、順序が重要となります。 通常、回転、拡大縮小、平行移動という順序での操作は、スケーリング、回転、平行移動という順序での操作でと同じではありません。 同様に、行列の乗算においても順序が重要となります。 通常、ABC は BAC と同じではありません。
Matrix クラスには、複合変換を構築するためのメソッドがいくつか用意されています (Multiply、Rotate、RotateAt、Scale、Shear、および 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)
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示