bitBlt 函数 (wingdi.h)

BitBlt 函数执行与像素矩形相对应的颜色数据的位块传输,从指定的源设备上下文传输到目标设备上下文。

语法

BOOL BitBlt(
  [in] HDC   hdc,
  [in] int   x,
  [in] int   y,
  [in] int   cx,
  [in] int   cy,
  [in] HDC   hdcSrc,
  [in] int   x1,
  [in] int   y1,
  [in] DWORD rop
);

参数

[in] hdc

目标设备上下文的句柄。

[in] x

目标矩形左上角的 x 坐标(以逻辑单位为单位)。

[in] y

目标矩形左上角的 y 坐标(以逻辑单位为单位)。

[in] cx

源矩形和目标矩形的宽度(以逻辑单位为单位)。

[in] cy

源矩形和目标矩形的高度(以逻辑单位为单位)。

[in] hdcSrc

源设备上下文的句柄。

[in] x1

源矩形左上角的 x 坐标(以逻辑单位为单位)。

[in] y1

源矩形左上角的 y 坐标(以逻辑单位为单位)。

[in] rop

光栅操作代码。 这些代码定义如何将源矩形的颜色数据与目标矩形的颜色数据相结合,以实现最终颜色。

以下列表显示了一些常见的光栅操作代码。

含义
黑暗
使用与物理调色板中的索引 0 关联的颜色填充目标矩形。 (对于默认的物理调色板,该颜色为黑色。)
CAPTUREBLT
包括生成图像中窗口顶部分层的任何窗口。 默认情况下,图像仅包含你的窗口。 请注意,这通常无法用于打印设备上下文。
DSTINVERT
反转目标矩形。
MERGECOPY
使用布尔 AND 运算符将源矩形的颜色与 hdcDest 中当前选择的画笔合并。
MERGEPAINT
使用布尔 OR 运算符将倒置源矩形的颜色与目标矩形的颜色合并。
NOMIRRORBITMAP
防止位图镜像。
NOTSRCCOPY
将反转源矩形复制到目标。
NOTSRCERASE
使用布尔 OR 运算符组合源矩形和目标矩形的颜色,然后反转生成的颜色。
PATCOPY
hdcDest 中当前选择的画笔复制到目标位图中。
PATINVERT
使用布尔 XOR 运算符将 hdcDest 中当前选择的画笔的颜色与目标矩形的颜色组合在一起。
PATPAINT
使用布尔 OR 运算符将 hdcDest 中当前选择的画笔的颜色与反转源矩形的颜色相结合。 此操作的结果通过使用布尔 OR 运算符与目标矩形的颜色相结合。
SRCAND
使用布尔 AND 运算符组合源矩形和目标矩形的颜色。
SRCCOPY
将源矩形直接复制到目标矩形。
SRCERASE
使用布尔 AND 运算符将目标矩形的反转颜色与源矩形的颜色组合在一起。
SRCINVERT
使用布尔 XOR 运算符组合源矩形和目标矩形的颜色。
SRCPAINT
使用布尔 OR 运算符组合源矩形和目标矩形的颜色。
使用与物理调色板中的索引 1 关联的颜色填充目标矩形。 (对于默认的物理调色板,该颜色为白色。)

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

BitBlt 仅在目标 DC 上执行剪裁。

如果旋转或剪切转换在源设备上下文中生效, BitBlt 将返回错误。 如果源设备上下文中存在其他转换 (并且匹配转换在目标设备上下文) 中无效,则根据需要拉伸、压缩或旋转目标设备上下文中的矩形。

如果源和目标设备上下文的颜色格式不匹配, BitBlt 函数会将源颜色格式转换为与目标格式匹配。

记录增强型图元文件时,如果源设备上下文标识增强型图元文件设备上下文,则会发生错误。

并非所有设备都支持 BitBlt 函数。 有关详细信息,请参阅 GetDeviceCaps 函数中的RC_BITBLT光栅功能条目以及以下函数: MaskBltPlgBltStretchBlt

如果源和目标设备上下文表示不同的设备,BitBlt 将返回错误。 若要在不同设备的 DC 之间传输数据,请通过调用 GetDIBits 将内存位图转换为 DIB。 若要向第二台设备显示 DIB,请调用 SetDIBitsStretchDIBits

Icm: 发生 blits 时,不执行颜色管理。

示例

下面的代码示例演示如何使用 BitBlt

if (!BitBlt(hdcMemDC,
    0, 0,
    rcClient.right - rcClient.left, rcClient.bottom - rcClient.top,
    hdcWindow,
    0, 0,
    SRCCOPY))
{
    MessageBox(hWnd, L"BitBlt has failed", L"Failed", MB_OK);
    goto done;
}

若要在上下文中查看此示例,请参阅 捕获图像

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wingdi.h (包括 Windows.h)
Library Gdi32.lib
DLL Gdi32.dll

另请参阅

位图函数

位图概述

GetDIBits

GetDeviceCaps

MaskBlt

PlgBlt

SetDIBits

StretchBlt

StretchDIBits