BitBlt(wingdi.h)

BitBlt函数是GDI+中的一个重要图形操作,用于在设备上下文之间进行位块传输,即复制颜色数据。它接受多个参数,如源和目标设备上下文的句柄,以及矩形的坐标和光栅操作代码。光栅操作代码定义了源和目标颜色数据如何组合。如果函数成功,会返回非零值;否则返回零。BitBlt不适用于所有设备,并且在源和目标设备上下文表示不同设备时,需要通过其他方式如DIB转换来传输数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.

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

A handle to the destination device context.

目标设备上下文的句柄。

[in] x

The x-coordinate, in logical units, of the upper-left corner of the destination rectangle.

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

[in] y

The y-coordinate, in logical units, of the upper-left corner of the destination rectangle.

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

[in] cx

The width, in logical units, of the source and destination rectangles.

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

[in] cy

The height, in logical units, of the source and the destination rectangles.

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

[in] hdcSrc

A handle to the source device context.

源设备上下文的句柄。

[in] x1

The x-coordinate, in logical units, of the upper-left corner of the source rectangle.

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

[in] y1

The y-coordinate, in logical units, of the upper-left corner of the source rectangle.

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

[in] rop

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

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

表 1
ValueMeaning

BLACKNESS

使用与物理调色板中的索引 0 关联的颜色填充目标矩形。(对于默认的物理调色板,此颜色为黑色。)

CAPTUREBLT

在生成的图像中包括任何层叠在窗口顶部的窗口。默认情况下,图像仅包含您的窗口。请注意,这通常不能用于打印设备上下文。

DSTINVERT

反转目标矩形。

MERGECOPY

使用布尔 AND 运算符 将源矩形的颜色与当前在hdcDest中选择的画笔合并。

MERGEPAINT

使用布尔 OR 运算符将反转源矩形的颜色与目标矩形的颜色合并。

NOMIRRORBITMAP

防止位图被镜像。(No mirror bitmap)

NOTSRCCOPY

将反转的源矩形复制到目标。

NOTSRCERASE

使用布尔 OR 运算符组合源矩形和目标矩形的颜色,然后反转结果颜色。

PATCOPY

将hdcDest 中当前选择的画笔复制到目标位图中。(Paint Copy)

PATINVERT

使用布尔 XOR 运算符将 当前在hdcDest中选择的画笔的颜色与目标矩形的颜色相结合。

PATPAINT

使用布尔 OR 运算符将 当前在hdcDest中选择的画笔的颜色与反转源矩形的颜色相结合。此操作的结果通过使用布尔 OR 运算符与目标矩形的颜色组合。

SRCAND

使用布尔 AND 运算符组合源矩形和目标矩形的颜色。(Source And)

SRCCOPY

将源矩形直接复制到目标矩形。(Source Copy)

SRCERASE

使用布尔 AND 运算符将目标矩形的反转颜色与源矩形的颜色组合。

SRCINVERT

使用布尔 XOR 运算符组合源矩形和目标矩形的颜色。

SRCPAINT

使用布尔 OR 运算符组合源矩形和目标矩形的颜色。

WHITENESS

使用与物理调色板中的索引 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;
}

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

要求

REQUIREMENTS
Minimum supported clientWindows 2000 Professional [desktop apps only]
Minimum supported serverWindows 2000 Server [desktop apps only]
Target PlatformWindows
Headerwingdi.h (include Windows.h)
LibraryGdi32.lib
DLLGdi32.dll
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值