Try put this in the constructor:
Public Sub New()
MyBase.New()
SetStyle(ControlStyles.DoubleBuffer, True)
SetStyle(ControlStyles.UserPaint, True)
SetStyle(ControlStyles.AllPaintingInWmPaint, True)
End Sub
Use the form SuspendLayout before drawing and ResumeLayout when done.
Get the image once from file and just keep it in memory instead of reloading from file every time.
Paint in the paint event instead of randomly when you like. Also, when you call this method to often and calling it before it could finish it starts to pile up and increasingly slowing down. It's like calling Invalidate instead of Redraw or Repaint immediately.
And have a look at these links for some ideas:
http://www.bobpowell.net/transcontrols.htm[
^]
How to Use Transparent Images and Labels in Windows Forms[
^]
Good luck!