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 的 DrvSendPage 或 DrvNextBand 函数。
在 Unidrv 的 DrvSendPage 函数调用插件的 IPrintOemUni::FilterGraphics 实现 之前,DrvSendPage。
如有必要,转置要呈现的位图。
将包含颜色数据的输出传递转换为单个连续的数据数组。
处理一组扫描行,并将此数据转换为打印机的命令。
设置 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 的自定义呈现。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | prcomoem.h (包括 Prcomoem.h) |
另请参阅
IPrintOemDriverUni::D rvWriteSpoolBuf