|
VB.NET2005 TIPS / グラフィックス系 |
|
G0504 画像の回転 |
|
最終更新:2006/11/12 再掲 |
●解説
G0501 画像の線形変換での画像回転は、線形変換をBitmap(Image)のメソッドとして実現したが、ここでは、Graphicsのマトリクス変換を使った例を紹介する。
●原理
G0201 図形の回転 で紹介した方法を画像に適用する。Matrixオブジェクトにて座標に関する行列変換を実装する。
●方法
局所的な回転ができる RotateAt()メソッドを利用する。この方法では、G0501のように回転後の座標位置などを事前に求める必要がなくなる。
●実例
ビットマップをその中心で任意に回転して、フォーム中央に表示する例である。
始めに、画像をロードしておく
bmp = Bitmap.FromFile("XXXXXXX")
W = bmp.Width
H = bmp.Height
TrackBarにて回転角度を任意に設定する。Rは角度(度)
R = TrackBar1.Value
Me.Invalidate()
フォームのPaintイベントにて、
Dim g As Graphics = e.Graphics
Dim cmx As Matrix = g.Transform
Dim pmx As New Matrix()
g.ResetTransform()
pmx.RotateAt(R, cp, Drawing2D.MatrixOrder.Append)
g.Transform = pmx
g.InterpolationMode = InterpolationMode.HighQualityBicubic
'補間モード指定
g.DrawImage(bmp, cp.X - W / 2, cp.Y - H / 2)
'回転前のフォーム上での画像の左上の点を指定
pmx.Dispose()
g.Transform = cmx
フォームのResizeイベントにて
Dim pw As Single = picM.Left + picM.Width + 30
cp = New PointF(Me.ClientSize.Width / 2,
Me.ClientSize.Height / 2)
Me.Invalidate()
|