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 结构的指针,该结构指定如何在源图面和目标图面之间转换颜色索引。 如果 pxloNULL,则无需转换。

还可以查询此 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

注解

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

驱动程序可以选择实现 DrvStretchBltROP。 如果驱动程序确实挂接此调用,它可以调用 EngStretchBltROP 来执行它不支持的那些拉伸 blit 操作。

要求

要求
目标平台 桌面
标头 winddi.h (包括 Winddi.h)

另请参阅

DrvAlphaBlend

DrvBitBlt

DrvPlgBlt

DrvStretchBlt

DrvTransparentBlt

EngAlphaBlend

EngBitBlt

EngPlgBlt

EngStretchBlt

EngStretchBltROP

EngTransparentBlt