共用方式為


IPrintOemUni::ImageProcessing 方法 (prcomoem.h)

IPrintOemUni::ImageProcessing 方法可以與 Unidrv 支援的印表機搭配使用,以修改圖像點陣圖數據,以執行色彩格式設定或半角處理。 方法可以將修改過的位陣圖傳回 Unidrv,或將它直接傳送到列印後台處理程式。

語法

HRESULT ImageProcessing(
        PDEVOBJ           pdevobj,
        PBYTE             pSrcBitmap,
        PBITMAPINFOHEADER pBitmapInfoHeader,
        PBYTE             pColorTable,
        DWORD             dwCallbackID,
        PIPPARAMS         pIPParams,
  [out] OUT PBYTE         *ppbResult
);

參數

pdevobj

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

pSrcBitmap

呼叫端提供的輸入指標 DIB

pBitmapInfoHeader

呼叫端提供的位圖指標INFOHEADER 結構,描述 pSrcBitmap 所指向的點陣圖。 位圖INFOHEADER 結構會在 Microsoft Windows SDK 檔中說明。

pColorTable

呼叫端提供的色彩數據表指標。 只有當輸出格式為每像素八位時,才會使用此參數。 如需詳細資訊,請參閱下列一節。

解譯點陣圖時,您必須檢查色彩數據表。 Unidrv 可以修改點陣圖中的色彩,但它也會在色彩數據表中進行對應的調整,因此不會有任何凈變更。 不過,如果您忽略色彩數據表變更,並且只檢查位圖,影像可能無法正確列印。 如需範例,請參閱 HT_Get8BPPMaskPalette中的 pPaletteEntry 參數的討論。

dwCallbackID

指派給 *IPCallbackID 的呼叫端提供值, 目前針對 ColorMode 功能選取的選項屬性。 如需詳細資訊,請參閱下列一節。

pIPParams

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

[out] ppbResult

包含緩衝區位址的記憶體位置指標。 緩衝區的內容取決於應該傳送已轉換 DIB 的位置。

如果此方法想要將已轉換的 DIB 傳回 Unidrv,而且在轉換中成功,它應該將 *ppbResult 設為包含已轉換 DIB 的緩衝區位址,而且應該傳回S_OK。 如果轉換失敗,方法應該將 *ppbResult 設定為 NULL,而且應該傳回E_FAIL。

如果此方法想要將已轉換的 DIB 傳送至多任務緩衝處理器,而且在轉換中成功,則方法應將 *ppbResult 設為 TRUE,且應該傳回S_OK。 如果轉換失敗,方法應該將 *ppbResult 設定為 FALSE,且應該傳回E_FAIL。 如需詳細資訊,請參閱一節中的 *DevBPP 和 *DevNumOfPlanes 屬性的討論。

傳回值

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

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

來源位圖特性

目的地位圖特性

言論

IPrintOemUni::ImageProcessing 方法可用來修改圖像位圖,再傳送到列印後台處理程式。 其用途是針對 Unidrv 不支援的色彩模式和半頓方法提供自定義支援。 將點陣圖傳送至列印多任務緩衝處理器的印表機驅動程式(而不是將它傳回 Unidrv)必須將印表機的 GPD 檔案中的 *DevBPP 和 *DevNumOfPlanes 屬性設定為零。

