The BitBlt
function performs a bit-block transfer of the color data corresponding to a
rectangle of pixels from the specified source device context into a destination
device context.
BOOL BitBlt(HDC hdcDest, // handle to destination DC
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
DWORD dwRop // raster operation code
);
hdcDest
[in] Handle to the destination device context.
nXDest
[in] Specifies the x-coordinate, in logical
units, of the upper-left corner of the destination rectangle.
nYDest
[in] Specifies the y-coordinate, in logical
units, of the upper-left corner of the destination rectangle.
nWidth
[in] Specifies the width, in logical units,
of the source and destination rectangles.
nHeight
[in] Specifies the height, in logical
units, of the source and the destination rectangles.
hdcSrc
[in] Handle to the source device context.
nXSrc
[in] Specifies the x-coordinate, in logical
units, of the upper-left corner of the source rectangle.
nYSrc
[in] Specifies the y-coordinate, in logical
units, of the upper-left corner of the source rectangle.
dwRop
[in] Specifies a raster-operation code.
These codes define how the color data for the source rectangle is to be
combined with the color data for the destination rectangle to achieve the final
color.
The following list
shows some common raster operation codes.
|
Value |
Description |
|
BLACKNESS |
Fills the destination
rectangle using the color associated with index 0 in the physical palette.
(This color is black for the default physical palette.) |
|
CAPTUREBLT |
Windows 98/Me, Windows
2000/XP: Includes any windows that
are layered on top of your window in the resulting image. By default, the
image only contains your window. Note that this generally cannot be used for
printing device contexts. |
|
DSTINVERT |
Inverts the destination
rectangle. |
|
MERGECOPY |
Merges the colors of the
source rectangle with the brush currently selected in hdcDest,
by using the Boolean AND operator. |
|
MERGEPAINT |
Merges the colors of the
inverted source rectangle with the colors of the destination rectangle by
using the Boolean OR operator. |
|
NOMIRRORBITMAP |
Windows 98/Me, Windows
2000/XP: Prevents the bitmap from
being mirrored. |
|
NOTSRCCOPY |
Copies the inverted source
rectangle to the destination. |
|
NOTSRCERASE |
Combines the colors of the
source and destination rectangles by using the Boolean OR operator and then
inverts the resultant color. |
|
PATCOPY |
Copies the brush currently
selected in hdcDest, into the destination
bitmap. |
|
PATINVERT |
Combines the colors of the
brush currently selected in hdcDest, with
the colors of the destination rectangle by using the Boolean XOR operator. |
|
PATPAINT |
Combines the colors of the
brush currently selected in hdcDest, with
the colors of the inverted source rectangle by using the Boolean OR operator.
The result of this operation is combined with the colors of the destination
rectangle by using the Boolean OR operator. |
|
SRCAND |
Combines the colors of the
source and destination rectangles by using the Boolean AND operator. |
|
SRCCOPY |
Copies the source rectangle
directly to the destination rectangle. |
|
SRCERASE |
Combines the inverted
colors of the destination rectangle with the colors of the source rectangle
by using the Boolean AND operator. |
|
SRCINVERT |
Combines the colors of the
source and destination rectangles by using the Boolean XOR operator. |
|
SRCPAINT |
Combines the colors of the
source and destination rectangles by using the Boolean OR operator. |
|
WHITENESS |
Fills the destination
rectangle using the color associated with index 1 in the physical palette.
(This color is white for the default physical palette.) |
If the function succeeds, the return value is
nonzero.
If the function fails, the return value is
zero.
Windows NT/2000/XP: To get extended error information, call GetLastError.
BitBlt only does clipping on the destination DC.
If a rotation or shear transformation is in
effect in the source device context, BitBlt
returns an error. If other transformations exist in the source device context
(and a matching transformation is not in effect in the destination
device context), the rectangle in the destination device context is stretched,
compressed, or rotated, as necessary.
If the color formats of the source and
destination device contexts do not match, the BitBlt
function converts the source color format to match the destination format.
When an enhanced metafile is being recorded,
an error occurs if the source device context identifies an enhanced-metafile
device context.
Not all devices support the BitBlt function. For more information, see the
RC_BITBLT raster capability entry in the GetDeviceCaps function as well as the following
functions: MaskBlt, PlgBlt, and StretchBlt.
BitBlt returns an error if the source and
destination device contexts represent different devices. To transfer data between DCs
for different devices, convert the memory bitmap to a DIB by calling GetDIBits. To display the DIB to the second
device, call SetDIBits or StretchDIBits.
ICM: No color management is performed when blits
occur.
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Wingdi.h;
include Windows.h.
Library: Use Gdi32.lib.
You can use a bitmap to capture an image, and
you can store the captured image in memory, display it at a different location
in your application's window, or display it in another window.
In some cases, you may want your application
to capture images and store them only temporarily. For example, when you scale
or zoom a picture created in a drawing application,
the application must temporarily save the normal view of the image and display
the zoomed view. Later, when the user selects the normal view, the application
must replace the zoomed image with a copy of the normal view that it
temporarily saved.
To store an image temporarily, your
application must call CreateCompatibleDC to create a DC that is
compatible with the current window DC. After you create a compatible DC, you
create a bitmap with the appropriate dimensions by calling the CreateCompatibleBitmap function and then select
it into this device context by calling the SelectObject function.
After the compatible device context is
created and the appropriate bitmap has been selected into it, you can capture
the image. The BitBlt function captures images. This function
performs a bit block transfer that is, it copies data
from a source bitmap into a destination bitmap. However, the two arguments to
this function are not bitmap handles. Instead, BitBlt
receives handles that identify two device contexts and copies the bitmap data
from a bitmap selected into the source DC into a bitmap selected into the
target DC. In this case, the target DC is the compatible DC, so when BitBlt completes the transfer, the image has been
stored in memory. To redisplay the image, call BitBlt a second time, specifying the compatible DC
as the source DC and a window (or printer) DC as the target DC.
The following example code, from an
application that captures an image of the entire desktop, creates a compatible
device context and a bitmap with the appropriate dimensions, selects the bitmap
into the compatible DC, and then copies the image using the BitBlt function.
// Create a normal DC and a memory DC for the entire screen. The
// normal DC provides a "snapshot" of the screen contents. The
// memory DC keeps a copy of this "snapshot" in the associated
// bitmap.
hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
hdcCompatible = CreateCompatibleDC(hdcScreen);
// Create a compatible bitmap for hdcScreen.
hbmScreen = CreateCompatibleBitmap(hdcScreen,
GetDeviceCaps(hdcScreen, HORZRES),
GetDeviceCaps(hdcScreen, VERTRES));
if (hbmScreen == 0)
errhandler("hbmScreen", hwnd);
// Select the bitmaps into the compatible DC.
if (!SelectObject(hdcCompatible, hbmScreen))
errhandler("Compatible Bitmap Selection", hwnd);
// Hide the application window.
ShowWindow(hwnd, SW_HIDE);
//Copy color data for the entire display into a
//bitmap that is selected into a compatible DC.
if (!BitBlt(hdcCompatible,
0,0,
bmp.bmWidth, bmp.bmHeight,
hdcScreen,
0,0,
SRCCOPY))
errhandler("Screen to Compat Blt Failed", hwnd);
// Redraw the application window.
ShowWindow(hwnd, SW_SHOW);