iPrintOemUni::Compression 方法 (prcomoem.h)

方法 IPrintOemUni::Compression 可以与 Unidrv 支持的打印机一起使用,以提供自定义的位图压缩方法。

语法

HRESULT Compression(
        PDEVOBJ pdevobj,
        PBYTE   pInBuf,
        PBYTE   pOutBuf,
        DWORD   dwInLen,
        DWORD   dwOutLen,
  [out] OUT INT *piResult
);

参数

pdevobj

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

pInBuf

调用方提供的指向输入扫描行数据的指针。

pOutBuf

调用方提供的指向输出缓冲区的指针,用于接收压缩的扫描行数据。

dwInLen

调用方提供的输入数据的长度。

dwOutLen

调用方提供的输出缓冲区的长度。

[out] piResult

接收方法提供的结果值。 如果操作成功,此值应为压缩字节数,该值不得大于为 dwOutLen 接收的值。 如果发生错误,或者方法无法压缩,则结果值应为 -1。

返回值

方法必须返回以下值之一。

返回代码 说明
S_OK
操作成功。
E_FAIL
操作失败
E_NOTIMPL
该方法未实现。

注解

IPrintOemUni::Compression 将扫描行数据发送到打印后台处理程序之前,通过呈现插件来使用 方法压缩扫描行数据。 该方法的目的是为 Unidrv 不支持的特定于打印机的压缩方法提供支持。

IPrintOemUni::Compression如果定义了 方法,并且打印机的 GPD 文件包含 CmdEnableOEMComp 命令条目,则每次扫描行准备好发送到打印后台处理程序时,Unidrv 都会调用该方法。 (有关 CmdEnableOEMComp 命令的信息,请参阅 光栅数据压缩命令。)

pInBufdwInLen 参数值描述包含要压缩的图像数据的扫描行的缓冲区。 pOutBufdwOutLen 参数值描述方法应在其中IPrintOemUni::Compression放置压缩数据的缓冲区。

在 Unidrv 将扫描行发送到打印后台处理程序之前,它会尝试每个已启用的压缩方法来确定哪个方法创建最小的数据流。 通过使用) 的每种方法压缩数据来确定 (的最佳压缩算法后,它会假脱机使打印机接受最佳压缩格式的打印机命令,然后将压缩的数据发送到打印机。

因此, IPrintOemUni::Compression 无论是否实际使用了方法返回的压缩数据,都会为每个扫描行调用 方法。 调用 方法时, dwOutLen 包含 Unidrv 至今尝试的最佳压缩方法返回的长度。 (如果未尝试其他方法, 则 dwOutLen 包含未压缩的 length。) 如果算法无法生成等于或短于 dwOutLen 字节的压缩扫描行,则应在 piResult 指定的位置返回 -1。

如果在 Unidrv 尝试所有已启用的压缩方法后,由 IPrintOemUni::Compression 返回的压缩数据的长度最小,则 Unidrv 会将缓冲区发送到打印后台处理程序,前面是 CmdEnableOEMComp 命令条目指定的命令。

如果可能,该方法的压缩算法应使用收到的 dwOutLen 值来确定它是否可以在完成之前停止算法,以节省时间,前提是其他压缩方法已经创建了更好的结果。

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

要求

要求
目标平台 桌面
标头 prcomoem.h (包括 Prcomoem.h)