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。
返回值
该方法必须返回以下值之一。
返回代码 | 描述 |
---|---|
|
作成功。 |
|
作失败 |
|
未实现该方法。 |
言论
在将扫描行数据发送到打印后台处理程序之前,通过呈现插件来压缩扫描行数据,从而使用 IPrintOemUni::Compression
方法。 该方法的目的是为 Unidrv 不支持的特定于打印机的压缩方法提供支持。
如果定义了 IPrintOemUni::Compression
方法,并且打印机的 GPD 文件包含 CmdEnableOEMComp 命令条目,则 Unidrv 每次扫描行准备好发送到打印后台处理程序时都会调用该方法。 (有关 CmdEnableOEMComp 命令的信息,请参阅 光栅数据压缩命令。)
pInBuf 和 dwInLen 参数值描述包含要压缩的图像数据的扫描行的缓冲区。
pOutBuf 和 dwOutLen 参数值描述 IPrintOemUni::Compression
方法应放置压缩数据的缓冲区。
在 Unidrv 向打印后台处理程序发送扫描行之前,它会尝试每个启用的压缩方法来确定哪个数据流会创建最小的数据流。 在确定最佳压缩算法(通过使用每个方法压缩数据)后,它会后台处理打印机命令,使打印机能够接受最佳压缩格式,然后将压缩的数据发送到打印机。
因此,会为每个扫描行调用 IPrintOemUni::Compression
方法,无论该方法返回的压缩数据是否实际使用。 调用该方法时,dwOutLen 包含 Unidrv 最佳压缩方法返回的长度, (如果没有尝试其他方法,dwOutLen 包含未压缩的长度。如果算法无法生成等于或短于 dwOutLen 个字节的压缩扫描行,则应在 piResult 指定的位置返回-1。
如果 Unidrv 尝试所有启用的压缩方法后,IPrintOemUni::Compression
返回的压缩数据长度最小,Unidrv 会将缓冲区发送到打印后台处理程序,其前面是 CmdEnableOEMComp 命令条目指定的命令。
如果可能,该方法的压缩算法应使用收到的 dwOutLen 值来确定它是否可以在完成之前停止算法,以节省时间(如果另一种压缩方法已经创建了更好的结果)。
IPrintOemUni::Compression
方法是可选的。 如果呈现插件实现此方法,则插件的 IPrintOemUni::GetImplementedMethod 方法在收到“Compression”作为输入时必须返回S_OK。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | prcomoem.h (include Prcomoem.h) |