Imports System.Drawing.Drawing2D Public Class Form1 Dim Pos As Point Dim Alpha As Integer Dim xx As Integer Dim yy As Integer Dim x_ As Integer Dim y_ As Integer Private Sub Form1_Load_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.BackColor = Color.Black Timer1.Interval = 20 End Sub Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
If MouseButtons = Windows.Forms.MouseButtons.Left Then
図形をたくさん描画しつつ、それらを別々に回転させたりするようなプログラムを作ったことがあります。まったく同じ状況かどうかはわかりませんが、私の環境ではDoubleBufferedプロパティの設定だけで特にちらつきませんでしたね。(背景にグリッド線を描画していました) ※私の環境=Windows VistaやWindows XP SP2。場合によってはPCのスペック違いによる影響もあるかもしれませんね。
分類:[.NET]
初めまして、よろしくお願いします
クリックした位置を中心に図形を回転させながら描画して大きくしていくプログラムを
作っています。そこで再描画するときに背景が白ならば問題なかったのですが黒にするとRefresh()やInvalidate()を使った時に図形がかなりちらついてしまいます。
検索して対策として載っていたダブルバッファリングも試してみたのですが効果はありませんでした。
ちらつかないようにする改善策などありましたら教えて貰えないでしょうか?お願いします。
Imports System.Drawing.Drawing2D
Public Class Form1
Dim Pos As Point
Dim Alpha As Integer
Dim xx As Integer
Dim yy As Integer
Dim x_ As Integer
Dim y_ As Integer
Private Sub Form1_Load_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.BackColor = Color.Black
Timer1.Interval = 20
End Sub
Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
If MouseButtons = Windows.Forms.MouseButtons.Left Then
Timer1.Enabled = True
Pos = Me.PointToClient(Windows.Forms.Cursor.Position)
Alpha = 255
xx = 0
yy = 0
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Alpha = Alpha - 5
If Alpha <= 0 Then
Timer1.Enabled = False
End If
xx = xx + 10
yy = yy + 10
Invalidate()
End Sub
Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
x_ = xx / 2
y_ = yy / 2
Dim g As Graphics = e.Graphics
g.SmoothingMode = SmoothingMode.AntiAlias
Dim Aqua As New Pen(Color.FromArgb(Alpha, Color.Aqua), 10)
Dim ro As New Matrix()
Dim Rp As New PointF(Pos.X, Pos.Y)
ro.RotateAt(xx, Rp)
g.Transform = ro
g.DrawRectangle(Aqua, Pos.X - x_, Pos.Y - y_, xx, yy)
ro.Dispose()
g.ResetTransform()
g.Dispose()
End Sub
End Class