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 包含未压缩的 length。) 如果算法无法生成等于或短于 dwOutLen 字节的压缩扫描行,则应在 piResult 指定的位置返回 -1。
如果在 Unidrv 尝试所有已启用的压缩方法后,由 IPrintOemUni::Compression
返回的压缩数据的长度最小,则 Unidrv 会将缓冲区发送到打印后台处理程序,前面是 CmdEnableOEMComp 命令条目指定的命令。
如果可能,该方法的压缩算法应使用收到的 dwOutLen 值来确定它是否可以在完成之前停止算法,以节省时间,前提是其他压缩方法已经创建了更好的结果。
方法是 IPrintOemUni::Compression
可选的。 如果呈现插件实现此方法,则插件的 IPrintOemUni::GetImplementedMethod 方法在接收“Compression”作为输入时必须返回S_OK。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | prcomoem.h (包括 Prcomoem.h) |