EngStretchBltROP 函数 (winddi.h)

EngStretchBltROP 函数使用 ROP 执行拉伸位块传输。

语法

ENGAPI BOOL EngStretchBltROP(
       SURFOBJ         *psoDest,
       SURFOBJ         *psoSrc,
       SURFOBJ         *psoMask,
       CLIPOBJ         *pco,
       XLATEOBJ        *pxlo,
       COLORADJUSTMENT *pca,
       POINTL          *pptlHTOrg,
  [in] RECTL           *prclDest,
  [in] RECTL           *prclSrc,
       POINTL          *pptlMask,
  [in] ULONG           iMode,
       BRUSHOBJ        *pbo,
  [in] DWORD           rop4
);

参数

psoDest

指向描述要绘制的图面的 SURFOBJ 结构的指针。

psoSrc

指向用于描述位块传输的源图面的 SURFOBJ 结构的指针。

psoMask

指向为源图面定义掩码的 SURFOBJ 结构的指针。 掩码由逻辑映射定义,逻辑映射是每个像素 1 位的位图。 通常,掩码会限制目标图面中要修改的区域。 此掩码应始终与源图面大小相同。

pco

指向 CLIPOBJ 结构的指针,该结构限制目标中要修改的区域。 CLIPOBJ_Xxx 服务例程用于将剪辑区域枚举为一组矩形。

只要可能,GDI 就可以简化所涉及的剪裁。 但是,与 EngBitBlt 不同,可以使用单个剪裁矩形调用 EngStretchBltROP 。 这可以防止剪裁输出时出现舍入错误。

pxlo

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

还可以查询此 XLATEOBJ 结构,以查找任何源索引的 RGB 颜色。 在某些情况下,高质量的拉伸位块传输需要内插颜色。

pca

指向 COLORADJUSTMENT 结构的指针,该结构定义在拉伸位之前要应用于源位图的颜色调整值。 有关详细信息,请参阅Windows SDK文档。

pptlHTOrg

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

[in] prclDest

指向 RECTL 结构的指针,该结构定义要修改的矩形区域。 此矩形在目标图面的坐标系中指定,由两个点定义:左上角和右下角。 定义矩形的两个点并不总是有序的,这意味着第二个点的坐标不一定大于第一个点的坐标。 如果目标矩形顺序不良好,则 GDI 会这样做。

矩形右下角排他;也就是说,其下边缘和右边缘不是副本的一部分。

不得使用空目标矩形调用 EngStretchBltROP

[in] prclSrc

指向 RECTL 结构的指针,该结构定义要复制的区域。 此矩形在源图面的坐标系中指定,由两个点定义:左上角和右下角。 定义矩形的两个点始终按顺序排列。

矩形右下角排他;也就是说,其下边缘和右边缘不是副本的一部分。

此矩形映射到 prclDest 指向的矩形。

不得使用空源矩形调用 EngStretchBltROP

pptlMask

指向 POINTL 结构的指针,该结构定义 prclMask 指向的掩码中的像素。 此像素对应于 prclSrc 指向的源矩形中的左上角像素。 如果未指定掩码,则忽略此参数;也就是说,当 prclMask 为 NULL 时,GDI 将忽略 pptlMask

[in] iMode

指定如何组合源像素以获取输出像素。 HALFTONE 模式比其他模式慢,但会生成更高质量的图像。 此参数可能是以下值之一:

含义
BLACKONWHITE 在收缩位块传输时,GDI 将像素与布尔 AND 运算组合在一起。 在拉伸位块传输中,将复制像素。
COLORONCOLOR 在收缩位块传输时,GDI 会忽略足够的像素,因此无需组合像素。 在拉伸位块传输中,将复制像素。
半 色调 GDI 使用输出图面中的像素组来最好地近似输入的颜色或灰度。
WHITEONBLACK 在收缩位块传输中,像素应与布尔 OR 运算组合使用。 在拉伸位块传输中,应复制像素。

pbo

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

[in] rop4

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

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

返回值

成功后,EngStretchBltROP 返回 TRUE 。 否则,它将报告错误并返回 FALSE

注解

如果驱动程序已挂钩 DrvStretchBltROP ,但无法支持所有操作,则驱动程序应调用 EngStretchBltROP

映射由 prclSrcprclDest 定义。 prclDestprclSrc 中指定的点位于对应于像素中心的整数坐标上。 由两个此类点定义的矩形被视为具有两个顶点的几何矩形,其坐标是给定的点,但从每个坐标中减去 0.5。 (POINTL 结构是用于指定这些小数坐标顶点的速记表示法。)

要求

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

另请参阅

DrvAlphaBlend

DrvBitBlt

DrvPlgBlt

DrvStretchBlt

DrvStretchBltROP

DrvTransparentBlt

EngAlphaBlend

EngBitBlt

EngPlgBlt

EngStretchBlt

EngTransparentBlt