ホーム ] TIPS ウィンドウズ系 ] TIPS グラフィックス系 ] TIPS メルチメディア系 ] TIPS 理数系 ] TIPS 総覧 ]

上へ
G0001 色名一覧
G0002 アルファブレンド
G0003 カラーマップを作る
G0101 曲線の数値化
G0102 曲線長を測る
G0103 曲線の接線・法線
G0104 曲線のスムージング
G0201 図形の回転
G0202 領域の認識
G0301 文字の線形変換
G0302 文字の自由変形
G0303 文字の極座標変換
G0304 曲線に沿った文字列
G0305 飾文字-中抜き
G0306 飾文字-縁取り
G0307 飾文字-ドロップダウンシャドウ
G0501 画像の線形変換
G0502 画像の透明化
G0503 画像の任意形状切出し
G0504 画像の回転
G0505 画像の高速処理化

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()