タイトル | : Re^2: 画像の角度変更 |
記事No | : 11314 |
投稿日 | : 2014/08/26(Tue) 11:04 |
投稿者 | : 魔界の仮面弁士 |
Windows フォーム アプリケーション版を作ってみました。
肝となるのは、DrawImage で画像を描画する前の 「RotateTransform(回転角) メソッド」での回転角指定と、 「TranslateTransform(dx, dy) メソッド」での原点座標変更です。
Public Class Form1 Private WithEvents Label1 As Label Private WithEvents TrackBar1 As TrackBar Private WithEvents PictureBox1 As PictureBox Private bmp As Bitmap
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load bmp = Me.Icon.ToBitmap() '回転させたい画像
'---> 以下の部分は、通常はデザイン時に設定しておく Label1 = New Label() TrackBar1 = New TrackBar() PictureBox1 = New PictureBox()
Label1.Text = 90 Label1.Width = 50 Controls.Add(Label1)
TrackBar1.BeginInit() TrackBar1.Minimum = 0 TrackBar1.Maximum = 360 TrackBar1.Value = 45 TrackBar1.TickFrequency = 15 TrackBar1.TickStyle = TickStyle.Both TrackBar1.LargeChange = 10 TrackBar1.SmallChange = 1 TrackBar1.SetBounds(55, 0, ClientRectangle.Width - 60, -1) TrackBar1.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right Controls.Add(TrackBar1) Label1.DataBindings.Add("Text", TrackBar1, "Value") TrackBar1.EndInit()
PictureBox1.BorderStyle = BorderStyle.Fixed3D PictureBox1.SetBounds(5, TrackBar1.Bottom + 5, ClientRectangle.Width - 10, _ ClientRectangle.Height - 10 - TrackBar1.Bottom) PictureBox1.Anchor = AnchorStyles.Top Or AnchorStyles.Right _ Or AnchorStyles.Bottom Or AnchorStyles.Left Controls.Add(PictureBox1) End Sub
Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed bmp.Dispose() '不要になった画像の後始末 End Sub
Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint '回転させるので、少し余白を設ける Dim margin As Single = 1.5F * Math.Max(bmp.Width, bmp.Height)
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed e.Graphics.TranslateTransform(margin, margin) '原点(0,0)座標を右下方向にずらす e.Graphics.RotateTransform(TrackBar1.Value) '回転させる e.Graphics.DrawImage(bmp, 0, 0) '画像を描画 End Sub
Private Sub TrackBar1_ValueChanged(sender As Object, e As EventArgs) Handles TrackBar1.ValueChanged PictureBox1.Invalidate() '回転角を変更したので、再描画を依頼する End Sub End Class
|