共用方式為


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 命令的相關信息,請參閱 點陣數據壓縮命令s.)

pInBufdwInLen 參數值描述包含要壓縮之影像數據的掃描行的緩衝區。 pOutBufdwOutLen 參數值會描述方法應該放置壓縮數據的緩衝區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 (包含 Prcomoem.h)