![]() |
Multimedia »
GDI+ »
General
Intermediate
GraphicsDoubleBufferBy VectorXThis is a simple class designed to remove flickering from painting controls with gdi+ |
VB, Windows, .NET, Visual Studio, Dev
|
|
Advanced Search |
|
|
|
||||||||||||||||
This is a simple class i designed to remove flickering from painting controls with gdi+. The class removes flickering by double buffering the drawing. It draws on a separate bitmap canvas file. Once all drawing is complete, you can then push the drawing to the main drawing canvas all at once. This will kill most if not all flickering the drawing produces.
Below is the simple class:
Public Class GraphicsDoubleBuffer
Private P_Canvas As Bitmap
Public Property [Canvas]() As Bitmap
Get
Return P_Canvas
End Get
Set(ByVal Value As Bitmap)
P_Canvas = Value
End Set
End Property
Public Sub New(ByVal CanvasWidth As Integer,
ByVal CanvasHeight As Integer)
P_Canvas = New Bitmap(CanvasWidth, CanvasHeight)
End Sub
Public Function Store() As Graphics
Dim g As Graphics = Graphics.FromImage(P_Canvas)
Return g
End Function
Public Sub Paint(ByVal Where As Object)
Dim g As Graphics = Where.CreateGraphics()
g.SmoothingMode = SmoothingMode.None
Dim g2 As Graphics = Graphics.FromImage(P_Canvas)
g2.SmoothingMode = SmoothingMode.None
g.DrawImage(P_Canvas, 0, 0)
g.Dispose()
g2.Dispose()
End Sub
Public Sub [Dispose]()
P_Canvas.Dispose()
End Sub
End ClassTo use this class in your custom control add the following code to your project. Dim g As New GraphicsDoubleBuffer(ClientRectangle.Width,
ClientRectangle.Height)
g.Store()
g.Paint(Me)
g.Dispose()
GraphicsDoubleBuffer() Class. Pass the the constructor the drawing dimensions of your canvas or form. Next use store() as your new gdi+ graphics object. You can do this several ways.Dim g2 as graphics = g.store()
g2.FillRectangle(New SolidBrush(Color.black), New Rectangle(20, 20, 20, 20))Example 2:g.store.FillRectangle(New SolidBrush(Color.black),
New Rectangle(20, 20, 20, 20))After you have drawn to the store() graphics object, you then must push it to your main drawing canvas like so: g.paint(Me)
"Me" must be the user control or form. After that we dispose() of the drawing object to clear it from memory.
g.dispose()
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 27 Jul 2004 Editor: Nishant Sivakumar |
Copyright 2004 by VectorX Everything else Copyright © CodeProject, 1999-2009 Web11 | Advertise on the Code Project |