DOBON.NET DOBON.NETプログラミング掲示板過去ログ

再描画のちらつき

環境/言語:[.net3.5_SP1 vb2008 xp_SP3]
分類:[.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
ちらつきと関係があるかどうかは分かりませんが、Paintイベントハンドラでe.GraphicsをDisposeしないでください。このGraphicsオブジェクトはこちらで作成、管理しているわけではありませんので、勝手に解放するのは危険です。
> 検索して対策として載っていたダブルバッファリングも試してみたのですが効果はありませんでした。

具体的にはどういう方法ですか?
FormのDoubleBufferedプロパティをTrueに設定ですか?

図形をたくさん描画しつつ、それらを別々に回転させたりするようなプログラムを作ったことがあります。まったく同じ状況かどうかはわかりませんが、私の環境ではDoubleBufferedプロパティの設定だけで特にちらつきませんでしたね。(背景にグリッド線を描画していました)
※私の環境=Windows VistaやWindows XP SP2。場合によってはPCのスペック違いによる影響もあるかもしれませんね。
  • 題名: Re[2]: 再描画のちらつき
  • 著者: 甘藍
  • 日時: 2009/02/24 15:43:11
  • ID: 24099
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
そうですよね、e.Graphicsはあらかじめよういされてましたね^^;
解放しないようにしておきました。

環境が原因かもしれないということでちょっと新しめのパソコンの方でDoubleBufferedを有効にしたところ
うまくいきました!やはりスペック不足か環境がわるかったのかもしれません
無事に解決しました。御回答ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板