drvTransparentBlt 函数 (winddi.h)

DrvTransparentBlt 函数提供具有透明度的位块传输功能。

语法

BOOL DrvTransparentBlt(
  [in, out]      SURFOBJ  *psoDst,
  [in]           SURFOBJ  *psoSrc,
  [in]           CLIPOBJ  *pco,
  [in, optional] XLATEOBJ *pxlo,
  [in]           RECTL    *prclDst,
  [in]           RECTL    *prclSrc,
  [in]           ULONG    iTransColor,
  [in]           ULONG    ulReserved
);

参数

[in, out] psoDst

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

[in] psoSrc

指向 SURFOBJ 结构的指针,该结构标识位块传输的源图面。

[in] pco

指向 CLIPOBJ 结构的指针。 提供 CLIPOBJ_Xxx 服务例程以一组矩形的形式枚举 剪辑区域 。 此枚举限制修改的目标区域。 GDI 尽可能简化涉及的剪裁。

[in, optional] pxlo

指向 XLATEOBJ 结构的指针,该结构指示应如何转换源颜色索引以写入目标图面。 如果 pxloNULL,则无需转换。

[in] prclDst

指向 RECTL 结构的指针,该结构定义要修改的矩形区域。 此矩形在目标图面的坐标系中指定,由两个点定义:左上角和右下角。 矩形在右下角是独占的;也就是说,其下边缘和右边缘不是位块传输的一部分。 定义矩形的两个点始终有序。

DrvTransparentBlt 永远不会使用空的目标矩形调用。

[in] prclSrc

指向 RECTL 结构的指针,该结构定义要复制的矩形区域。 此矩形在源图面的坐标系中指定,由两个点定义:左上角和右下角。 定义矩形的两个点始终有序。

源矩形永远不会超过源图面的边界,因此永远不会悬停源图面。

此矩形映射到 由 prclDst 定义的目标矩形。 DrvTransparentBlt 永远不会使用空的源矩形调用。

[in] iTransColor

指定源图面格式的物理透明颜色。 对于具有调色板的设备,此值是调色板索引。 对于没有调色板的设备,此值是源图面中使用的格式的 RGB 颜色。 例如,如果源图面格式为 5:6:5 RGB 格式,则此参数中的值也将采用同一形式。

[in] ulReserved

保留;此参数必须设置为零。

返回值

DrvTransparentBlt 成功后返回 TRUE 。 否则,它将返回 FALSE

注解

可以选择在图形驱动程序中实现 DrvTransparentBlt 函数。

支持在两个设备管理图面之间或在设备管理图面与 GDI 管理的标准格式位图之间传输具有透明度的位块传输。 鼓励驱动程序编写器支持从视频内存中的屏幕外设备位图到视频内存中的其他表面的闪烁情况;所有其他情况都可以在 EngTransparentBlt 中使用,但性能损失很小。 驱动程序可以将涉及设备管理表面的调用发送到 EngTransparentBlt

不会复制源图面上与 iTransColor 指定的透明颜色匹配的任何像素。 有关透明 blts 的详细说明,请参阅 复制位图

驱动程序永远不会在同一图面上使用重叠的源矩形和目标矩形调用。

驱动程序应忽略颜色键比较中任何未使用的位,例如当位图格式为 5:5:5 时,对于最高有效位, (红、绿、蓝) 各五位。

驱动程序通过在调用 EngAssociateSurface 时设置 HOOK_TRANSPARENTBLT 标志来挂钩 DrvTransparentBlt。 如果驱动程序已挂钩 DrvTransparentBlt 并被调用以执行它不支持的操作,则驱动程序应让 GDI 通过在调用 EngTransparentBlt 中转发数据来处理该操作。

要求

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

另请参阅

DrvBitBlt

DrvPlgBlt

DrvStretchBlt

DrvStretchBltROP

EngAssociateSurface

EngBitBlt

EngPlgBlt

EngStretchBlt

EngStretchBltROP

EngTransparentBlt