Category: Graphics Code  ·  Originally posted January 25, 2009  ·  Last updated February 1, 2011

Real-Time Image Blending/Transparency (VB6)

Real-time transparency has become so commonplace in modern games and PC applications that it’s almost taken for granted.  However, the specific formula that performs this now-ubiquitous effect is worth understanding.

Transparency is simply a weighted average between the color values of two pixels.  As an example, consider the following two colors:

Pure red, or RGB(255, 0, 0)

Pure blue, or RGB(0, 0, 255)

At 50% transparency – or a pure blending between these two colors – we would simply add the individual color amounts together and divide by two.  This gives us a new color -

Purple, or RGB(127, 0, 127)

Not entirely surprising, eh?

The effect is certainly more impressive when applied pixel-by-pixel across an entire image, as the downloadable project demonstrates.

Squall and Rinoa meet a large flower (insert Garden joke of your choice :)

Squall and Rinoa meet a large flower (insert Garden joke of your choice :)

This site - and its many free downloads - are funded by donations from visitors like you.
Please consider a small donation to fund server costs and to help me support my family.
Even $1.00 helps. Thank you!

 

bookmark and share this article

Email this article to a friend Print a copy of this article Subscribe to article comments Bookmark this article on Delicious Submit this article to reddit Submit this article to Digg Submit this article to StumbleUpon Share this article on Facebook Tweet this article

related articles

Discussion (4 comments)

Public comments are closed for this article. Private comments may be submitted using this link.
  1. your code is excelent… but i need ask these: how can i show 1 image transparency in UC(UserControl)?
    i’m sorry and thanks

    By Joaquim | March 27, 2009, 5:51 pm |
  2. Hi Joaquim – I’m afraid I don’t fully understand your question. The DIB code above should work on any control that has an hDC property. You’ll have to tweak the functions themselves a bit (as they currently accept Picture Boxes, then extract the hDC from there), but there is no reason that you can’t use DIB sections to modify the pixel data returned from any hDC.

    By Tanner | March 28, 2009, 1:17 pm |
  3. i was asking if i can do it in image(pixel by pixel) or in UC(object itself)?
    thanks

    By Joaquim | November 18, 2009, 4:17 pm |
  4. Yes, can use the effect on a non-DC object. However, you’ll need to use the GetDC() API call to convert the object’s hWnd into a DC. Try this:

    Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long

    When you’re finished with the DC, use ReleaseDC to free up resources:

    Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hdc As Long) As Long

    By Tanner | November 19, 2009, 3:21 pm |