drvStretchBltROP 函数 (winddi.h)
DrvStretchBltROP 函数使用 ROP 执行拉伸位块传输。
语法
BOOL DrvStretchBltROP(
[in, out] SURFOBJ *psoDest,
[in, out] SURFOBJ *psoSrc,
[in, optional] SURFOBJ *psoMask,
[in] CLIPOBJ *pco,
[in, optional] XLATEOBJ *pxlo,
[in, optional] COLORADJUSTMENT *pca,
[in] POINTL *pptlHTOrg,
[in] RECTL *prclDest,
[in] RECTL *prclSrc,
[in, optional] POINTL *pptlMask,
[in] ULONG iMode,
[in] BRUSHOBJ *pbo,
[in] DWORD rop4
);
参数
[in, out] psoDest
指向描述要绘制的图面的 SURFOBJ 结构的指针。
[in, out] psoSrc
指向描述位块传输的源图面的 SURFOBJ 结构的指针。
[in, optional] psoMask
指向为源定义掩码的 SURFOBJ 结构的指针。 掩码由逻辑映射定义,该映射是位图,每像素一位。 通常,掩码会限制目标图面中要修改的区域。 此掩码的大小始终与源图面相同。
[in] pco
指向 CLIPOBJ 结构的指针,该结构限制目标中要修改的区域。 提供 CLIPOBJ_Xxx 服务例程以一组矩形的形式枚举 剪辑区域 。
GDI 尽可能简化涉及的剪裁。 但是,与 DrvBitBlt 不同,可以使用单个剪裁矩形调用 DrvStretchBltROP 。 这可以防止剪裁输出时出现舍入错误。
[in, optional] pxlo
指向 XLATEOBJ 结构的指针,该结构指定如何在源图面和目标图面之间转换颜色索引。 如果 pxlo 为 NULL,则无需转换。
还可以查询此 XLATEOBJ 结构以查找任何源索引的 RGB 颜色。 在某些情况下,高质量拉伸位块传输需要内插颜色。
[in, optional] pca
指向 COLORADJUSTMENT 结构的指针,该结构定义在拉伸位之前要应用于源位图的颜色调整值。 有关详细信息,请参阅Microsoft Windows SDK文档。
[in] pptlHTOrg
指向 POINTL 结构的指针,该结构定义目标图面上的半色调画笔的原点。 使用半色调画笔时,驱动程序应将画笔的左上角像素与此点对齐,并根据其尺寸重复画笔。 如果 rop4 参数不需要模式,驱动程序应忽略此参数。
[in] prclDest
指向 RECTL 结构的指针,该结构定义要修改的矩形区域。 此矩形在目标图面的坐标系中指定,由两个点定义:左上角和右下角。 定义矩形的两个点并不总是有序的,这意味着第二个点的坐标不一定大于第一个点的坐标。 如果目标矩形排序不正常,驱动程序应交换两个 x 值和/或两个 y 值。
矩形在右下角是独占的;也就是说,它的下边缘和右边缘不是副本的一部分。
DrvStretchBltROP 永远不会使用空的目标矩形调用。
[in] prclSrc
指向 RECTL 结构的指针,该结构定义要复制的区域。 此矩形在源图面的坐标系中指定,由两个点定义:左上角和右下角。 定义矩形的两个点始终有序。
矩形在右下角是独占的;也就是说,其下边缘和右边缘不是副本的一部分。
驱动程序应将此矩形映射到 prclDest 定义的矩形。
[in, optional] pptlMask
指向 POINTL 结构的指针,该结构定义 prclMask 指向的掩码中的像素。 此像素对应于 prclSrc 指向的源矩形中的左上角像素。 如果未指定掩码,驱动程序应忽略此参数。
[in] iMode
指定如何组合源像素以获取输出像素。 HALFTONE 模式比其他模式慢,但会生成更高质量的图像。 此参数可能是以下值之一:
值 | 含义 |
---|---|
BLACKONWHITE | 在收缩位块传输中,像素应与布尔 AND 操作组合在一起。 在拉伸位块传输中,应复制像素。 |
COLORONCOLOR | 在收缩位块传输时,应忽略足够的像素,以便不需要合并像素。 在拉伸位块传输中,应复制像素。 |
半 色调 | 驱动程序可以使用输出图面中的像素组来最接近输入的颜色或灰度。 |
WHITEONBLACK | 在收缩位块传输中,像素应与布尔 OR 操作组合在一起。 在拉伸位块传输中,应复制像素。 |
[in] pbo
指向 BRUSHOBJ 结构的指针,该结构用于定义位块传输的模式。 GDI 的BRUSHOBJ_pvGetRbrush 服务例程检索设备的画笔实现。 如果 rop4 参数不需要模式,驱动程序可以忽略此参数。
[in] rop4
表示一个光栅操作,该操作定义如何将掩码、图案、源和目标像素组合在一起以将输出像素写入目标图面。
这是一个四元光栅运算,它是通常的三元 Rop3 运算的自然扩展。 Rop4 有 16 个相关位,类似于 Rop3 的 8 个定义位。 (忽略 Rop3 的其他冗余位。) 实现 Rop4 的最简单方法是单独考虑其 2 个字节。 较低的字节指定一个 Rop3,无论 psoMask 指向的掩码为 1,都应计算该 Rop3。 高字节指定一个 Rop3,无论掩码为零,都可以计算和应用该 Rop3。
返回值
DrvStretchBltROP 成功后应返回 TRUE 。 否则,它应报告错误代码并返回 FALSE。
注解
映射由 prclSrc 和 prclDest 定义。 prclDest 和 prclSrc 中指定的点位于对应于像素中心的整数坐标上。 由两个此类点定义的矩形被视为具有两个顶点的几何矩形,其坐标是给定点,但从每个坐标中减去 0.5。 (POINTL 结构是用于指定这些小数坐标顶点的简写表示法。)
驱动程序可以选择实现 DrvStretchBltROP。 如果驱动程序确实挂接此调用,它可以调用 EngStretchBltROP 来执行它不支持的那些拉伸 blit 操作。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | winddi.h (包括 Winddi.h) |