drvStretchBlt 函数 (winddi.h)

DrvStretchBlt 函数在设备管理的和 GDI 管理的图面的任意组合之间提供拉伸位块传输功能。

语法

BOOL DrvStretchBlt(
  [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, out] psoDest

指向 SURFOBJ 结构的指针,该结构标识要绘制的图面。

[in, out] psoSrc

指向 SURFOBJ 结构的指针,该结构定义位块传输操作的源。

[in, optional] psoMask

指向 SURFOBJ 结构的可选指针,该结构定义为源提供掩码的图面。 掩码由逻辑映射定义,该映射是每个像素 1 位的位图。

掩码限制复制的源区域。 如果指定此参数,则它的隐式 rop4 为 0xCCAA,这意味着,无论掩码为 1,都应复制源,但无论掩码为零,目标应单独保留。

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

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

[in] pco

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

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

[in, optional] pxlo

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

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

[in, optional] pca

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

[in] pptlHTOrg

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

[in] prclDest

指向 RECTL 结构的指针,该结构定义要在目标图面的坐标系中修改的区域。 此矩形由两个不一定井然有序的点定义,这意味着第二个点的坐标不一定大于第一个点的坐标。 它们描述的矩形不包括下边缘和右边缘。 永远不会使用空的目标矩形调用此函数。

当目标矩形排序不正常时,DrvStretchBlt 应交换两个 x 值和/或两个 y 值。

[in] prclSrc

指向 RECTL 结构的指针,该结构定义将在源图面的坐标系中复制的区域。 矩形由两个点定义,并将映射到 由 prclDest 定义的矩形上。 源矩形的点顺序良好。 永远不会为此函数提供空的源矩形。

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

任何矩形的边缘从不与像素相交,而是围绕一组像素。 矩形内的像素是“右下角异”矩形的预期像素。 DrvStretchBlt 会将几何源矩形精确映射到几何目标矩形。

[in, optional] pptlMask

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

[in] iMode

指定如何组合源像素以获取输出像素。 HALFTONE 模式比其他模式慢,但会生成更高质量的图像。

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

返回值

如果函数成功,则返回值为 TRUE 。 否则为 FALSE,并记录错误代码。

注解

DrvStretchBlt 使设备驱动程序能够写入 GDI 位图,尤其是在驱动程序可以执行半调时。 此函数允许将相同的半调算法应用于 GDI 位图和设备图面。

可以提供此函数以仅处理某些形式的拉伸,例如按整数倍数。 如果驱动程序已挂钩调用并要求执行它不支持的操作,则驱动程序应将数据转发到 EngStretchBlt 以供 GDI 处理。

如果驱动程序希望 GDI 处理半调,并且想要确保正确的 iMode 值,则驱动程序可以挂钩 DrvStretchBlt,将 iMode 设置为 HALFTONE,并使用设置的 iMode 值通过 EngStretchBlt 回调回 GDI。

DrvStretchBlt 对于显示驱动程序是可选的。

要求

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

另请参阅

CLIPOBJ

DrvBitBlt

EngStretchBlt

SURFOBJ

XLATEOBJ