IPrintOemUni::FilterGraphics 方法(prcomoem.h)

IPrintOemUni::FilterGraphics 方法可用于 Unidrv 支持的打印机,以修改扫描行数据并将其发送到后台处理程序。

语法

HRESULT FilterGraphics(
  PDEVOBJ pdevobj,
  PBYTE   pBuf,
  DWORD   dwLen
);

参数

pdevobj

调用方提供的指向 DEVOBJ 结构的指针。

pBuf

调用方提供的指向包含要打印的扫描行数据的缓冲区的指针。

dwLen

调用方提供的值,表示 pBuf指向的数据长度(以字节为单位)。

返回值

该方法必须返回以下值之一:

返回代码 描述
S_OK 作成功。
E_FAIL 作失败
E_NOTIMPL 未实现该方法。

言论

IPrintOemUni::FilterGraphics 方法用于在将扫描行数据发送到打印后台处理程序之前修改扫描行数据。 该方法负责将它接收的数据发送到后台处理程序。

IPrintOemUni::FilterGraphics 方法是可选的。 如果呈现插件实现此方法,则插件的 IPrintOemUni::GetImplementedMethod 方法在收到“FilterGraphics”作为输入时必须返回S_OK。

如果实现了 IPrintOemUni::FilterGraphics 方法,则 Unidrv 不会后台打印打印机数据。 相反,Unidrv 每次准备好后台处理图像数据的缓冲区时都会调用此方法。

请注意,实现此方法时,Unidrv 也不会像平时那样压缩打印机数据。 如果打算使用 Unidrv 压缩,则不应实现此方法。 此外,应修改 IPrintOemUni::GetImplementedMethod,以便在传递字符串“FilterGraphics”时返回S_FALSE。

该方法可以执行图像数据的最终后处理,例如删除相邻点或任何其他 Unidrv 不提供的数据流筛选作。 然后,它必须通过调用 IPrintOemDriverUni::D rvWriteSpoolBuf 方法来后台处理数据。

IPrintOemUni::FilterGraphics 方法由 Unidrv 的 DrvSendPage 函数调用。 如果要实现 IPrintOemUni::FilterGraphics,则不能完全替代 Unidrv 的 DrvSendPageDrvNextBand 函数。

在 Unidrv 的 DrvSendPage 函数调用插件的 IPrintOemUni::FilterGraphics 实现之前,DrvSendPage

  1. 如有必要,转置要呈现的位图。

  2. 将由颜色数据组成的输出传递转换为单个连续的数据数组。

  3. 处理一组扫描行,并将此数据转换为打印机的命令。

  4. 设置 X/Y 位置并将图形数据行传递到打印机。

如果插件已实现 IPrintOemUni::FilterGraphics, Unidrv 将使用扫描行数据调用插件,而不是将其发送到打印机。

IPrintOemUni::FilterGraphics 方法允许呈现插件修改扫描行数据并将其发送到后台处理程序。 如果实现此函数,Unidrv 将不会后台处理数据。 相反,IPrintOemUni::FilterGraphics 每次准备好后台处理数据缓冲区并将其发送到打印机时都会调用。

可以使用 IPrintOemUni::FilterGraphics 实现特殊的压缩方法,或者对发送到打印机或两者/或同时发送到打印机的数据流执行位作。 在任何情况下,都不会使用驱动程序的内置压缩代码。 IPrintOemUni::FilterGraphics 呈现一个数据块,需要使用 DrvWriteSpoolBuf 函数输出此数据。 核心驱动程序(Unidrv)在调用 OEMFilterGraphics后,不会对光栅数据执行进一步处理。

在插件中实现 IPrintOemUni::FilterGraphics 方法时,它将用于将光栅数据直接发送到打印机。 块中的扫描行数是通过与 Resolution 功能关联的 PinsPerPhysPass 属性指定的, 此属性是可选的,如果未指定,则会将其设置为 1(就像大多数墨迹打印机和页面打印机一样)。 否则,PinsPerPhysPass 应为 8 的倍数。 在 IPrintOemUni::FilterGraphics中,pBuf 参数指向包含扫描行光栅数据的缓冲区,如果需要(例如,用于压缩),最后发送。dwLen 参数是 pBuf 指向的缓冲区的长度。

以下列表描述了实现 IPrintOemUni::FilterGraphics的几种常见方案:

  • 特殊压缩技术

  • 将传入光栅数据发送到打印机之前对传入光栅数据的位作

IPrintOemUni::FilterGraphics 最终使用 DrvWriteSpoolBuf 函数将数据发送到打印机。 核心驱动程序(Unidrv)不会再处理 IPrintOemUni::FilterGraphics 发送的数据。如果插件执行特殊压缩或位作,插件必须分配特殊压缩或位作所需的缓冲区。 如果插件未分配自己的缓冲区,并且压缩的数据小于源,则输出将覆盖源缓冲区。

IPrintOemUni::FilterGraphics 方法使你能够访问扫描行数据本身,并让你能够处理光栅数据。

扫描行数等于图像的高度。 例如,每个扫描行的 1 位(bpp)厚度等于 1 像素的宽度,因此扫描行数等于图像的高度。

有关自定义 Unidrv 的呈现作的详细信息,请参阅 Unidrv-Specific 自定义呈现

要求

要求 价值
目标平台 桌面
标头 prcomoem.h (include Prcomoem.h)

另请参阅

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni::GetImplementedMethod

OEMFilterGraphics