Microsoft KB Archive/89375

{|
 * width="100%"|

Transparent Blts in Windows NT

 * }

Q89375

-

The information in this article applies to:


 * Microsoft Win32 Application Programming Interface (API), included with:
 * the operating system: Microsoft Windows NT, versions 3.1, 3.5, 3.51

-

SUMMARY
In order to perform a transparent blt in Microsoft Windows versions 3.0 and 3.1, the BitBlt function must be called two or more times. This process involves nine steps. (For more information on this process, see article Q79212 in the Microsoft Knowledge Base.)

Windows NT introduces a new method of achieving transparent blts. This method involves the use of the MaskBlt function. The MaskBlt function lets you use any two arbitrary ROP3 codes (say, SRCCOPY and BLACKNESS) and apply them on a pel-by-pel basis using a mask.

MORE INFORMATION
For this example, the source and target bitmaps contain 4 BPP. The call to the MaskBlt function is as follows:

  MaskBlt(hdcTrg,  // handle of target DC                0,  // x coord, upper-left corner of target rectangle                0,  // y coord, upper-left corner of target rectangle               15,  // width of source and target rectangles               15,  // height of source and target rectangles           hdcSrc,  // handle of source DC                0,  // x coord, upper-left corner of source rectangle                0,  // y coord, upper-left corner of source rectangle          hbmMask,  // handle of monochrome bit-mask                0,  // x coord, upper-left corner of mask rectangle                0,  // y coord, upper-left corner of mask rectangle       0xAACC0020   // raster-operation (ROP) code                );

The legend is as follows

'.' = 0,  '@' = 1,   '+' = 2,   '*' = 3,   '#' = 15

Source Bitmap     Mask Bitmap        Target Bitmap      Result

+++***+++***+++   ....@@@@@@@....    ##...........##    ##..**+++**..## +++***+++***+++    ...@@@@@@@@@...    ##...........##    ##.***+++***.## +++***+++***+++    ..@@@@@@@@@@@..    ##...........##    ##+***+++***+## +++***+++***+++    ..@@@@@@@@@@@..    ##...........##    ##+***+++***+## +++***+++***+++    ...@@@@@@@@@...    ##...........##    ##.***+++***.## +++***+++***+++    ....@@@@@@@....    ##...........##    ##..**+++**..## Note that the ROP &quot;AA&quot; is applied where 0 bits are in the mask and the ROP &quot;CC&quot; is applied where 1 bit is in the mask. This a transparency.

When creating a ROP4, you can use the following macro:

  #define ROP4(fore,back) ((((back) << 8) & 0xFF000000) | (fore)) This macro can be used to call the MaskBlt function as follows:

  MaskBlt(hdcDest, xTrgt, yTrgt,                          cx, cy,              hdcSrc, xSrc, ySrc,           hbmMask, xMask, yMask,        ROP4(PATCOPY, NOTSRCCOPY)                               ); This call would draw the selected brush where 1 bit appears in the mask and bitwise negation of the source bitmap where 0 bits appear in the mask.

Additional query words: 3.10 3.50 pixel

Keywords :

Issue type :

Technology : kbAudDeveloper kbWin32sSearch kbWin32API