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 。
映射由 prclSrc 和 prclDest 定义。 prclDest 和 prclSrc 中指定的点位于对应于像素中心的整数坐标上。 由两个此类点定义的矩形被视为具有两个顶点的几何矩形,其坐标是给定的点,但从每个坐标中减去 0.5。 (POINTL 结构是用于指定这些小数坐标顶点的速记表示法。)
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 Windows 2000 及更高版本的 Windows 操作系统。 |
目标平台 | 通用 |
标头 | winddi.h (包括 Winddi.h) |
Library | Win32k.lib |
DLL | Win32k.sys |