次の方法で共有


イメージの回転、反転、および傾斜

元のイメージの左上隅、右上隅、および左下隅に対して、それぞれ変換後の点を指定して、イメージを回転、反転、および傾斜させることができます。この 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);

同じ変換を写真に適用した場合を次の図に示します。

同じ変換をメタファイルに適用した場合を次の図に示します。