Click here to Skip to main content
11,931,924 members (58,972 online)
Click here to Skip to main content
Add your own
alternative version


116 bookmarked

Per Pixel Alpha Blend

, 20 Apr 2001
Rate this:
Please Sign up or sign in to vote.
Demonstrates how to create per pixel alpha blending windows
  • Download source code with sample project - 188 Kb
  • Download ImgDecoder project - 14 Kb
  • Download some test images - 108 Kb
  • Introduction

    In this article I will give you some source code to create per pixel alpha blending windows.

    First, some images:

    Nice, heim?

    For creating a per-pixel window we are going to use:

    • One 24bit Bitmap with alpha channel.
    • The GDI function, UpdateLayeredWindow.

    24bit Bitmap with alpha channel

    The most tricky part of creating the bitmap is finding a simple file format that has an embedded alpha channel.

    The selected file format for the first incarnation of this article was PSP (Paint Shop Pro™ from Jasc®), but now the recommended file format has been changed to PNG (Portable Network Graphics).

    For loading PNG files I use the paintlib library. This library can also load files from PCX, TGA and TIFF formats.

    This demo application does not use paintlib directly; instead it uses a paintlib wrapper dll, ImgDecoder.Dll.

    For loading PSP files I've created a function called LoadPSPFileToDIB(PSPLoader.h/cpp).


    To use this function we must have a top-level window (in this sample this is implemented by the class CDummyDialog) with the extended style WS_EX_LAYERED set.

    Before we can pass the bitmap to the UpdateLayeredWindow function, we must pre-multiply the rgb channels with the alpha channel. For this you just have to call the PreMultiplyRGBChannels function (take a look at CPerpixelalphaDlg::DoLoadFile).

    From here on read the source code in CPerpixelalphaDlg::DoUpdateDummyDialog.

    Installing & Building

    1. Make sure you have the SDK for Windows® NT 5.0.
    2. Download and extract the source code of this article.
    3. Build and enjoy!

    If you want to build the ImgDecoder.Dll you also have to,

    1. Download paintlib and all the required libraries.
    2. Download the ImgDecoder project.
    3. Extract the ImgDecoder project to the paintlib library.
    4. Build the ImgDecoder project.
    5. Copy the resulting ImgDecoder.dll and ImgDecoder.lib to the bin directory of this article's demo application.


    1. You must mention my name in your application documentation/help box, something like, Portions © 2001 by Rui Godinho Lopes <>.
    2. I would appreciate it if you send me an email letting me know that you are using this code.
    3. I cannot be held responsible of any kind of data loss caused directly or indirectly by the use of this code - use it at your own risk.
    4. You cannot sell this code - this is free software.

    Don't forget if you have any constructive thoughts just email me!


    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

    Rui Lopes
    Web Developer
    Portugal Portugal
    No Biography provided

    You may also be interested in...

    Comments and Discussions

    QuestionHow can i do this in VB.NET ??? Pin
    3AgL3 DeeJay14-Jun-14 9:29
    member3AgL3 DeeJay14-Jun-14 9:29 
    GeneralMy vote of 5 Pin
    xueweizhong24-May-13 1:03
    memberxueweizhong24-May-13 1:03 
    Generalbeginner code... Pin
    kilt12-Oct-09 6:39
    memberkilt12-Oct-09 6:39 
    GeneralRe: beginner code... Pin
    Apuhjee23-Oct-09 5:24
    memberApuhjee23-Oct-09 5:24 
    Generalgreat tutorial ! some questions about this still Pin
    nirishere5-Sep-09 1:21
    membernirishere5-Sep-09 1:21 
    QuestionHow about clean WinAPI? Pin
    flaviusv12-Oct-08 11:16
    memberflaviusv12-Oct-08 11:16 
    AnswerRe: How about clean WinAPI? Pin
    David_LoveCpp13-May-10 17:22
    memberDavid_LoveCpp13-May-10 17:22 
    QuestionHow can I draw text on the alpha window? Pin
    Greg Ellis24-Aug-08 11:04
    memberGreg Ellis24-Aug-08 11:04 
    AnswerRe: How can I draw text on the alpha window? Pin
    Greg Ellis27-Aug-08 6:41
    memberGreg Ellis27-Aug-08 6:41 
    QuestionHow to use control in Layered windows Pin
    pherosiden29-Oct-07 19:29
    memberpherosiden29-Oct-07 19:29 
    QuestionUrgent (UNICODE) ! Pin
    Mutant X1233-Sep-07 21:29
    memberMutant X1233-Sep-07 21:29 
    GeneralTrouble with headers Pin
    Delfistyaosani28-Jun-07 21:52
    memberDelfistyaosani28-Jun-07 21:52 
    GeneralRe: Trouble with headers Pin
    kr.kim10-May-09 22:35
    memberkr.kim10-May-09 22:35 
    GeneralRe: Trouble with headers Pin
    Delfistyaosani11-May-09 4:29
    memberDelfistyaosani11-May-09 4:29 
    GeneralRe: Trouble with headers Pin
    kr.kim11-May-09 8:29
    memberkr.kim11-May-09 8:29 
    Generalundeclared identifiers Pin
    DV6413-Apr-07 9:09
    memberDV6413-Apr-07 9:09 
    GeneralMore Test Images Pin
    ninadpachpute12-Feb-07 23:05
    memberninadpachpute12-Feb-07 23:05 
    JokeGR8 STUFF!!! Pin
    DieZeL26-Jul-06 0:09
    memberDieZeL26-Jul-06 0:09 
    QuestionHow to add control to the dialog? Pin
    blackgole20-Jul-06 16:47
    memberblackgole20-Jul-06 16:47 
    GeneralEfficency of layered windows Pin
    jens pedersen9-Jun-06 4:40
    memberjens pedersen9-Jun-06 4:40 
    QuestionWriting Text Pin
    MrBlob31-May-06 15:29
    memberMrBlob31-May-06 15:29 
    AnswerRe: Writing Text Pin
    Manni Singh28-Mar-07 3:02
    memberManni Singh28-Mar-07 3:02 
    GeneralRe: Writing Text Pin
    Greg Ellis27-Aug-08 10:43
    memberGreg Ellis27-Aug-08 10:43 
    QuestionUpdateLayeredWindow Pin
    toto777toto9-Apr-06 17:14
    membertoto777toto9-Apr-06 17:14 
    AnswerRe: UpdateLayeredWindow Pin
    amit dedha28-Sep-06 7:42
    memberamit dedha28-Sep-06 7:42 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    | Advertise | Privacy | Terms of Use | Mobile
    Web01 | 2.8.151126.1 | Last Updated 21 Apr 2001
    Article Copyright 2001 by Rui Lopes
    Everything else Copyright © CodeProject, 1999-2015
    Layout: fixed | fluid