元のイメージの左上隅、右上隅、および左下隅に対して、それぞれ変換後の点を指定して、イメージを回転、反転、および傾斜させることができます。この 3 つの変換後の点によって、元の四角形イメージを平行四辺形に変換するアフィン変換が決定されます。
たとえば、元のイメージが、左上隅が (0, 0)、右上隅が (100, 0)、左下隅が (0, 50) にある四角形だとします。これらの 3 つの点を、次に示す変換後の点に割り当てるとします。
変換前の点 | 変換後の点 |
---|---|
左上隅 (0, 0) | (200, 20) |
右上隅 (100, 0) | (110, 100) |
左下隅 (0, 50) | (250, 30) |
元のイメージと、変換後の平行四辺形を次の図に示します。元のイメージは傾斜され、反転され、回転され、そして平行移動されています。元のイメージの上辺は、変換前は x 軸に沿っていましたが、変換後は点 (200, 20) と点 (110, 100) を結ぶ直線になっています。元のイメージの左辺は、変換前は y 軸に沿っていましたが、変換後は点 (200, 20) と点 (250, 30) を結ぶ直線になっています。
上の図で示したイメージを作成するコード例を次に示します。
' New Point(200, 20) = destination for upper-left point of original
' New Point(110, 100) = destination for upper-right point of original
' New Point(250, 30) = destination for lower-left point of original
Dim destinationPoints As Point() = { _
New Point(200, 20), _
New Point(110, 100), _
New Point(250, 30)}
Dim image = New Bitmap("Stripes.bmp")
' Draw the image unaltered with its upper-left corner at (0, 0).
e.Graphics.DrawImage(image, 0, 0)
' Draw the image mapped to the parallelogram.
e.Graphics.DrawImage(image, destinationPoints)
[C#]
Point[] destinationPoints = {
new Point(200, 20), // destination for upper-left point of
// original
new Point(110, 100), // destination for upper-right point of
// original
new Point(250, 30)}; // destination for lower-left point of
// original
Image image = new Bitmap("Stripes.bmp");
// Draw the image unaltered with its upper-left corner at (0, 0).
e.Graphics.DrawImage(image, 0, 0);
// Draw the image mapped to the parallelogram.
e.Graphics.DrawImage(image, destinationPoints);
同じ変換を写真に適用した場合を次の図に示します。
同じ変換をメタファイルに適用した場合を次の図に示します。