5,548,129 members and growing! (20,868 online)
Email Password   helpLost your password?
Multimedia » GDI+ » General     Intermediate

GraphicsDoubleBuffer

By VectorX

This is a simple class designed to remove flickering from painting controls with gdi+
VB, Windows, .NET, Visual Studio, Dev

Posted: 27 Jul 2004
Updated: 27 Jul 2004
Views: 41,247
Bookmarked: 14 times
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
15 votes for this Article.
Popularity: 3.90 Rating: 3.32 out of 5
2 votes, 13.3%
1
2 votes, 13.3%
2
1 vote, 6.7%
3
3 votes, 20.0%
4
7 votes, 46.7%
5

Introduction

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.

Code

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

Start by declaring a constructor to the 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.

Example 1:
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()

Resources

Conclusion

Well this concludes my simple double buffering class. If you use this class properly, it can be a vital resource to you. Latez, VectorX

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

VectorX


A little bit about me? Well I love to program, draw and invent new concepts. I am currently building a new programming language called master c and i'm also finishing up my new web server called FWS.

http://www.codevendor.com
Occupation: Architect
Company: The Code Project
Location: United States United States

Other popular GDI+ articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 17 of 17 (Total in Forum: 17) (Refresh)FirstPrevNext
Subject  Author Date 
GeneralVery nicememberVaclavAntosik12:49 27 Nov '07  
GeneralAre there a faster vb .net grapihcsmembermasterdima11:33 21 Jun '07  
GeneralRe: Are there a faster vb .net grapihcs [modified]memberVectorX16:03 21 Jun '07  
GeneralIt's a bit slow, is there a faster waymembermasterdima13:54 17 Jun '07  
GeneralRe: It's a bit slow, is there a faster waymemberVectorX16:00 17 Jun '07  
GeneralRe: It's a bit slow, is there a faster waymembermasterdima18:18 17 Jun '07  
Generalthanksmembersuchinoko19:14 23 May '07  
GeneralThanksmembernetislander10:37 19 Mar '07  
Questionwhat about the SetStyles method ?memberalpha_centurian18:45 4 Sep '06  
GeneralThe really old daysmemberGiles21:44 28 Jul '04  
Generalvoid xbios(26) ?memberKochise22:13 28 Jul '04  
GeneralRe: void xbios(26) ?memberGiles12:25 29 Jul '04  
Generalor you could justmemberAllen Anderson15:30 28 Jul '04  
GeneralRe: or you could justmemberVectorX17:36 28 Jul '04  
GeneralRe: or you could justmemberMatthew Adams9:09 30 Jul '04  
GeneralRe: or you could justmemberVectorX11:16 30 Jul '04  
GeneralRe: or you could justmemberRhy Mednick7:12 3 Aug '04  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 27 Jul 2004
Editor: Nishant Sivakumar
Copyright 2004 by VectorX
Everything else Copyright © CodeProject, 1999-2008
Web10 | Advertise on the Code Project