IPrintOemUni::FilterGraphics 方法 (prcomoem.h)

IPrintOemUni::FilterGraphics 方法可以搭配 Unidrv 支援的印表機使用,以修改掃描行數據,並將其傳送至多任務緩衝處理程式。

語法

HRESULT FilterGraphics(
  PDEVOBJ pdevobj,
  PBYTE   pBuf,
  DWORD   dwLen
);

參數

pdevobj

呼叫端提供的 DEVOBJ 結構指標。

pBuf

呼叫端提供的緩衝區指標,其中包含要列印的掃描行數據。

dwLen

呼叫端提供的值,代表 pBuf 所指向數據的長度,以位元組為單位。

傳回值

方法必須傳回下列其中一個值:

傳回碼 描述
S_OK 作業成功。
E_FAIL 作業失敗
E_NOTIMPL 此方法尚未實作。

備註

IPrintOemUni::FilterGraphics 方法可用來修改掃描行數據,再傳送到列印後台處理程式。 方法負責將接收的數據傳送至多任務緩衝處理程式。

IPrintOemUni::FilterGraphics 方法是選擇性的。 如果轉譯外掛程式實作此方法,外掛程式的 IPrintOemUni::GetImplementedMethod 方法必須在收到 “FilterGraphics” 作為輸入時傳回S_OK。

如果實作 IPrintOemUni::FilterGraphics 方法,Unidrv 不會多任務緩衝處理印表機數據。 相反地,每當影像數據的緩衝區準備好進行多任務緩衝處理時,Unidrv 就會呼叫此方法。

請注意,實作這個方法時,Unidrv 也不會壓縮印表機數據,就像平常一樣。 如果您想要使用 Unidrv 壓縮,則不應該實作此方法。 此外,您應該修改 IPrintOemUni::GetImplementedMethod ,讓它在傳遞字串 “FilterGraphics” 時傳回S_FALSE。

方法可以執行影像數據的最終後置處理,例如移除相鄰點或任何其他 Unidrv 未提供的數據流篩選作業。 然後,它必須呼叫 IPrintOemDriverUni::D rvWriteSpoolBuf 方法來緩衝處理數據。

Unidrv 的DrvSendPage函式會呼叫 IPrintOemUni::FilterGraphics 方法。 如果您想要實作 IPrintOemUni::FilterGraphics,您不得完全覆寫 Unidrv 的 DrvSendPageDrvNextBand 函式。

在 Unidrv 的 DrvSendPage 函式呼叫外掛程式的 IPrintOemUni::FilterGraphics 實作之前, DrvSendPage

  1. 如有必要,轉置要轉譯的位圖。

  2. 將包含色彩數據的輸出傳遞轉換成單一連續的數據陣列。

  3. 處理掃描行群組,並將此資料轉換成印表機的命令。

  4. 設定 X/Y 位置,並將圖形數據的線條傳遞至印表機。

如果外掛程式已實作 IPrintOemUni::FilterGraphics,Unidrv 會使用掃描行數據呼叫外掛程式,而不是將它傳送至印表機。

IPrintOemUni::FilterGraphics 方法可讓轉譯外掛程式修改掃描行數據,並將其傳送至多任務緩衝處理程式。 如果您實作此函式,Unidrv 將不會緩衝處理您的數據。 相反地,每當數據緩衝區準備好緩衝處理並傳送至印表機時,就會呼叫 IPrintOemUni::FilterGraphics

您可以使用 IPrintOemUni::FilterGraphics 來實作特殊的壓縮方法,或在傳送至印表機或兩者之數據流上執行位操作。 在任何情況下,都不會使用驅動程式的內建壓縮程序代碼。 IPrintOemUni::FilterGraphics 會顯示一組數據,而且必須使用 DrvWriteSpoolBuf 函 式來輸出此數據。 核心驅動程式 (Unidrv) 在呼叫 OEMFilterGraphics 之後,不會進一步處理點陣數據。

當您在外掛程式中實作 IPrintOemUni::FilterGraphics 方法時,它將會用於將點陣數據直接傳送至印表機。 區塊中的掃描行數目是透過與 Resolution 功能相關聯的 PinsPerPhysPass 屬性指定。此屬性是選擇性的,如果您未指定它,它就會設定為 1 (,就像大部分的筆跡列印機和頁面列印機) 一樣。 否則, PinsPerPhysPass 應該是 8 的倍數。 在 IPrintOemUni::FilterGraphics 中, pBuf 參數會指向包含掃描線條點陣數據的緩衝區,例如,針對壓縮 () ,最後會傳送。 dwLen 參數是 pBuf 指向的緩衝區長度。

下列清單描述實作 IPrintOemUni::FilterGraphics 的數個常見案例:

  • 特殊壓縮技術

  • 將傳入點陣數據傳送至印表機之前,先對傳入點陣數據進行位操作

IPrintOemUni::FilterGraphics 最後會使用 DrvWriteSpoolBuf 函式,將數據傳送至印表機。 核心驅動程式 (Unidrv) 不會對 IPrintOemUni::FilterGraphics 所傳送的數據執行更多處理。如果外掛程式執行特殊壓縮或位操作,外掛程式必須配置特殊壓縮或位操作所需的緩衝區。 如果外掛程式未配置自己的緩衝區,而且壓縮的數據小於來源,輸出將會覆寫來源緩衝區。

IPrintOemUni::FilterGraphics 方法可讓您存取掃描線條數據本身,並讓您能夠在點陣數據後處理。

掃描行數目等於影像的高度。 例如,每個圖元 1 位 (bpp) 寬度等於 1 像素的寬度,因此掃描線數目等於影像的高度。

如需自定義 Unidrv 轉譯作業的詳細資訊,請參閱 Unidrv 特定自定義轉譯

規格需求

需求
目標平台 桌面
標頭 prcomoem.h (包括 Prcomoem.h)

另請參閱

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni::GetImplementedMethod

OEMFilterGraphics