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

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

pColorTable

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

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

dwCallbackID

指派給 ColorMode 功能目前所選選項之 *IPCallbackID 屬性的呼叫端提供值。 如需詳細資訊,請參閱接下來的<備註>一節。

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 Feature.)

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

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

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

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

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

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

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

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

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

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

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

規格需求

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

另請參閱

HT_Get8BPPMaskPalette

IPrintOemUni

IPrintOemUni::FilterGraphics