如果實作 方法,而且如果目前色彩格式的 GPD 檔案專案包含 *IPCallbackID 屬性,Unidrv 會在每次有位圖可用時呼叫 方法。 呼叫會在 GDI 轉譯位圖之後進行,然後傳送至多任務緩衝處理器。 (如需 *IPCallbackID 屬性的相關信息,請參閱 ColorMode 功能 Option 屬性。

如果目前的色彩模式,如 dwCallbackID所指定,就是 Unidrv 支援的色彩模式,則 IPrintOemUni::ImageProcessing 方法應該在接收的位圖上執行半角運算,並將它傳回 Unidrv 以進行多任務緩衝處理。 如果目前的色彩模式是 Unidrv 不支援的模式,則方法必須執行半角運算,然後多任務緩衝處理位圖。

如果方法只執行半場作業,它必須執行下列動作:

  • 對數據執行半頓作業,如 pHalftoneOptionIPPARAMS 結構的成員所指示。
  • 將修改過的影像數據放入緩衝區,並提供緩衝區的位址做為方法的傳回值,以將修改過的影像數據傳回給 Unidrv。 傳回的緩衝區可以是 pSrcBitmap所指向的緩衝區,也可以是本機配置的緩衝區。
如需在 Unidrv 中自訂半頓作業的詳細資訊,請參閱 自定義半頓

若要處理自訂的色彩格式設定,IPrintOemUni::ImageProcessing 方法必須執行下列動作:

如需在 Unidrv 中自訂色彩格式設定作業的詳細資訊,請參閱 自訂色彩格式

dwCallbackID 參數會指出應該執行的色彩格式設定類型。 在印表機的 GPD 檔案中,ColorMode 功能的每個 *Option 項目都會描述色彩格式。 如果格式需要 IPrintOemUni::ImageProcessing 方法處理,其 *Option 項目必須包含 *IPCallbackID 屬性。 當 Unidrv 呼叫 IPrintOemUni::ImageProcessing 方法時,它會提供與 ColorMode 功能目前選取之選項相關聯的屬性值。 此值是 dwCallbackID 參數的值。

不論 IPrintOemUni::ImageProcessing 方法是執行色彩格式設定作業和多任務緩衝處理影像數據,還是只執行半角運算並將已處理的位圖傳回給 Unidrv,如果它為目的地位圖或其他用途配置大量記憶體,它應該導出 IPrintOemUni::MemoryUsage 方法。 否則,系統效能可能會降低。

如果實作 方法,則會針對頁面上的每個點陣區域呼叫此方法。 不過,如果區域是空白的,bBlankBandIPPARAMS 結構的成員會設定為 TRUE,表示區塊空白且數據無效。 因為頻帶可以分成空白和非空白區域的替代區塊,以將效能優化,因此區塊大小不一定對應到頻帶大小。

pSrcBitmappBitmapInfoHeader 所描述的來源位圖具有下列特性:

  • DIB 內容由上而下排序且未壓縮。
  • 數據格式是 處理色彩格式中所列的數據格式。
  • 如果格式需要色彩表格,pColorTable指向數據表。
  • 色彩數據的格式為PRIMARY_ORDER_CBA格式,如 GDIINFO 結構之 ulPrimaryOrder 成員中所述。 換句話說,如果色彩格式為 RGB 或 CMY,則 n 位中最小顯著 必須包含藍色或黃色值,則下一個 n 位必須包含綠色或洋紅色值,而下一個 n 位必須包含紅色或青色值。 未使用的位位於最重要的位置。 如果格式每圖元使用 4 位,則 n 個 為 1。 針對每個圖元 24 位,n 為 8,如下圖所示。 針對 CMYK,第四個 n 個 位群組包含黑色。

PRIMARY_ORDER_CBA 格式
上圖描述兩個像素PRIMARY_ORDER_CBA格式的色彩數據,每個圖元有 24 位的色彩數據。 從低記憶體位址移至高記憶體位址,有八位藍色數據,然後是八位綠色數據,然後是八位紅色數據,之後模式會重複。 這也稱為 BGR 裝置輸出順序。
針對半場運算,其中處理過的位圖會傳回 Unidrv,傳回的點陣圖必須具有下列特性:
  • DIB 內容必須由上而下排序且未壓縮。
  • 數據格式必須是 處理色彩格式中所列的數據格式,而且必須與 dwCallbackID所識別之色彩格式的 *DevBPP 和 *DevNumOfPlanes 属性相容。 (如需這些屬性的相關信息,請參閱 ColorMode 功能 選項屬性。
  • 如果格式需要色彩表格,則必須建立數據表,而且必須在 pColorTable 傳回其位址。
  • 色彩數據必須以PRIMARY_ORDER_CBA格式傳回,如來源位圖所述。
  • pBitmapInfoHeader 所指定的 BITMAPINFOHEADER 結構 必須同時描述輸入和輸出位圖。 IPrintOemUni::ImageProcessing 方法不得變更結構的內容。
IPrintOemUni::ImageProcessing 方法是選擇性的。 如果轉譯外掛程式實作此方法,外掛程式的 IPrintOemUni::GetImplementedMethod 方法必須在收到 “ImageProcessing” 作為輸入時傳回S_OK。

要求

要求 價值
目標平臺 桌面
標頭 prcomoem.h (include Prcomoem.h)

另請參閱

HT_Get8BPPMaskPalette

IPrintOemUni

IPrintOemUni::FilterGraphics