方法 : イメージを回転、反転、および傾斜させる
更新 : 2007 年 11 月
元のイメージの左上隅、右上隅、および左下隅に対して、それぞれ変換後の点を指定して、イメージを回転、反転、および傾斜させることができます。この 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 As 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)
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);
コードのコンパイル方法
前述の例は Windows フォームと一緒に使用することが想定されていて、Paint イベント ハンドラのパラメータである PaintEventArgse が必要です。Stripes.bmp は、必ずシステム上で有効なイメージへのパスに置き換えてください。