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 方法必須在收到 「壓縮」作為輸入時傳回S_OK。
要求
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | prcomoem.h (include Prcomoem.h) |