drvPlgBlt 函数 (winddi.h)

DrvPlgBlt 函数在设备管理图面和 GDI 管理图面的组合之间提供旋转位块传输功能。

语法

BOOL DrvPlgBlt(
  [in, out]      SURFOBJ         *psoTrg,
  [in, out]      SURFOBJ         *psoSrc,
  [in, optional] SURFOBJ         *psoMsk,
  [in]           CLIPOBJ         *pco,
  [in, optional] XLATEOBJ        *pxlo,
  [in, optional] COLORADJUSTMENT *pca,
  [in, optional] POINTL          *pptlBrushOrg,
  [in]           POINTFIX        *pptfx,
  [in]           RECTL           *prcl,
  [in, optional] POINTL          *pptl,
  [in]           ULONG           iMode
);

参数

[in, out] psoTrg

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

[in, out] psoSrc

指向描述位块传输操作源的 SURFOBJ 结构的指针。

[in, optional] psoMsk

指向表示源掩码的可选 SURFOBJ 结构的指针。 它由逻辑映射定义,该映射是位图,每像素一位。

此掩码限制复制的源区域。 掩码具有0xCCAA的隐式 rop4 ,这意味着无论掩码为 1,都应复制源,但无论掩码为零,目标应单独保留。

如果此参数为 NULL,则 rop4 将隐式0xCCCC,这意味着源应复制到源矩形中的任意位置。

掩码始终足够大,足以包含相关的源;不需要平铺。

[in] pco

指向 CLIPOBJ 结构的指针,该结构限制要修改的目标区域。 GDI 函数将 剪辑区域 枚举为一组矩形。

GDI 尽可能简化涉及的剪裁。 与 DrvBitBlt 函数不同,可以使用单个剪裁矩形调用 DrvPlgBlt 。 这可以防止剪裁输出时出现舍入错误。

[in, optional] pxlo

指向 XLATEOBJ 结构的指针,该结构定义如何在源图面和目标图面之间转换颜色索引。 还可以查询 XLATEOBJ 以查找任何源索引的 RGB 颜色。 如果 pxloNULL,则无需转换。

内插颜色需要高质量的旋转位块传输。

[in, optional] pca

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

[in, optional] pptlBrushOrg

指向 BRUSHOBJ 结构的指针,该结构指示半色调画笔的原点。 使用半色调画笔的设备驱动程序应将画笔图案的左上角像素与设备图面上的此点对齐。

[in] pptfx

指向三个 POINTFIX 结构的指针,这些结构定义目标图面中的平行四边形。 将 pptfx[0] 定义为 A, 将 pptfx[1] 定义为 B, 将 pptfx[2] 定义为 C。A、B 和 C 定义平行四边形的三个顶点。 第四个隐式顶点的给定方式为:

    D = B + C − A

DrvPlgBlt 永远不会使用 A、B 和 C 共线调用。

[in] prcl

指向定义源图面坐标系中要复制的区域的 RECTL 结构的指针。 源矩形的点顺序良好。 DrvPlgBlt 永远不会被赋予空的源矩形。

[in, optional] pptl

指向 POINTL 结构的指针,该结构指定给定掩码中的哪个像素对应于源矩形中的左上角像素。 如果未指定 psoMsk ,请忽略此参数。

[in] iMode

定义如何组合源像素以获取输出像素。 此值可以为下列值之一:

含义
BLACKONWHITE 在收缩位块传输中,像素应与 AND 操作结合使用。 在拉伸位块传输中,应复制像素。
COLORONCOLOR 在收缩位块传输时,应忽略足够的像素,以便不需要合并像素。 在拉伸位块传输中,应复制像素。
半 色调 驱动程序可以使用输出图面中的像素组来最接近输入的颜色或灰度。
WHITEONBLACK 在收缩位块传输时,像素应与 OR 操作组合在一起。 在拉伸位块传输中,应复制像素。
 

WHITEONBLACK、BLACKONWHITE 和 COLORONCOLOR 方法为旧应用程序提供兼容性,但不会为颜色表面生成最佳结果。

返回值

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

注解

DrvStretchBlt 类似, DrvPlgBlt 使设备驱动程序能够写入 GDI 位图,尤其是在驱动程序可以执行半调时。

为了转换位图,此函数执行从 prcl 定义的矩形到任何平行四边形的位块传输。 平行四边形由 pptfx 定义,它指向一个由三个点的数组。

prcl 处的源矩形被视为一个几何矩形,其角从给定整数坐标移出 (-0.5,-0.5) 。 这与 DrvStretchBlt 的源矩形完全匹配。 源矩形始终井然有序。

源矩形的左上角映射到第一个点 A。源矩形的右上角映射到第二个点 B。源矩形的左下角映射到第三个点 C。源矩形的右下角映射到平行四边形中的隐式点,该隐式点通过将三个给定点视为矢量并计算:

    D = B + C - A

请注意,拉伸 blt 可以完全表示为平行四边形 blt,但为目标给定的坐标的小数部分为 0.5。

DrvPlgBlt 对于图形驱动程序是可选的。 它仅用于某些类型的旋转。 如果调用 DrvPlgBlt 来执行它不支持的操作,驱动程序应调用 EngPlgBlt

要求

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

另请参阅

DrvAlphaBlend

DrvBitBlt

DrvStretchBlt

DrvStretchBltROP

DrvTransparentBlt

EngAlphaBlend

EngBitBlt

EngPlgBlt

EngStretchBlt

EngStretchBltROP

EngTransparentBlt