Fading A Bitmap / PictureBox

This short bit of code shows how to fade a picture inside a PictureBox using a few simple WinAPI methods.


The code works by creating a memory compatible DC and Bitmap to that of the picture within the PictureBox. The PictureBox is then cleared and has it's background set to various shades of gray (eventually black) - the bitmap is then 'blitted' to the PictureBox and each pixel is 'AND'ed with the background colour to achieve the fade effect.

' Form1 with a PictureBox (picture1) and a command button (command1)
private Declare Function BitBlt Lib "gdi32" (byval hDestDC as Long, _
    byval x as Long, byval y as Long, byval nWidth as Long, _
    byval nHeight as Long, byval hSrcDC as Long, byval xSrc as Long, _
    byval ySrc as Long, byval dwRop as Long) as Long
private Declare Function CreateCompatibleDC Lib "gdi32" _
    (byval hdc as Long) as Long
private Declare Function CreateCompatibleBitmap Lib "gdi32" _
    (byval hdc as Long, byval nWidth as Long, byval nHeight as Long) _
        as Long
private Declare Function DeleteDC Lib "gdi32" (byval hdc as Long) as Long
private Declare Function DeleteObject Lib "gdi32" _
    (byval hObject as Long) as Long
private Declare Function SelectObject Lib "gdi32" (byval hdc as Long, _
    byval hObject as Long) as Long
private Declare Sub Sleep Lib "kernel32" (byval dwMilliseconds as Long)
private Const SRCAND = &H8800C6
private Const SRCCOPY = &HCC0020
private Sub Command1_Click()
    Dim lDC as Long
    Dim lBMP as Long
    Dim W as Integer
    Dim H as Integer
    Dim lColor as Long
    Screen.MousePointer = vbHourglass
    W = ScaleX(Picture1.Picture.Width, vbHimetric, vbPixels)
    H = ScaleY(Picture1.Picture.Height, vbHimetric, vbPixels)
    ' Create Memory Compatible Bitmap to that in Picture1
    lBMP = CreateCompatibleBitmap(Picture1.hdc, W, H)
    ' Create Compatible DC in memory
    lDC = CreateCompatibleDC(Picture1.hdc)
    ' Select the Bitmap into the memory DC
    Call SelectObject(lDC, lBMP)
    BitBlt lDC, 0, 0, W, H, Picture1.hdc, 0, 0, SRCCOPY
    ' Quickly clear the Picture in Picture1
    Picture1 = LoadPicture("")
    for lColor = 255 to 0 step -3
        ' set the backcolor to a gray scale -> black
        Picture1.BackColor = RGB(lColor, lColor, lColor)
        ' Copy the bitmap into the picturebox 'AND' with the backcolor
        BitBlt Picture1.hdc, 0, 0, W, H, lDC, 0, 0, SRCAND
        ' Pause for a bit
        Sleep 15
    ' Clear up our DC's and Bitmaps
    Call DeleteDC(lDC)
    Call DeleteObject(lBMP)
    Screen.MousePointer = vbDefault
End Sub

Download Zipped Project Files (3k)


  • Question

    Posted by Legacy on 03/13/2003 12:00am

    Originally posted by: saeed

    Good STuff

    How would you go about gradually fading the forground to the color of back group ?

  • cool code

    Posted by Legacy on 03/07/2003 12:00am

    Originally posted by: sadashiva

    any modification to the code so that the same effect can be obtained using img control

  • nice and useful code

    Posted by Legacy on 07/04/2002 12:00am

    Originally posted by: Ranganath

    Very good and intresting code

  • for image control

    Posted by Legacy on 12/01/2000 12:00am

    Originally posted by: vishal

    the demo is very interesting and can the effect be achieved on the image control and how?

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date