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 屬性的討論。
傳回值
方法必須傳回下列其中一個值。
傳回碼 | 描述 |
---|---|
|
作業成功。 |
|
作業失敗。 |
|
未實作 方法。 |
來源位圖特性
目的地位圖特性
言論
IPrintOemUni::ImageProcessing
方法可用來修改圖像位圖,再傳送到列印後台處理程式。 其用途是針對 Unidrv 不支援的色彩模式和半頓方法提供自定義支援。 將點陣圖傳送至列印多任務緩衝處理器的印表機驅動程式(而不是將它傳回 Unidrv)必須將印表機的 GPD 檔案中的 *DevBPP 和 *DevNumOfPlanes 屬性設定為零。
如果實作 方法,而且如果目前色彩格式的 GPD 檔案專案包含 *IPCallbackID 屬性,Unidrv 會在每次有位圖可用時呼叫 方法。 呼叫會在 GDI 轉譯位圖之後進行,然後傳送至多任務緩衝處理器。 (如需 *IPCallbackID 屬性的相關信息,請參閱 ColorMode 功能 的Option 屬性。
如果目前的色彩模式,如 dwCallbackID所指定,就是 Unidrv 支援的色彩模式,則 IPrintOemUni::ImageProcessing
方法應該在接收的位圖上執行半角運算,並將它傳回 Unidrv 以進行多任務緩衝處理。 如果目前的色彩模式是 Unidrv 不支援的模式,則方法必須執行半角運算,然後多任務緩衝處理位圖。
如果方法只執行半場作業,它必須執行下列動作:
- 對數據執行半頓作業,如 pHalftoneOptionIPPARAMS 結構的成員所指示。
- 將修改過的影像數據放入緩衝區,並提供緩衝區的位址做為方法的傳回值,以將修改過的影像數據傳回給 Unidrv。 傳回的緩衝區可以是 pSrcBitmap所指向的緩衝區,也可以是本機配置的緩衝區。
若要處理自訂的色彩格式設定,IPrintOemUni::ImageProcessing
方法必須執行下列動作:
- 將 pSrcBitmap 和 pBitmapInfoHeader 參數值所描述的 DIB 數據轉換成 dwCallbackID 所指示的色彩格式。
- 對數據執行半頓作業,如 pHalftoneOptionIPPARAMS 結構的成員所指示。
- 呼叫 IPrintOemDriverUni::D rvWriteSpoolBuf 方法,將數據傳送至列印後台處理程式。
- 對 iPrintOemDriverUni::D rvXMoveTo 和 IPrintOemDriverUni::D rvYMoveTo 方法進行適當的呼叫,以修改印表機的數據指標位置。
dwCallbackID 參數會指出應該執行的色彩格式設定類型。 在印表機的 GPD 檔案中,ColorMode 功能的每個 *Option 項目都會描述色彩格式。 如果格式需要 IPrintOemUni::ImageProcessing
方法處理,其 *Option 項目必須包含 *IPCallbackID 屬性。 當 Unidrv 呼叫 IPrintOemUni::ImageProcessing
方法時,它會提供與 ColorMode 功能目前選取之選項相關聯的屬性值。 此值是 dwCallbackID 參數的值。
不論 IPrintOemUni::ImageProcessing
方法是執行色彩格式設定作業和多任務緩衝處理影像數據,還是只執行半角運算並將已處理的位圖傳回給 Unidrv,如果它為目的地位圖或其他用途配置大量記憶體,它應該導出 IPrintOemUni::MemoryUsage 方法。 否則,系統效能可能會降低。
如果實作 方法,則會針對頁面上的每個點陣區域呼叫此方法。 不過,如果區域是空白的,bBlankBandIPPARAMS 結構的成員會設定為 TRUE,表示區塊空白且數據無效。 因為頻帶可以分成空白和非空白區域的替代區塊,以將效能優化,因此區塊大小不一定對應到頻帶大小。
pSrcBitmap 和 pBitmapInfoHeader 所描述的來源位圖具有下列特性:
- DIB 內容由上而下排序且未壓縮。
- 數據格式是 處理色彩格式中所列的數據格式。
- 如果格式需要色彩表格,pColorTable指向數據表。
- 色彩數據的格式為PRIMARY_ORDER_CBA格式,如 GDIINFO 結構之 ulPrimaryOrder 成員中所述。 換句話說,如果色彩格式為 RGB 或 CMY,則 n 位中最小顯著 必須包含藍色或黃色值,則下一個 n 位必須包含綠色或洋紅色值,而下一個 n 位必須包含紅色或青色值。 未使用的位位於最重要的位置。 如果格式每圖元使用 4 位,則 n 個 為 1。 針對每個圖元 24 位,n 為 8,如下圖所示。 針對 CMYK,第四個 n 個 位群組包含黑色。
![PRIMARY_ORDER_CBA 格式](images/bitmap.png)
上圖描述兩個像素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) |