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

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

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

Value 含义
黑暗
使用与物理调色板中的索引 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 之间传输数据,请通过调用 GetDIBit 将内存位图转换为 DIB。 若要向第二台设备显示 DIB,请调用 SetDIBitsStretchDIBits

Icm: 当出现 blit 时,不会执行颜色管理。

示例

下面的代码示例演示 了 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