EngBitBlt 函数 (winddi.h)

EngBitBlt 函数在设备管理的图面之间或设备管理的表面与 GDI 管理的标准格式位图之间提供常规位块传输功能。

语法

ENGAPI BOOL EngBitBlt(
       SURFOBJ  *psoTrg,
       SURFOBJ  *psoSrc,
       SURFOBJ  *psoMask,
       CLIPOBJ  *pco,
       XLATEOBJ *pxlo,
       RECTL    *prclTrg,
       POINTL   *pptlSrc,
       POINTL   *pptlMask,
       BRUSHOBJ *pbo,
       POINTL   *pptlBrush,
  [in] ROP4     rop4
);

参数

psoTrg

指向 SURFOBJ 结构的指针,该结构标识要绘制的图面。

psoSrc

如果 rop4 需要它,则指针指向定义位块传输操作的源的 SURFOBJ 结构。

psoMask

指向定义要用作掩码的图面的 SURFOBJ 结构的指针。 掩码定义为每像素 1 位的位图。 通常,掩码会限制目标图面中要修改的区域。 掩码由值0xAACC的 rop4 选择。 当掩码为零时,目标图面不受影响。

掩码足够大,足以覆盖目标矩形。

如果此参数的值为 NULL 并且 rop4 需要掩码,则使用画笔中的隐式掩码。 如果需要掩码,则 psoMask 会替代画笔中的隐式掩码。

pco

指向 CLIPOBJ 结构的指针。 CLIPOBJ_Xxx 服务例程用于将剪辑区域枚举为一组矩形。 此枚举限制要修改的目标区域。 如果可能,GDI 会简化所涉及的剪裁;例如,永远不会使用单个剪切矩形调用此函数。 GDI 在调用此函数之前剪裁目标矩形,因此不需要进行其他剪裁。

pxlo

指向 XLATEOBJ 结构的指针,该结构指示如何在源图面和目标图面之间转换颜色索引。

prclTrg

指向目标图面坐标系中 RECTL 结构的指针,该结构定义要修改的区域。 矩形由两个点定义:左上和右下角。 此矩形的下边缘和右边缘不是位块传输的一部分,这意味着矩形的右下角是排他性的。

永远不会使用空目标矩形调用 EngBitBlt。 定义矩形的两个点始终按顺序排列。

pptlSrc

指向 POINTL 结构的指针,该结构定义源矩形的左上角(如果存在源)。 如果没有源,驱动程序应忽略此参数。

pptlMask

指向 POINTL 结构的指针,该结构定义掩码中的哪个像素对应于目标矩形的左上角。 如果未在 psoMask 中指定掩码,驱动程序应忽略此参数。

pbo

指向用于定义位块传输模式的 BRUSHOBJ 结构的指针。 GDI 的 BRUSHOBJ_pvGetRbrush 服务例程检索设备的画笔实现。 如果 rop4 参数不需要模式,驱动程序可以忽略此参数。

pptlBrush

指向 POINTL 结构的指针,该结构定义目标图面中画笔的原点。 画笔的左上方像素此时对齐,画笔根据其尺寸重复。 如果 rop4 参数不需要模式,请忽略此参数。

[in] rop4

表示一个光栅操作,该操作定义如何将掩码、图案、源和目标像素组合在一起以将输出像素写入目标图面。

这是一个四元光栅运算,它是常规三元 Rop3 运算的自然扩展。 Rop4 具有 16 个相关位,这类似于 Rop3 的 8 个定义位。 (忽略 Rop3 的其他冗余位。) 实现 Rop4 的最简单方法是单独考虑其 2 个字节。 较低的字节指定一个 Rop3,无论掩码为 1,都应计算该 Rop3。 高字节指定可在掩码为 0 的位置计算和应用的 Rop3。

返回值

如果函数成功,则返回值为 TRUE 。 否则,它为 FALSE,并记录错误代码。

注解

如果设备表面组织为标准格式位图,驱动程序可以通过调用 EngBitBlt 请求 GDI 执行位块传输。 如果驱动程序具有用于快速处理简单传输的特殊硬件,但不想处理具有复杂传输的调用,则驱动程序可能会执行此操作。

有关光栅操作的详细信息,请参阅Microsoft Windows SDK文档。

要求

   
最低受支持的客户端 适用于 Windows 2000 及更高版本的 Windows 操作系统。
目标平台 通用
标头 winddi.h (包括 Winddi.h)
Library Win32k.lib
DLL Win32k.sys

另请参阅

BRUSHOBJ

BRUSHOBJ_pvGetRbrush

CLIPOBJ

DrvBitBlt

EngAssociateSurface

SURFOBJ

XLATEOBJ