伪矢量图形支持

重要

新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

有关详细信息,请参阅新式打印平台打印支持应用设计指南

不支持真实矢量图形的设备可以利用 Unidrv 为伪矢量图形提供的支持。 使用此功能时,Unidrv 会将纯黑色矩形和水平线和垂直线直接下载到非矢量图形设备,从而减少在光栅表面上呈现这些图形的开销。 这还会减少输出数据的大小,从而提高无法高效处理光栅数据的设备的打印机吞吐量。

为了从此功能中受益,非矢量图形设备的微型驱动程序仅需支持 CmdRectBlackFill 命令。 当关闭打印机属性页面的“高级”选项卡中的“打印优化”功能时,将禁用此功能。

伪矢量图形功能会截获对 DrvBitBltDrvStrokePathDrvLineTo 的调用,以确定是绘制纯黑色矩形还是垂直或水平线。 当 Unidrv 识别要绘制为有效矩形(纯黑色矩形,没有复杂剪裁,不使用利用当前目标位的 ROP)的图形时,会将其存储在矩形阵列中,而不是在表面上绘制。

伪矢量图形功能最困难的方面是避免由必须在以前绘制的对象基础上绘制的对象导致的 z 顺序问题。 顶部的对象可能需要擦除或覆盖黑色矩形的一部分。 如果已将黑色矩形下载到设备,则可能无法正确绘制以后在系统表面上绘制的对象。

此问题的解决方案是暂时存储有效矩形,而不是直接在表面上绘制。 要表面上绘制新对象时,Unidrv 会检查该对象是否与任何黑色矩形重叠。 如果重叠,则首先在表面上绘制黑色矩形的重叠部分,然后再绘制新对象,从而保持正确的 z 顺序。 先绘制矩形还会考虑要绘制的新对象可能具有关联的 ROP,包括与目标交互的对象。

此外,要绘制的新对象可能包含复杂剪裁,因此生成的图形不再是矩形。 当条带或页面呈现完成时,可以将任何剩余的黑色矩形直接下载到设备,而不会造成任何 z 顺序问题。 Unidrv 维护每个条带最多 256 个矩形的列表,并尽可能连接 BitBlt 矩形。

伪矢量图形问题

伪矢量图形功能在某些情况下可能会更改 z 排序,尤其是在将文本直接下载到设备和具有复杂剪辑的后续对象必须与该文本交互时。